diff --git a/DEPS b/DEPS
index 26c99012..6e0ed51 100644
--- a/DEPS
+++ b/DEPS
@@ -40,7 +40,7 @@
   # 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': '831d842b4330639d80080014560d57edb784184e',
+  'skia_revision': '569beceb08faf7b3e192a7fb1323ea72e134f793',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling V8
   # and whatever else without interference from each other.
diff --git a/build/android/BUILD.gn b/build/android/BUILD.gn
index a09c0f5..4720c8a 100644
--- a/build/android/BUILD.gn
+++ b/build/android/BUILD.gn
@@ -114,6 +114,7 @@
   data = sources + [
            "devil_chromium.json",
            "pylib/gtest/filter/",
+           "pylib/instrumentation/render_test.html.jinja",
            "test_wrapper/logdog_wrapper.py",
            "${android_sdk_build_tools}/aapt",
            "${android_sdk_build_tools}/dexdump",
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadManagerService.java b/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadManagerService.java
index 3ff9a9f..dafaf5b8 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadManagerService.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadManagerService.java
@@ -1556,7 +1556,7 @@
     }
 
     @Override
-    public void onMaxBandwidthChanged(double maxBandwidthMbps) {}
+    public void onConnectionSubtypeChanged(int newConnectionSubtype) {}
 
     @Override
     public void onNetworkConnect(long netId, int connectionType) {}
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 0389b7f..199ad2cb 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
@@ -11,6 +11,7 @@
 import android.widget.LinearLayout;
 
 import org.chromium.base.annotations.CalledByNative;
+import org.chromium.base.metrics.RecordHistogram;
 import org.chromium.chrome.R;
 import org.chromium.chrome.browser.infobar.translate.TranslateMenu;
 import org.chromium.chrome.browser.infobar.translate.TranslateMenuHelper;
@@ -36,6 +37,44 @@
     private long mNativeTranslateInfoBarPtr;
     private TranslateTabLayout mTabLayout;
 
+    private static final String INFOBAR_HISTOGRAM_TRANSLATE_LANGUAGE =
+            "Translate.CompactInfobar.Language.Translate";
+    private static final String INFOBAR_HISTOGRAM_MORE_LANGUAGES_LANGUAGE =
+            "Translate.CompactInfobar.Language.MoreLanguages";
+    private static final String INFOBAR_HISTOGRAM_PAGE_NOT_IN_LANGUAGE =
+            "Translate.CompactInfobar.Language.PageNotIn";
+    private static final String INFOBAR_HISTOGRAM_ALWAYS_TRANSLATE_LANGUAGE =
+            "Translate.CompactInfobar.Language.AlwaysTranslate";
+    private static final String INFOBAR_HISTOGRAM_NEVER_TRANSLATE_LANGUAGE =
+            "Translate.CompactInfobar.Language.NeverTranslate";
+    private static final String INFOBAR_HISTOGRAM = "Translate.CompactInfobar.Event";
+
+    /**
+     * This is used to back a UMA histogram, so it should be treated as
+     * append-only. The values should not be changed or reused, and
+     * INFOBAR_HISTOGRAM_BOUNDARY should be the last.
+     */
+    private static final int INFOBAR_IMPRESSION = 0;
+    private static final int INFOBAR_TRANSLATE = 1;
+    private static final int INFOBAR_DECLINE = 2;
+    private static final int INFOBAR_OPTIONS = 3;
+    private static final int INFOBAR_MORE_LANGUAGES = 4;
+    private static final int INFOBAR_MORE_LANGUAGES_TRANSLATE = 5;
+    private static final int INFOBAR_PAGE_NOT_IN = 6;
+    private static final int INFOBAR_ALWAYS_TRANSLATE = 7;
+    private static final int INFOBAR_NEVER_TRANSLATE = 8;
+    private static final int INFOBAR_NEVER_TRANSLATE_SITE = 9;
+    private static final int INFOBAR_SCROLL_HIDE = 10;
+    private static final int INFOBAR_SCROLL_SHOW = 11;
+    private static final int INFOBAR_REVERT = 12;
+    private static final int INFOBAR_SNACKBAR_ALWAYS_TRANSLATE_IMPRESSION = 13;
+    private static final int INFOBAR_SNACKBAR_NEVER_TRANSLATE_IMPRESSION = 14;
+    private static final int INFOBAR_SNACKBAR_NEVER_TRANSLATE_SITE_IMPRESSION = 15;
+    private static final int INFOBAR_SNACKBAR_CANCEL_ALWAYS = 16;
+    private static final int INFOBAR_SNACKBAR_CANCEL_NEVER_SITE = 17;
+    private static final int INFOBAR_SNACKBAR_CANCEL_NEVER = 18;
+    private static final int INFOBAR_HISTOGRAM_BOUNDARY = 19;
+
     // Need 2 instances of TranslateMenuHelper to prevent a race condition bug which happens when
     // showing language menu after dismissing overflow menu.
     private TranslateMenuHelper mOverflowMenuHelper;
@@ -58,26 +97,40 @@
 
         @Override
         public void onAction(Object actionData) {
-            // TODO(ramyasharma): Add logging metric to track cancel actions.
-            // Do nothing.
+            switch (mMenuItemId) {
+                case TranslateMenu.ID_OVERFLOW_ALWAYS_TRANSLATE:
+                    recordInfobarAction(INFOBAR_SNACKBAR_CANCEL_ALWAYS);
+                    return;
+                case TranslateMenu.ID_OVERFLOW_NEVER_LANGUAGE:
+                    recordInfobarAction(INFOBAR_SNACKBAR_CANCEL_NEVER);
+                    return;
+                case TranslateMenu.ID_OVERFLOW_NEVER_SITE:
+                    recordInfobarAction(INFOBAR_SNACKBAR_CANCEL_NEVER_SITE);
+                    return;
+                default:
+                    assert false : "Unsupported Menu Item Id, when handling snackbar action";
+                    return;
+            }
         }
     };
 
     @CalledByNative
     private static InfoBar create(int initialStep, String sourceLanguageCode,
             String targetLanguageCode, boolean alwaysTranslate, boolean triggeredFromMenu,
-            String[] languages, String[] codes) {
+            String[] languages, String[] languageCodes, int[] hashCodes) {
+        recordInfobarAction(INFOBAR_IMPRESSION);
         return new TranslateCompactInfoBar(initialStep, sourceLanguageCode, targetLanguageCode,
-                alwaysTranslate, triggeredFromMenu, languages, codes);
+                alwaysTranslate, triggeredFromMenu, languages, languageCodes, hashCodes);
     }
 
     TranslateCompactInfoBar(int initialStep, String sourceLanguageCode, String targetLanguageCode,
             boolean alwaysTranslate, boolean triggeredFromMenu, String[] languages,
-            String[] codes) {
+            String[] languageCodes, int[] hashCodes) {
         super(R.drawable.infobar_translate_compact, null, null);
+
         mInitialStep = initialStep;
-        mOptions = TranslateOptions.create(sourceLanguageCode, targetLanguageCode, languages, codes,
-                alwaysTranslate, triggeredFromMenu);
+        mOptions = TranslateOptions.create(sourceLanguageCode, targetLanguageCode, languages,
+                languageCodes, alwaysTranslate, triggeredFromMenu, hashCodes);
     }
 
     @Override
@@ -107,6 +160,7 @@
         mMenuButton.setOnClickListener(new OnClickListener() {
             @Override
             public void onClick(View v) {
+                recordInfobarAction(INFOBAR_OPTIONS);
                 initMenuHelper(TranslateMenu.MENU_OVERFLOW);
                 mOverflowMenuHelper.show(TranslateMenu.MENU_OVERFLOW);
             }
@@ -192,9 +246,13 @@
     public void onTabSelected(TabLayout.Tab tab) {
         switch (tab.getPosition()) {
             case SOURCE_TAB_INDEX:
+                recordInfobarAction(INFOBAR_REVERT);
                 onButtonClicked(ActionType.TRANSLATE_SHOW_ORIGINAL);
                 return;
             case TARGET_TAB_INDEX:
+                recordInfobarAction(INFOBAR_TRANSLATE);
+                recordInfobarLanguageData(
+                        INFOBAR_HISTOGRAM_TRANSLATE_LANGUAGE, mOptions.targetLanguageCode());
                 startTranslating(TARGET_TAB_INDEX);
                 return;
             default:
@@ -213,10 +271,14 @@
         mUserInteracted = true;
         switch (itemId) {
             case TranslateMenu.ID_OVERFLOW_MORE_LANGUAGE:
+                recordInfobarAction(INFOBAR_MORE_LANGUAGES);
                 initMenuHelper(TranslateMenu.MENU_TARGET_LANGUAGE);
                 mLanguageMenuHelper.show(TranslateMenu.MENU_TARGET_LANGUAGE);
                 return;
             case TranslateMenu.ID_OVERFLOW_ALWAYS_TRANSLATE:
+                recordInfobarAction(INFOBAR_ALWAYS_TRANSLATE);
+                recordInfobarLanguageData(
+                        INFOBAR_HISTOGRAM_ALWAYS_TRANSLATE_LANGUAGE, mOptions.sourceLanguageCode());
                 // Only show snackbar when "Always Translate" is enabled.
                 if (!mOptions.alwaysTranslateLanguageState()) {
                     createAndShowSnackbar(
@@ -228,17 +290,22 @@
                 }
                 return;
             case TranslateMenu.ID_OVERFLOW_NEVER_LANGUAGE:
+                recordInfobarAction(INFOBAR_NEVER_TRANSLATE);
+                recordInfobarLanguageData(
+                        INFOBAR_HISTOGRAM_NEVER_TRANSLATE_LANGUAGE, mOptions.sourceLanguageCode());
                 createAndShowSnackbar(
                         getContext().getString(R.string.translate_snackbar_language_never,
                                 mOptions.sourceLanguageName()),
                         Snackbar.UMA_TRANSLATE_NEVER, itemId);
                 return;
             case TranslateMenu.ID_OVERFLOW_NEVER_SITE:
+                recordInfobarAction(INFOBAR_NEVER_TRANSLATE_SITE);
                 createAndShowSnackbar(
                         getContext().getString(R.string.translate_snackbar_site_never),
                         Snackbar.UMA_TRANSLATE_NEVER_SITE, itemId);
                 return;
             case TranslateMenu.ID_OVERFLOW_NOT_THIS_LANGUAGE:
+                recordInfobarAction(INFOBAR_PAGE_NOT_IN);
                 initMenuHelper(TranslateMenu.MENU_SOURCE_LANGUAGE);
                 mLanguageMenuHelper.show(TranslateMenu.MENU_SOURCE_LANGUAGE);
                 return;
@@ -251,6 +318,8 @@
     public void onTargetMenuItemClicked(String code) {
         // Reset target code in both UI and native.
         if (mOptions.setTargetLanguage(code)) {
+            recordInfobarLanguageData(
+                    INFOBAR_HISTOGRAM_MORE_LANGUAGES_LANGUAGE, mOptions.targetLanguageCode());
             nativeApplyStringTranslateOption(
                     mNativeTranslateInfoBarPtr, TranslateOption.TARGET_CODE, code);
             // Adjust UI.
@@ -263,6 +332,8 @@
     public void onSourceMenuItemClicked(String code) {
         // Reset source code in both UI and native.
         if (mOptions.setSourceLanguage(code)) {
+            recordInfobarLanguageData(
+                    INFOBAR_HISTOGRAM_PAGE_NOT_IN_LANGUAGE, mOptions.sourceLanguageCode());
             nativeApplyStringTranslateOption(
                     mNativeTranslateInfoBarPtr, TranslateOption.SOURCE_CODE, code);
             // Adjust UI.
@@ -277,6 +348,20 @@
             handleTranslateOptionPostSnackbar(itemId);
             return;
         }
+        switch (itemId) {
+            case TranslateMenu.ID_OVERFLOW_ALWAYS_TRANSLATE:
+                recordInfobarAction(INFOBAR_SNACKBAR_ALWAYS_TRANSLATE_IMPRESSION);
+                break;
+            case TranslateMenu.ID_OVERFLOW_NEVER_LANGUAGE:
+                recordInfobarAction(INFOBAR_SNACKBAR_NEVER_TRANSLATE_IMPRESSION);
+                break;
+            case TranslateMenu.ID_OVERFLOW_NEVER_SITE:
+                recordInfobarAction(INFOBAR_SNACKBAR_NEVER_TRANSLATE_SITE_IMPRESSION);
+                break;
+            default:
+                assert false : "Unsupported Menu Item Id, to show snackbar.";
+        }
+
         getSnackbarManager().showSnackbar(
                 Snackbar.make(title, new TranslateSnackbarController(itemId),
                                 Snackbar.TYPE_NOTIFICATION, umaType)
@@ -301,6 +386,20 @@
                 nativeApplyBoolTranslateOption(
                         mNativeTranslateInfoBarPtr, TranslateOption.NEVER_TRANSLATE_SITE, true);
                 return;
+            default:
+                assert false : "Unsupported Menu Item Id, in handle post snackbar";
+        }
+    }
+
+    private static void recordInfobarAction(int action) {
+        RecordHistogram.recordEnumeratedHistogram(
+                INFOBAR_HISTOGRAM, action, INFOBAR_HISTOGRAM_BOUNDARY);
+    }
+
+    private void recordInfobarLanguageData(String histogram, String langCode) {
+        Integer hashCode = mOptions.getUMAHashCodeFromCode(langCode);
+        if (hashCode != null) {
+            RecordHistogram.recordSparseSlowlyHistogram(histogram, hashCode);
         }
     }
 
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/infobar/TranslateInfoBar.java b/chrome/android/java/src/org/chromium/chrome/browser/infobar/TranslateInfoBar.java
index 0ef1749..8c25b3f 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/infobar/TranslateInfoBar.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/infobar/TranslateInfoBar.java
@@ -56,7 +56,7 @@
         super(R.drawable.infobar_translate, null, null);
 
         mOptions = TranslateOptions.create(sourceLanguageCode, targetLanguageCode, languages, codes,
-                alwaysTranslate, triggeredFromMenu);
+                alwaysTranslate, triggeredFromMenu, null);
         mInfoBarType = infoBarType;
         mShouldShowNeverBar = shouldShowNeverBar;
         mOptionsPanelViewType = NO_PANEL;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/infobar/TranslateLanguagePanel.java b/chrome/android/java/src/org/chromium/chrome/browser/infobar/TranslateLanguagePanel.java
index 3c0f042b..b41586f2 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/infobar/TranslateLanguagePanel.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/infobar/TranslateLanguagePanel.java
@@ -175,7 +175,7 @@
      */
     private ArrayList<SpinnerLanguageElement> createSpinnerLanguages(String avoidCode) {
         ArrayList<SpinnerLanguageElement> result = new ArrayList<SpinnerLanguageElement>();
-        for (TranslateOptions.TranslateLanguagePair language : mSessionOptions.allLanguages()) {
+        for (TranslateOptions.TranslateLanguageData language : mSessionOptions.allLanguages()) {
             if (!language.mLanguageCode.equals(avoidCode)) {
                 result.add(new SpinnerLanguageElement(
                         language.mLanguageRepresentation, language.mLanguageCode));
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 4c5c2d1..e275743 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
@@ -17,28 +17,34 @@
  */
 public class TranslateOptions {
     /**
-     * A container for Language Code and it's translated representation
-     * For example for Spanish when viewed from a French locale, this will contain es, Espagnol
+     * A container for Language Code and it's translated representation and it's native UMA
+     * specific hashcode.
+     * For example for Spanish when viewed from a French locale, this will contain es, Espagnol,
+     * 114573335
      **/
-    public static class TranslateLanguagePair {
+    public static class TranslateLanguageData {
         public final String mLanguageCode;
         public final String mLanguageRepresentation;
+        public final Integer mLanguageUMAHashCode;
 
-        public TranslateLanguagePair(String languageCode, String languageRepresentation) {
+        public TranslateLanguageData(
+                String languageCode, String languageRepresentation, Integer uMAhashCode) {
             assert languageCode != null;
             assert languageRepresentation != null;
             mLanguageCode = languageCode;
             mLanguageRepresentation = languageRepresentation;
+            mLanguageUMAHashCode = uMAhashCode;
         }
 
         @Override
         public boolean equals(Object obj) {
-            if (!(obj instanceof TranslateLanguagePair)) {
+            if (!(obj instanceof TranslateLanguageData)) {
                 return false;
             }
-            TranslateLanguagePair other = (TranslateLanguagePair) obj;
+            TranslateLanguageData other = (TranslateLanguageData) obj;
             return this.mLanguageCode.equals(other.mLanguageCode)
-                    && this.mLanguageRepresentation.equals(other.mLanguageRepresentation);
+                    && this.mLanguageRepresentation.equals(other.mLanguageRepresentation)
+                    && this.mLanguageUMAHashCode.equals(other.mLanguageUMAHashCode);
         }
 
         @Override
@@ -49,7 +55,7 @@
         @Override
         public String toString() {
             return "mLanguageCode:" + mLanguageCode + " - mlanguageRepresentation "
-                    + mLanguageRepresentation;
+                    + mLanguageRepresentation + " - mLanguageUMAHashCode " + mLanguageUMAHashCode;
         }
     }
 
@@ -62,12 +68,15 @@
     private String mSourceLanguageCode;
     private String mTargetLanguageCode;
 
-    private final ArrayList<TranslateLanguagePair> mAllLanguages;
+    private final ArrayList<TranslateLanguageData> mAllLanguages;
 
     // language code to translated language name map
     // Conceptually final
     private Map<String, String> mCodeToRepresentation;
 
+    // Langage code to its UMA hashcode representation.
+    private Map<String, Integer> mCodeToUMAHashCode;
+
     // Will reflect the state before the object was ever modified
     private final boolean[] mOriginalOptions;
 
@@ -78,7 +87,7 @@
     private final boolean[] mOptions;
 
     private TranslateOptions(String sourceLanguageCode, String targetLanguageCode,
-            ArrayList<TranslateLanguagePair> allLanguages, boolean neverLanguage,
+            ArrayList<TranslateLanguageData> allLanguages, boolean neverLanguage,
             boolean neverDomain, boolean alwaysLanguage, boolean triggeredFromMenu,
             boolean[] originalOptions) {
         mOptions = new boolean[3];
@@ -100,8 +109,10 @@
 
         mAllLanguages = allLanguages;
         mCodeToRepresentation = new HashMap<String, String>();
-        for (TranslateLanguagePair language : allLanguages) {
+        mCodeToUMAHashCode = new HashMap<String, Integer>();
+        for (TranslateLanguageData language : allLanguages) {
             mCodeToRepresentation.put(language.mLanguageCode, language.mLanguageRepresentation);
+            mCodeToUMAHashCode.put(language.mLanguageCode, language.mLanguageUMAHashCode);
         }
     }
 
@@ -109,13 +120,18 @@
      * Creates a TranslateOptions by the given data.
      */
     public static TranslateOptions create(String sourceLanguageCode, String targetLanguageCode,
-            String[] languages, String[] codes, boolean alwaysTranslate,
-            boolean triggeredFromMenu) {
+            String[] languages, String[] codes, boolean alwaysTranslate, boolean triggeredFromMenu,
+            int[] hashCodes) {
         assert languages.length == codes.length;
 
-        ArrayList<TranslateLanguagePair> languageList = new ArrayList<TranslateLanguagePair>();
+        ArrayList<TranslateLanguageData> languageList = new ArrayList<TranslateLanguageData>();
         for (int i = 0; i < languages.length; ++i) {
-            languageList.add(new TranslateLanguagePair(codes[i], languages[i]));
+            Integer hashCode = null;
+            if (hashCodes != null) {
+                hashCode = Integer.valueOf(hashCodes[i]);
+            }
+
+            languageList.add(new TranslateLanguageData(codes[i], languages[i], hashCode));
         }
         return new TranslateOptions(sourceLanguageCode, targetLanguageCode, languageList, false,
                 false, alwaysTranslate, triggeredFromMenu, null);
@@ -158,7 +174,7 @@
                 || (mOptions[ALWAYS_LANGUAGE] != mOriginalOptions[ALWAYS_LANGUAGE]);
     }
 
-    public List<TranslateLanguagePair> allLanguages() {
+    public List<TranslateLanguageData> allLanguages() {
         return mAllLanguages;
     }
 
@@ -238,6 +254,18 @@
         return "";
     }
 
+    /**
+     * Gets the language's UMA hashcode representation from a given language code.
+     * @param languageCode ISO code for the language
+     * @return The UMA hashcode representation of the language, or null if not found.
+     */
+    public Integer getUMAHashCodeFromCode(String languageCode) {
+        if (isValidLanguageUMAHashCode(languageCode)) {
+            return mCodeToUMAHashCode.get(languageCode);
+        }
+        return null;
+    }
+
     private boolean toggleState(int element, boolean newValue) {
         if (!checkElementBoundaries(element)) return false;
 
@@ -248,6 +276,11 @@
     private boolean isValidLanguageCode(String languageCode) {
         return !TextUtils.isEmpty(languageCode) && mCodeToRepresentation.containsKey(languageCode);
     }
+
+    private boolean isValidLanguageUMAHashCode(String languageCode) {
+        return !TextUtils.isEmpty(languageCode) && mCodeToUMAHashCode.containsKey(languageCode);
+    }
+
     private boolean canSetLanguage(String sourceCode, String targetCode) {
         return isValidLanguageCode(sourceCode) && isValidLanguageCode(targetCode)
                 && !sourceCode.equals(targetCode);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/payments/ServiceWorkerPaymentApp.java b/chrome/android/java/src/org/chromium/chrome/browser/payments/ServiceWorkerPaymentApp.java
index 1744b28..fedac13 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/payments/ServiceWorkerPaymentApp.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/payments/ServiceWorkerPaymentApp.java
@@ -10,7 +10,6 @@
 import org.chromium.payments.mojom.PaymentItem;
 import org.chromium.payments.mojom.PaymentMethodData;
 
-import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashSet;
 import java.util.List;
@@ -21,50 +20,42 @@
  * This app class represents a service worker based payment app.
  *
  * Such apps are implemented as service workers according to the Payment
- * App API specification.
+ * Handler API specification.
  *
- * @see https://w3c.github.io/webpayments-payment-apps-api/
+ * @see https://w3c.github.io/webpayments-payment-handler/
  */
 public class ServiceWorkerPaymentApp implements PaymentApp {
     private final WebContents mWebContents;
-    private final ServiceWorkerPaymentAppBridge.Manifest mManifest;
+    private final List<PaymentInstrument> mInstruments;
     private final Set<String> mMethodNames;
 
     /**
-     * Build a service worker payment app instance based on an installed manifest.
+     * Build a service worker payment app instance per origin.
      *
-     * @see https://w3c.github.io/webpayments-payment-apps-api/#payment-app-manifest
+     * @see https://w3c.github.io/webpayments-payment-handler/#structure-of-a-web-payment-app
      *
      * @param webContents The web contents where PaymentRequest was invoked.
-     * @param manifest    A manifest that describes this payment app.
+     * @param instruments A list of payment instruments supported by the payment app.
      */
-    public ServiceWorkerPaymentApp(
-            WebContents webContents, ServiceWorkerPaymentAppBridge.Manifest manifest) {
+    public ServiceWorkerPaymentApp(WebContents webContents, List<PaymentInstrument> instruments) {
         mWebContents = webContents;
-        mManifest = manifest;
+        mInstruments = instruments;
 
         mMethodNames = new HashSet<>();
-        for (ServiceWorkerPaymentAppBridge.Option option : manifest.options) {
-            mMethodNames.addAll(option.enabledMethods);
+        for (PaymentInstrument instrument : instruments) {
+            mMethodNames.addAll(instrument.getInstrumentMethodNames());
         }
     }
 
     @Override
     public void getInstruments(Map<String, PaymentMethodData> unusedMethodDataMap,
             String unusedOrigin, String unusedIFrameOrigin, byte[][] unusedCertificateChain,
-            PaymentItem unusedTotal, final InstrumentsCallback callback) {
-        final List<PaymentInstrument> instruments =
-                new ArrayList<PaymentInstrument>();
-
-        for (ServiceWorkerPaymentAppBridge.Option option : mManifest.options) {
-            instruments.add(new ServiceWorkerPaymentInstrument(
-                    mWebContents, mManifest.registrationId, option));
-        }
-
+            PaymentItem unusedItem, final InstrumentsCallback callback) {
         new Handler().post(new Runnable() {
             @Override
             public void run() {
-                callback.onInstrumentsReady(ServiceWorkerPaymentApp.this, instruments);
+                callback.onInstrumentsReady(
+                        ServiceWorkerPaymentApp.this, Collections.unmodifiableList(mInstruments));
             }
         });
     }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/payments/ServiceWorkerPaymentAppBridge.java b/chrome/android/java/src/org/chromium/chrome/browser/payments/ServiceWorkerPaymentAppBridge.java
index 4d41d73..1cc27d3 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/payments/ServiceWorkerPaymentAppBridge.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/payments/ServiceWorkerPaymentAppBridge.java
@@ -4,8 +4,6 @@
 
 package org.chromium.chrome.browser.payments;
 
-import android.graphics.drawable.Drawable;
-
 import org.chromium.base.annotations.CalledByNative;
 import org.chromium.base.annotations.SuppressFBWarnings;
 import org.chromium.content_public.browser.WebContents;
@@ -14,6 +12,7 @@
 import org.chromium.payments.mojom.PaymentMethodData;
 
 import java.util.ArrayList;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
 
@@ -25,41 +24,10 @@
 @SuppressFBWarnings({"UWF_NULL_FIELD", "URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD",
         "UWF_UNWRITTEN_PUBLIC_OR_PROTECTED_FIELD", "UUF_UNUSED_PUBLIC_OR_PROTECTED_FIELD"})
 public class ServiceWorkerPaymentAppBridge implements PaymentAppFactory.PaymentAppFactoryAddition {
-    /**
-     * This class represents a payment app manifest as defined in the Payment
-     * App API specification.
-     *
-     * @see https://w3c.github.io/webpayments-payment-apps-api/#payment-app-manifest
-     */
-    public static class Manifest {
-        /**
-         * The registration ID of the service worker.
-         *
-         * This can be used to identify a service worker based payment app.
-         */
-        public long registrationId;
-        public String label;
-        public Drawable icon;
-        public List<Option> options = new ArrayList<>();
-    }
-
-    /**
-     * This class represents a payment option as defined in the Payment App API
-     * specification.
-     *
-     * @see https://w3c.github.io/webpayments-payment-apps-api/#payment-app-options
-     */
-    public static class Option {
-        public String id;
-        public String label;
-        public Drawable icon;
-        public List<String> enabledMethods = new ArrayList<>();
-    }
-
     @Override
     public void create(WebContents webContents, Set<String> methodNames,
             PaymentAppFactory.PaymentAppCreatedCallback callback) {
-        nativeGetAllAppManifests(webContents, callback);
+        nativeGetAllPaymentApps(webContents, callback);
     }
 
     /**
@@ -85,30 +53,19 @@
     }
 
     @CalledByNative
-    private static Manifest createManifest(long registrationId, String label, String icon) {
-        Manifest manifest = new Manifest();
-        manifest.registrationId = registrationId;
-        manifest.label = label;
-        // TODO(tommyt): crbug.com/669876. Handle icons.
-        manifest.icon = null;
-        return manifest;
+    private static List<PaymentInstrument> createInstrumentList() {
+        return new ArrayList<PaymentInstrument>();
     }
 
     @CalledByNative
-    private static Option createAndAddOption(
-            Manifest manifest, String id, String label, String icon) {
-        Option option = new Option();
-        option.id = id;
-        option.label = label;
-        // TODO(tommyt): crbug.com/669876. Handle icons.
-        option.icon = null;
-        manifest.options.add(option);
-        return option;
-    }
-
-    @CalledByNative
-    private static void addEnabledMethod(Option option, String enabledMethod) {
-        option.enabledMethods.add(enabledMethod);
+    private static void addInstrument(List<PaymentInstrument> instruments, WebContents webContents,
+            long swRegistrationId, String instrumentId, String label, String[] methodNameArray) {
+        Set<String> methodNames = new HashSet<String>();
+        for (int i = 0; i < methodNameArray.length; i++) {
+            methodNames.add(methodNameArray[i]);
+        }
+        instruments.add(new ServiceWorkerPaymentInstrument(
+                webContents, swRegistrationId, instrumentId, label, methodNames));
     }
 
     @CalledByNative
@@ -147,14 +104,15 @@
     }
 
     @CalledByNative
-    private static void onGotManifest(Manifest manifest, WebContents webContents, Object callback) {
+    private static void onPaymentAppCreated(
+            List<PaymentInstrument> instruments, WebContents webContents, Object callback) {
         assert callback instanceof PaymentAppFactory.PaymentAppCreatedCallback;
         ((PaymentAppFactory.PaymentAppCreatedCallback) callback)
-                .onPaymentAppCreated(new ServiceWorkerPaymentApp(webContents, manifest));
+                .onPaymentAppCreated(new ServiceWorkerPaymentApp(webContents, instruments));
     }
 
     @CalledByNative
-    private static void onGotAllManifests(Object callback) {
+    private static void onAllPaymentAppsCreated(Object callback) {
         assert callback instanceof PaymentAppFactory.PaymentAppCreatedCallback;
         ((PaymentAppFactory.PaymentAppCreatedCallback) callback).onAllPaymentAppsCreated();
     }
@@ -173,10 +131,10 @@
 
     /*
      * TODO(tommyt): crbug.com/505554. Change the |callback| parameter below to
-     * be of type PaymentAppFactory.PaymentAppCreatedCallback, once this JNI bug
+     * be of type PaymentInstrument.InstrumentDetailsCallback, once this JNI bug
      * has been resolved.
      */
-    private static native void nativeGetAllAppManifests(WebContents webContents, Object callback);
+    private static native void nativeGetAllPaymentApps(WebContents webContents, Object callback);
 
     /*
      * TODO(tommyt): crbug.com/505554. Change the |callback| parameter below to
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/payments/ServiceWorkerPaymentInstrument.java b/chrome/android/java/src/org/chromium/chrome/browser/payments/ServiceWorkerPaymentInstrument.java
index bdd2c2f..722c851 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/payments/ServiceWorkerPaymentInstrument.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/payments/ServiceWorkerPaymentInstrument.java
@@ -16,38 +16,38 @@
 import java.util.Set;
 
 /**
- * This instrument class represents a single payment option for a service
+ * This instrument class represents a single payment instrument for a service
  * worker based payment app.
  *
  * @see org.chromium.chrome.browser.payments.ServiceWorkerPaymentApp
  *
- * @see https://w3c.github.io/webpayments-payment-apps-api/
+ * @see https://w3c.github.io/webpayments-payment-handler/
  */
 public class ServiceWorkerPaymentInstrument extends PaymentInstrument {
     private final WebContents mWebContents;
-    private final long mAppRegistrationId;
-    private final ServiceWorkerPaymentAppBridge.Option mOption;
+    private final long mSWRegistrationId;
+    private final String mInstrumentId;
     private final Set<String> mMethodNames;
 
     /**
-     * Build a service worker based payment instrument based on a single payment option
-     * of an installed payment app.
+     * Build a service worker based payment instrument.
      *
      * @see https://w3c.github.io/webpayments-payment-apps-api/#payment-app-options
      *
      * @param webContents       The web contents where PaymentRequest was invoked.
-     * @param appRegistrationId The registration id of the corresponding service worker payment app.
-     * @param option            A payment app option from the payment app.
+     * @param swRegistrationId  The registration id of the corresponding service worker payment app.
+     * @param instrumentId      The unique id of the payment instrument.
+     * @param label             The label of the payment instrument.
+     * @param methodNames       A set of payment method names supported by the payment instrument.
      */
-    public ServiceWorkerPaymentInstrument(WebContents webContents, long appRegistrationId,
-            ServiceWorkerPaymentAppBridge.Option option) {
-        super(Long.toString(appRegistrationId) + "#" + option.id, option.label, null /* icon */,
-                option.icon);
+    public ServiceWorkerPaymentInstrument(WebContents webContents, long swRegistrationId,
+            String instrumentId, String label, Set<String> methodNames) {
+        super(Long.toString(swRegistrationId) + "#" + instrumentId, label, null /* sublabel */,
+                null /* icon */);
         mWebContents = webContents;
-        mAppRegistrationId = appRegistrationId;
-        mOption = option;
-
-        mMethodNames = new HashSet<String>(option.enabledMethods);
+        mSWRegistrationId = swRegistrationId;
+        mInstrumentId = instrumentId;
+        mMethodNames = methodNames;
     }
 
     @Override
@@ -60,9 +60,9 @@
             byte[][] unusedCertificateChain, Map<String, PaymentMethodData> methodData,
             PaymentItem total, List<PaymentItem> displayItems,
             Map<String, PaymentDetailsModifier> modifiers, InstrumentDetailsCallback callback) {
-        ServiceWorkerPaymentAppBridge.invokePaymentApp(mWebContents, mAppRegistrationId, mOption.id,
-                origin, iframeOrigin, new HashSet<>(methodData.values()), total, displayItems,
-                new HashSet<>(modifiers.values()), callback);
+        ServiceWorkerPaymentAppBridge.invokePaymentApp(mWebContents, mSWRegistrationId,
+                mInstrumentId, origin, iframeOrigin, new HashSet<>(methodData.values()), total,
+                displayItems, new HashSet<>(modifiers.values()), callback);
     }
 
     @Override
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 9ec7ac82..9f4e268d 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
@@ -9,7 +9,10 @@
 import org.chromium.base.test.util.Feature;
 import org.chromium.content_public.browser.WebContents;
 
+import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.HashSet;
+import java.util.List;
 import java.util.Set;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.TimeoutException;
@@ -43,33 +46,26 @@
                     @Override
                     public void create(WebContents webContents, Set<String> methodNames,
                             PaymentAppFactory.PaymentAppCreatedCallback callback) {
-                        ServiceWorkerPaymentAppBridge.Manifest testManifest =
-                                new ServiceWorkerPaymentAppBridge.Manifest();
-                        testManifest.registrationId = 0;
-                        testManifest.label = "BobPay";
+                        List<PaymentInstrument> instruments = new ArrayList<PaymentInstrument>();
 
                         if (instrumentPresence != NO_OPTIONS) {
-                            ServiceWorkerPaymentAppBridge.Option testOption =
-                                    new ServiceWorkerPaymentAppBridge.Option();
-                            testOption.id = "new";
-                            testOption.label = "Create BobPay account";
-                            testOption.enabledMethods =
-                                Arrays.asList("https://bobpay.com", "basic-card");
-                            testManifest.options.add(testOption);
+                            instruments.add(new ServiceWorkerPaymentInstrument(webContents,
+                                    0 /* swRegistrationId */, "new" /* instrumentId */,
+                                    "Create BobPay account" /* label */,
+                                    new HashSet<String>(Arrays.asList("https://bobpay.com",
+                                            "basic-card")) /* methodNames */));
                         }
 
                         if (instrumentPresence == TWO_OPTIONS) {
-                            ServiceWorkerPaymentAppBridge.Option testOption =
-                                    new ServiceWorkerPaymentAppBridge.Option();
-                            testOption.id = "existing";
-                            testOption.label = "Existing BobPay account";
-                            testOption.enabledMethods =
-                                Arrays.asList("https://bobpay.com", "basic-card");
-                            testManifest.options.add(testOption);
+                            instruments.add(new ServiceWorkerPaymentInstrument(webContents,
+                                    0 /* swRegistrationId */, "existing" /* instrumentId */,
+                                    "Existing BobPay account" /* label */,
+                                    new HashSet<String>(Arrays.asList("https://bobpay.com",
+                                            "basic-card")) /* methodNames */));
                         }
 
                         callback.onPaymentAppCreated(
-                                new ServiceWorkerPaymentApp(webContents, testManifest));
+                                new ServiceWorkerPaymentApp(webContents, instruments));
                         callback.onAllPaymentAppsCreated();
                     }
                 });
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 a31a9ca..9a0c378 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
@@ -17,6 +17,7 @@
     private static final boolean ALWAYS_TRANSLATE = true;
     private static final String[] LANGUAGES = {"English", "Spanish", "French"};
     private static final String[] CODES = {"en", "es", "fr"};
+    private static final int[] UMA_HASH_CODES = {10, 20, 30};
 
     @Override
     public void setUp() throws Exception {
@@ -26,8 +27,8 @@
     @SmallTest
     @Feature({"Translate"})
     public void testNoChanges() {
-        TranslateOptions options =
-                TranslateOptions.create("en", "es", LANGUAGES, CODES, ALWAYS_TRANSLATE, false);
+        TranslateOptions options = TranslateOptions.create(
+                "en", "es", LANGUAGES, CODES, ALWAYS_TRANSLATE, false, null);
         assertEquals("English", options.sourceLanguageName());
         assertEquals("Spanish", options.targetLanguageName());
         assertEquals("en", options.sourceLanguageCode());
@@ -36,13 +37,14 @@
         assertTrue(options.alwaysTranslateLanguageState());
         assertFalse(options.neverTranslateDomainState());
         assertFalse(options.optionsChanged());
+        assertNull(options.getUMAHashCodeFromCode("en"));
     }
 
     @SmallTest
     @Feature({"Translate"})
     public void testBasicLanguageChanges() {
-        TranslateOptions options =
-                TranslateOptions.create("en", "es", LANGUAGES, CODES, !ALWAYS_TRANSLATE, true);
+        TranslateOptions options = TranslateOptions.create(
+                "en", "es", LANGUAGES, CODES, !ALWAYS_TRANSLATE, true, UMA_HASH_CODES);
         options.setTargetLanguage("fr");
         options.setSourceLanguage("en");
         assertEquals("English", options.sourceLanguageName());
@@ -50,6 +52,8 @@
         assertEquals("en", options.sourceLanguageCode());
         assertEquals("fr", options.targetLanguageCode());
         assertTrue(options.triggeredFromMenu());
+        assertEquals(Integer.valueOf(10), options.getUMAHashCodeFromCode("en"));
+        assertEquals("English", options.getRepresentationFromCode("en"));
 
         assertTrue(options.optionsChanged());
 
@@ -62,8 +66,8 @@
     @SmallTest
     @Feature({"Translate"})
     public void testInvalidLanguageChanges() {
-        TranslateOptions options =
-                TranslateOptions.create("en", "es", LANGUAGES, CODES, ALWAYS_TRANSLATE, false);
+        TranslateOptions options = TranslateOptions.create(
+                "en", "es", LANGUAGES, CODES, ALWAYS_TRANSLATE, false, null);
 
         // Same target language as source
         assertFalse(options.setTargetLanguage("en"));
@@ -85,8 +89,8 @@
     @SmallTest
     @Feature({"Translate"})
     public void testBasicOptionsChanges() {
-        TranslateOptions options =
-                TranslateOptions.create("en", "es", LANGUAGES, CODES, !ALWAYS_TRANSLATE, false);
+        TranslateOptions options = TranslateOptions.create(
+                "en", "es", LANGUAGES, CODES, !ALWAYS_TRANSLATE, false, null);
         assertFalse(options.optionsChanged());
         options.toggleNeverTranslateDomainState(true);
         assertTrue(options.neverTranslateDomainState());
@@ -110,8 +114,8 @@
     @SmallTest
     @Feature({"Translate"})
     public void testInvalidOptionsChanges() {
-        TranslateOptions options =
-                TranslateOptions.create("en", "es", LANGUAGES, CODES, ALWAYS_TRANSLATE, false);
+        TranslateOptions options = TranslateOptions.create(
+                "en", "es", LANGUAGES, CODES, ALWAYS_TRANSLATE, false, null);
 
         // Never translate language should not work, but never translate domain
         // should
diff --git a/chrome/browser/android/payments/service_worker_payment_app_bridge.cc b/chrome/browser/android/payments/service_worker_payment_app_bridge.cc
index 1b0587dd..cff84fca 100644
--- a/chrome/browser/android/payments/service_worker_payment_app_bridge.cc
+++ b/chrome/browser/android/payments/service_worker_payment_app_bridge.cc
@@ -13,57 +13,48 @@
 #include "components/payments/mojom/payment_app.mojom.h"
 #include "content/public/browser/browser_thread.h"
 #include "content/public/browser/payment_app_provider.h"
+#include "content/public/browser/stored_payment_instrument.h"
 #include "content/public/browser/web_contents.h"
 #include "jni/ServiceWorkerPaymentAppBridge_jni.h"
 
-using base::android::AttachCurrentThread;
-using base::android::ConvertJavaStringToUTF8;
-using base::android::ConvertUTF8ToJavaString;
-using base::android::JavaParamRef;
-using base::android::JavaRef;
-using base::android::ScopedJavaGlobalRef;
-using base::android::ScopedJavaLocalRef;
-using payments::mojom::PaymentAppRequest;
-using payments::mojom::PaymentAppRequestPtr;
-using payments::mojom::PaymentCurrencyAmount;
-using payments::mojom::PaymentDetailsModifier;
-using payments::mojom::PaymentDetailsModifierPtr;
-using payments::mojom::PaymentItem;
-using payments::mojom::PaymentMethodData;
-using payments::mojom::PaymentMethodDataPtr;
-
 namespace {
 
-void OnGotAllManifests(const JavaRef<jobject>& jweb_contents,
-                       const JavaRef<jobject>& jcallback,
-                       content::PaymentAppProvider::Manifests manifests) {
+using ::base::android::AttachCurrentThread;
+using ::base::android::ConvertJavaStringToUTF8;
+using ::base::android::ConvertUTF8ToJavaString;
+using ::base::android::JavaParamRef;
+using ::base::android::JavaRef;
+using ::base::android::ScopedJavaGlobalRef;
+using ::base::android::ScopedJavaLocalRef;
+using ::base::android::ToJavaArrayOfStrings;
+using ::payments::mojom::PaymentAppRequest;
+using ::payments::mojom::PaymentAppRequestPtr;
+using ::payments::mojom::PaymentCurrencyAmount;
+using ::payments::mojom::PaymentDetailsModifier;
+using ::payments::mojom::PaymentDetailsModifierPtr;
+using ::payments::mojom::PaymentItem;
+using ::payments::mojom::PaymentMethodData;
+using ::payments::mojom::PaymentMethodDataPtr;
+
+void OnGotAllPaymentApps(const JavaRef<jobject>& jweb_contents,
+                         const JavaRef<jobject>& jcallback,
+                         content::PaymentAppProvider::PaymentApps apps) {
   JNIEnv* env = AttachCurrentThread();
 
-  for (const auto& entry : manifests) {
-    ScopedJavaLocalRef<jobject> java_manifest =
-        Java_ServiceWorkerPaymentAppBridge_createManifest(
-            env, entry.first, ConvertUTF8ToJavaString(env, entry.second->name),
-            entry.second->icon
-                ? ConvertUTF8ToJavaString(env, *entry.second->icon)
-                : nullptr);
-    for (const auto& option : entry.second->options) {
-      ScopedJavaLocalRef<jobject> java_option =
-          Java_ServiceWorkerPaymentAppBridge_createAndAddOption(
-              env, java_manifest, ConvertUTF8ToJavaString(env, option->id),
-              ConvertUTF8ToJavaString(env, option->name),
-              option->icon ? ConvertUTF8ToJavaString(env, *option->icon)
-                           : nullptr);
-      for (const auto& enabled_method : option->enabled_methods) {
-        Java_ServiceWorkerPaymentAppBridge_addEnabledMethod(
-            env, java_option, ConvertUTF8ToJavaString(env, enabled_method));
-      }
+  for (const auto& app_info : apps) {
+    ScopedJavaLocalRef<jobject> java_instruments =
+        Java_ServiceWorkerPaymentAppBridge_createInstrumentList(env);
+    for (const auto& instrument : app_info.second) {
+      Java_ServiceWorkerPaymentAppBridge_addInstrument(
+          env, java_instruments, jweb_contents, instrument->registration_id,
+          ConvertUTF8ToJavaString(env, instrument->instrument_key),
+          ConvertUTF8ToJavaString(env, instrument->name),
+          ToJavaArrayOfStrings(env, instrument->enabled_methods));
     }
-
-    Java_ServiceWorkerPaymentAppBridge_onGotManifest(env, java_manifest,
-                                                     jweb_contents, jcallback);
+    Java_ServiceWorkerPaymentAppBridge_onPaymentAppCreated(
+        env, java_instruments, jweb_contents, jcallback);
   }
-
-  Java_ServiceWorkerPaymentAppBridge_onGotAllManifests(env, jcallback);
+  Java_ServiceWorkerPaymentAppBridge_onAllPaymentAppsCreated(env, jcallback);
 }
 
 void OnPaymentAppInvoked(const JavaRef<jobject>& jweb_contents,
@@ -78,18 +69,18 @@
 
 }  // namespace
 
-static void GetAllAppManifests(JNIEnv* env,
-                               const JavaParamRef<jclass>& jcaller,
-                               const JavaParamRef<jobject>& jweb_contents,
-                               const JavaParamRef<jobject>& jcallback) {
+static void GetAllPaymentApps(JNIEnv* env,
+                              const JavaParamRef<jclass>& jcaller,
+                              const JavaParamRef<jobject>& jweb_contents,
+                              const JavaParamRef<jobject>& jcallback) {
   DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
 
   content::WebContents* web_contents =
       content::WebContents::FromJavaWebContents(jweb_contents);
 
-  content::PaymentAppProvider::GetInstance()->GetAllManifests(
+  content::PaymentAppProvider::GetInstance()->GetAllPaymentApps(
       web_contents->GetBrowserContext(),
-      base::Bind(&OnGotAllManifests,
+      base::Bind(&OnGotAllPaymentApps,
                  ScopedJavaGlobalRef<jobject>(env, jweb_contents),
                  ScopedJavaGlobalRef<jobject>(env, jcallback)));
 }
diff --git a/chrome/browser/predictors/resource_prefetcher.cc b/chrome/browser/predictors/resource_prefetcher.cc
index d010e9d..6926c657 100644
--- a/chrome/browser/predictors/resource_prefetcher.cc
+++ b/chrome/browser/predictors/resource_prefetcher.cc
@@ -15,6 +15,7 @@
 #include "net/base/io_buffer.h"
 #include "net/base/load_flags.h"
 #include "net/base/request_priority.h"
+#include "net/traffic_annotation/network_traffic_annotation.h"
 #include "net/url_request/url_request_context.h"
 #include "url/origin.h"
 
@@ -139,8 +140,49 @@
 }
 
 void ResourcePrefetcher::SendRequest(const GURL& url) {
+  net::NetworkTrafficAnnotationTag traffic_annotation =
+      net::DefineNetworkTrafficAnnotation("resource_prefetch", R"(
+        semantics {
+          sender: "Resource Prefetch"
+          description:
+            "Speculative Prefetch is based on the observation that users do "
+            "most of their browsing to a limited number of websites (per "
+            "device). It observes subresource requests made during a page "
+            "load, and builds a local database of likely resources, keyed by "
+            "URL and/or hostname. When a user navigates (or intends to navigate"
+            ") to a URL, this database is leveraged to pre-emptively fetch "
+            "subresources."
+          trigger:
+            "Prefetching can start from two different origins:\n"
+            " - When a navigation hint is given (for instance, from Custom "
+            "Tabs), before any actual navigation.\n"
+            " - At navigation time.\n"
+            "Given a URL of the page that a user is going to navigate to, "
+            "ResourcePrefetchPredictor generates a list of resources (from the "
+            "URL or host database, after following the most likely redirect "
+            "chain from the local redirect database). This list is ranked, and "
+            "given to a ResourcePrefetcher."
+          data:
+            "An HTTP Get request to the resource."
+          destination: WEBSITE
+        }
+        policy {
+          cookies_allowed: true
+          cookies_store: "user"
+          setting:
+            "Users can control this feature via the 'Use prediction service to "
+            "load pages more quickly' setting under Privacy. The feature is "
+            "enabled by default."
+          chrome_policy {
+            NetworkPredictionOptions {
+              policy_options {mode: MANDATORY}
+              NetworkPredictionOptions: 2
+            }
+          }
+        })");
   std::unique_ptr<net::URLRequest> url_request =
-      delegate_->GetURLRequestContext()->CreateRequest(url, net::IDLE, this);
+      delegate_->GetURLRequestContext()->CreateRequest(url, net::IDLE, this,
+                                                       traffic_annotation);
   host_inflight_counts_[url.host()] += 1;
 
   url_request->set_method("GET");
diff --git a/chrome/browser/translate/android/translate_utils.cc b/chrome/browser/translate/android/translate_utils.cc
index 325f4ca..f477602 100644
--- a/chrome/browser/translate/android/translate_utils.cc
+++ b/chrome/browser/translate/android/translate_utils.cc
@@ -10,6 +10,7 @@
 #include "base/android/jni_string.h"
 #include "base/android/jni_weak_ref.h"
 #include "base/memory/ptr_util.h"
+#include "components/metrics/metrics_log.h"
 #include "components/translate/core/browser/translate_infobar_delegate.h"
 
 using base::android::JavaParamRef;
@@ -36,3 +37,15 @@
   }
   return base::android::ToJavaArrayOfStrings(env, codes);
 }
+
+ScopedJavaLocalRef<jintArray> TranslateUtils::GetJavaLanguageHashCodes(
+    JNIEnv* env,
+    translate::TranslateInfoBarDelegate* delegate) {
+  std::vector<int> hashCodes;
+  hashCodes.reserve(delegate->num_languages());
+  for (size_t i = 0; i < delegate->num_languages(); ++i) {
+    hashCodes.push_back(
+        metrics::MetricsLog::Hash(delegate->language_code_at(i)));
+  }
+  return base::android::ToJavaIntArray(env, hashCodes);
+}
diff --git a/chrome/browser/translate/android/translate_utils.h b/chrome/browser/translate/android/translate_utils.h
index 0d3b322..c80b7d2 100644
--- a/chrome/browser/translate/android/translate_utils.h
+++ b/chrome/browser/translate/android/translate_utils.h
@@ -41,6 +41,9 @@
   static base::android::ScopedJavaLocalRef<jobjectArray> GetJavaLanguageCodes(
       JNIEnv* env,
       translate::TranslateInfoBarDelegate* delegate);
+  static base::android::ScopedJavaLocalRef<jintArray> GetJavaLanguageHashCodes(
+      JNIEnv* env,
+      translate::TranslateInfoBarDelegate* delegate);
 };
 
 #endif  // CHROME_BROWSER_TRANSLATE_ANDROID_TRANSLATE_UTILS_H_
diff --git a/chrome/browser/ui/android/infobars/translate_compact_infobar.cc b/chrome/browser/ui/android/infobars/translate_compact_infobar.cc
index 94a729f..7ad3a45 100644
--- a/chrome/browser/ui/android/infobars/translate_compact_infobar.cc
+++ b/chrome/browser/ui/android/infobars/translate_compact_infobar.cc
@@ -43,6 +43,8 @@
       TranslateUtils::GetJavaLanguages(env, delegate);
   base::android::ScopedJavaLocalRef<jobjectArray> java_codes =
       TranslateUtils::GetJavaLanguageCodes(env, delegate);
+  base::android::ScopedJavaLocalRef<jintArray> java_hash_codes =
+      TranslateUtils::GetJavaLanguageHashCodes(env, delegate);
 
   ScopedJavaLocalRef<jstring> source_language_code =
       base::android::ConvertUTF8ToJavaString(
@@ -54,7 +56,8 @@
   return Java_TranslateCompactInfoBar_create(
       env, delegate->translate_step(), source_language_code,
       target_language_code, delegate->ShouldAlwaysTranslate(),
-      delegate->triggered_from_menu(), java_languages, java_codes);
+      delegate->triggered_from_menu(), java_languages, java_codes,
+      java_hash_codes);
 }
 
 void TranslateCompactInfoBar::ProcessButton(int action) {
diff --git a/components/signin/core/browser/gaia_cookie_manager_service.cc b/components/signin/core/browser/gaia_cookie_manager_service.cc
index 58556ca..c182d31 100644
--- a/components/signin/core/browser/gaia_cookie_manager_service.cc
+++ b/components/signin/core/browser/gaia_cookie_manager_service.cc
@@ -25,6 +25,7 @@
 #include "google_apis/gaia/oauth2_token_service.h"
 #include "net/base/load_flags.h"
 #include "net/http/http_status_code.h"
+#include "net/traffic_annotation/network_traffic_annotation.h"
 #include "net/url_request/url_fetcher.h"
 #include "net/url_request/url_fetcher_delegate.h"
 
@@ -213,8 +214,35 @@
 std::unique_ptr<net::URLFetcher>
 GaiaCookieManagerService::ExternalCcResultFetcher::CreateFetcher(
     const GURL& url) {
-  std::unique_ptr<net::URLFetcher> fetcher =
-      net::URLFetcher::Create(0, url, net::URLFetcher::GET, this);
+  net::NetworkTrafficAnnotationTag traffic_annotation =
+      net::DefineNetworkTrafficAnnotation(
+          "gaia_cookie_manager_external_cc_result", R"(
+          semantics {
+            sender: "Gaia Cookie Manager"
+            description:
+              "This request is used by the GaiaCookieManager when adding an "
+              "account to the Google authentication cookies to check the "
+              "authentication server's connection state."
+            trigger:
+              "This is used at most once per lifetime of the application "
+              "during the first merge session flow (the flow used to add an "
+              "account for which Chrome has a valid OAuth2 refresh token to "
+              "the Gaia authentication cookies). The value of the first fetch "
+              "is stored in RAM for future uses."
+            data: "None."
+            destination: GOOGLE_OWNED_SERVICE
+          }
+          policy {
+            cookies_allowed: false
+            setting: "This feature cannot be disabled in settings."
+            policy_exception_justification:
+              "Not implemented. Disabling GaiaCookieManager would break "
+              "features that depend on it (like account consistency and "
+              "support for child accounts). It makes sense to control top "
+              "level features that use the GaiaCookieManager."
+          })");
+  std::unique_ptr<net::URLFetcher> fetcher = net::URLFetcher::Create(
+      0, url, net::URLFetcher::GET, this, traffic_annotation);
   fetcher->SetRequestContext(helper_->request_context());
   fetcher->SetLoadFlags(net::LOAD_DO_NOT_SEND_COOKIES |
                         net::LOAD_DO_NOT_SAVE_COOKIES);
diff --git a/content/gpu/BUILD.gn b/content/gpu/BUILD.gn
index b1490e8..7cd973e 100644
--- a/content/gpu/BUILD.gn
+++ b/content/gpu/BUILD.gn
@@ -66,6 +66,7 @@
     # component build, determine if it should not be included here.
     # http://crbug.com/702833.
     "//media/gpu/ipc/service",
+    "//media/mojo/clients:clients",
     "//services/service_manager/public/cpp",
     "//services/service_manager/public/interfaces",
     "//services/shape_detection:lib",
diff --git a/content/gpu/gpu_child_thread.cc b/content/gpu/gpu_child_thread.cc
index 2258ec9..5b63f9f 100644
--- a/content/gpu/gpu_child_thread.cc
+++ b/content/gpu/gpu_child_thread.cc
@@ -36,6 +36,7 @@
 
 #if defined(OS_ANDROID)
 #include "media/base/android/media_drm_bridge_client.h"
+#include "media/mojo/clients/mojo_android_overlay.h"
 #endif
 
 namespace content {
@@ -284,6 +285,11 @@
   service_factory_.reset(new GpuServiceFactory(
       gpu_service_->media_gpu_channel_manager()->AsWeakPtr()));
 
+#if defined(OS_ANDROID)
+  gpu_service_->media_gpu_channel_manager()->SetOverlayFactory(
+      base::Bind(&GpuChildThread::CreateAndroidOverlay));
+#endif
+
   if (GetContentClient()->gpu())  // NULL in tests.
     GetContentClient()->gpu()->GpuServiceInitialized(gpu_preferences);
 
@@ -305,4 +311,17 @@
                                        std::move(request));
 }
 
+#if defined(OS_ANDROID)
+// static
+std::unique_ptr<media::AndroidOverlay> GpuChildThread::CreateAndroidOverlay(
+    const base::UnguessableToken& routing_token,
+    media::AndroidOverlayConfig config) {
+  media::mojom::AndroidOverlayProviderPtr provider_ptr;
+  ChildThread::Get()->GetConnector()->BindInterface(
+      content::mojom::kBrowserServiceName, &provider_ptr);
+  return base::MakeUnique<media::MojoAndroidOverlay>(
+      std::move(provider_ptr), std::move(config), routing_token);
+}
+#endif
+
 }  // namespace content
diff --git a/content/gpu/gpu_child_thread.h b/content/gpu/gpu_child_thread.h
index cfc258d..d86ce7ab 100644
--- a/content/gpu/gpu_child_thread.h
+++ b/content/gpu/gpu_child_thread.h
@@ -29,6 +29,7 @@
 #include "gpu/ipc/service/gpu_channel_manager_delegate.h"
 #include "gpu/ipc/service/gpu_config.h"
 #include "gpu/ipc/service/x_util.h"
+#include "media/base/android_overlay_mojo_factory.h"
 #include "mojo/public/cpp/bindings/associated_binding_set.h"
 #include "mojo/public/cpp/bindings/binding_set.h"
 #include "services/service_manager/public/interfaces/service_factory.mojom.h"
@@ -115,6 +116,12 @@
     return gpu_service_->gpu_channel_manager();
   }
 
+#if defined(OS_ANDROID)
+  static std::unique_ptr<media::AndroidOverlay> CreateAndroidOverlay(
+      const base::UnguessableToken& routing_token,
+      media::AndroidOverlayConfig);
+#endif
+
   // Set this flag to true if a fatal error occurred before we receive the
   // OnInitialize message, in which case we just declare ourselves DOA.
   const bool dead_on_arrival_;
diff --git a/content/public/android/java/src/org/chromium/content/browser/BackgroundSyncNetworkObserver.java b/content/public/android/java/src/org/chromium/content/browser/BackgroundSyncNetworkObserver.java
index b13802a..997d05a1 100644
--- a/content/public/android/java/src/org/chromium/content/browser/BackgroundSyncNetworkObserver.java
+++ b/content/public/android/java/src/org/chromium/content/browser/BackgroundSyncNetworkObserver.java
@@ -86,8 +86,7 @@
         mNativePtrs.add(nativePtr);
 
         nativeNotifyConnectionTypeChanged(
-                nativePtr, NetworkChangeNotifierAutoDetect.convertToConnectionType(
-                                   mNotifier.getCurrentNetworkState()));
+                nativePtr, mNotifier.getCurrentNetworkState().getConnectionType());
     }
 
     @CalledByNative
@@ -110,7 +109,7 @@
     }
 
     @Override
-    public void onMaxBandwidthChanged(double maxBandwidthMbps) {}
+    public void onConnectionSubtypeChanged(int newConnectionSubtype) {}
     @Override
     public void onNetworkConnect(long netId, int connectionType) {}
     @Override
diff --git a/device/bluetooth/bluetooth_adapter_win.cc b/device/bluetooth/bluetooth_adapter_win.cc
index c04b614..78424bd 100644
--- a/device/bluetooth/bluetooth_adapter_win.cc
+++ b/device/bluetooth/bluetooth_adapter_win.cc
@@ -50,8 +50,10 @@
       weak_ptr_factory_(this) {}
 
 BluetoothAdapterWin::~BluetoothAdapterWin() {
-  if (task_manager_.get())
+  if (task_manager_.get()) {
     task_manager_->RemoveObserver(this);
+    task_manager_->Shutdown();
+  }
 }
 
 std::string BluetoothAdapterWin::GetAddress() const {
diff --git a/headless/app/headless_shell.cc b/headless/app/headless_shell.cc
index e1107a3..244d338 100644
--- a/headless/app/headless_shell.cc
+++ b/headless/app/headless_shell.cc
@@ -59,10 +59,13 @@
 HeadlessShell::HeadlessShell()
     : browser_(nullptr),
       devtools_client_(HeadlessDevToolsClient::Create()),
+#if !defined(CHROME_MULTIPLE_DLL_CHILD)
       web_contents_(nullptr),
-      processed_page_ready_(false),
       browser_context_(nullptr),
-      weak_factory_(this) {}
+#endif
+      processed_page_ready_(false),
+      weak_factory_(this) {
+}
 
 HeadlessShell::~HeadlessShell() {}
 
diff --git a/headless/app/headless_shell.h b/headless/app/headless_shell.h
index e38f017..c6411ca4 100644
--- a/headless/app/headless_shell.h
+++ b/headless/app/headless_shell.h
@@ -96,10 +96,12 @@
   GURL url_;
   HeadlessBrowser* browser_;  // Not owned.
   std::unique_ptr<HeadlessDevToolsClient> devtools_client_;
+#if !defined(CHROME_MULTIPLE_DLL_CHILD)
   HeadlessWebContents* web_contents_;
+  HeadlessBrowserContext* browser_context_;
+#endif
   bool processed_page_ready_;
   std::unique_ptr<base::FileProxy> file_proxy_;
-  HeadlessBrowserContext* browser_context_;
   std::unique_ptr<DeterministicDispatcher> deterministic_dispatcher_;
   base::WeakPtrFactory<HeadlessShell> weak_factory_;
 
diff --git a/headless/lib/headless_content_main_delegate.cc b/headless/lib/headless_content_main_delegate.cc
index 59b6def..15048db 100644
--- a/headless/lib/headless_content_main_delegate.cc
+++ b/headless/lib/headless_content_main_delegate.cc
@@ -44,7 +44,9 @@
 namespace {
 // Keep in sync with content/common/content_constants_internal.h.
 // TODO(skyostil): Add a tracing test for this.
+#if !defined(CHROME_MULTIPLE_DLL_CHILD)
 const int kTraceEventBrowserProcessSortIndex = -6;
+#endif
 
 HeadlessContentMainDelegate* g_current_headless_content_main_delegate = nullptr;
 
diff --git a/media/base/android_overlay_mojo_factory.h b/media/base/android_overlay_mojo_factory.h
index 04458bd..eddf7820 100644
--- a/media/base/android_overlay_mojo_factory.h
+++ b/media/base/android_overlay_mojo_factory.h
@@ -7,13 +7,14 @@
 
 #include "base/callback.h"
 #include "base/macros.h"
+#include "base/unguessable_token.h"
 #include "media/base/android_overlay_config.h"
 
 namespace media {
 
 // Note that this compiles on non-android too.
 using AndroidOverlayMojoFactoryCB = base::RepeatingCallback<std::unique_ptr<
-    AndroidOverlay>(base::UnguessableToken&, const AndroidOverlayConfig&)>
+    AndroidOverlay>(const base::UnguessableToken&, AndroidOverlayConfig)>;
 
 }  // namespace media
 
diff --git a/media/gpu/android_video_decode_accelerator.cc b/media/gpu/android_video_decode_accelerator.cc
index 8c3e66f3..6b2faa2c 100644
--- a/media/gpu/android_video_decode_accelerator.cc
+++ b/media/gpu/android_video_decode_accelerator.cc
@@ -242,6 +242,7 @@
     std::unique_ptr<AndroidVideoSurfaceChooser> surface_chooser,
     const MakeGLContextCurrentCallback& make_context_current_cb,
     const GetGLES2DecoderCallback& get_gles2_decoder_cb,
+    const AndroidOverlayMojoFactoryCB& overlay_factory_cb,
     const PlatformConfig& platform_config)
     : client_(nullptr),
       codec_allocator_(codec_allocator),
@@ -259,6 +260,7 @@
       defer_surface_creation_(false),
       surface_chooser_(std::move(surface_chooser)),
       platform_config_(platform_config),
+      overlay_factory_cb_(overlay_factory_cb),
       weak_this_factory_(this) {}
 
 AndroidVideoDecodeAccelerator::~AndroidVideoDecodeAccelerator() {
diff --git a/media/gpu/android_video_decode_accelerator.h b/media/gpu/android_video_decode_accelerator.h
index ce1347b..3788eae 100644
--- a/media/gpu/android_video_decode_accelerator.h
+++ b/media/gpu/android_video_decode_accelerator.h
@@ -20,6 +20,7 @@
 #include "gpu/command_buffer/service/gpu_preferences.h"
 #include "media/base/android/media_codec_bridge_impl.h"
 #include "media/base/android/media_drm_bridge_cdm_context.h"
+#include "media/base/android_overlay_mojo_factory.h"
 #include "media/base/content_decryption_module.h"
 #include "media/gpu/android_video_surface_chooser.h"
 #include "media/gpu/avda_codec_allocator.h"
@@ -66,6 +67,7 @@
       std::unique_ptr<AndroidVideoSurfaceChooser> surface_chooser,
       const MakeGLContextCurrentCallback& make_context_current_cb,
       const GetGLES2DecoderCallback& get_gles2_decoder_cb,
+      const AndroidOverlayMojoFactoryCB& overlay_factory_cb,
       const PlatformConfig& platform_config);
 
   ~AndroidVideoDecodeAccelerator() override;
@@ -397,6 +399,9 @@
 
   PlatformConfig platform_config_;
 
+  // Optional factory to produce mojo AndroidOverlay instances.
+  AndroidOverlayMojoFactoryCB overlay_factory_cb_;
+
   // WeakPtrFactory for posting tasks back to |this|.
   base::WeakPtrFactory<AndroidVideoDecodeAccelerator> weak_this_factory_;
 
diff --git a/media/gpu/android_video_decode_accelerator_unittest.cc b/media/gpu/android_video_decode_accelerator_unittest.cc
index ad0693a37..751bc54a 100644
--- a/media/gpu/android_video_decode_accelerator_unittest.cc
+++ b/media/gpu/android_video_decode_accelerator_unittest.cc
@@ -333,7 +333,7 @@
         &codec_allocator_, std::move(chooser_that_is_usually_null_),
         base::Bind(&MakeContextCurrent),
         base::Bind(&GetGLES2Decoder, gl_decoder_.AsWeakPtr()),
-        platform_config_);
+        AndroidOverlayMojoFactoryCB(), platform_config_);
     vda_.reset(avda);
 
     bool result = vda_->Initialize(config_, &client_);
diff --git a/media/gpu/gpu_video_decode_accelerator_factory.cc b/media/gpu/gpu_video_decode_accelerator_factory.cc
index c3eebb1..6b809fd 100644
--- a/media/gpu/gpu_video_decode_accelerator_factory.cc
+++ b/media/gpu/gpu_video_decode_accelerator_factory.cc
@@ -43,7 +43,7 @@
     const BindGLImageCallback& bind_image_cb) {
   return base::WrapUnique(new GpuVideoDecodeAcceleratorFactory(
       get_gl_context_cb, make_context_current_cb, bind_image_cb,
-      GetGLES2DecoderCallback()));
+      GetGLES2DecoderCallback(), AndroidOverlayMojoFactoryCB()));
 }
 
 // static
@@ -52,10 +52,11 @@
     const GetGLContextCallback& get_gl_context_cb,
     const MakeGLContextCurrentCallback& make_context_current_cb,
     const BindGLImageCallback& bind_image_cb,
-    const GetGLES2DecoderCallback& get_gles2_decoder_cb) {
+    const GetGLES2DecoderCallback& get_gles2_decoder_cb,
+    const AndroidOverlayMojoFactoryCB& overlay_factory_cb) {
   return base::WrapUnique(new GpuVideoDecodeAcceleratorFactory(
       get_gl_context_cb, make_context_current_cb, bind_image_cb,
-      get_gles2_decoder_cb));
+      get_gles2_decoder_cb, overlay_factory_cb));
 }
 
 // static
@@ -254,7 +255,7 @@
   decoder.reset(new AndroidVideoDecodeAccelerator(
       AVDACodecAllocator::GetInstance(),
       base::MakeUnique<AndroidVideoSurfaceChooserImpl>(),
-      make_context_current_cb_, get_gles2_decoder_cb_,
+      make_context_current_cb_, get_gles2_decoder_cb_, overlay_factory_cb_,
       AndroidVideoDecodeAccelerator::PlatformConfig::CreateDefault()));
   return decoder;
 }
@@ -264,11 +265,13 @@
     const GetGLContextCallback& get_gl_context_cb,
     const MakeGLContextCurrentCallback& make_context_current_cb,
     const BindGLImageCallback& bind_image_cb,
-    const GetGLES2DecoderCallback& get_gles2_decoder_cb)
+    const GetGLES2DecoderCallback& get_gles2_decoder_cb,
+    const AndroidOverlayMojoFactoryCB& overlay_factory_cb)
     : get_gl_context_cb_(get_gl_context_cb),
       make_context_current_cb_(make_context_current_cb),
       bind_image_cb_(bind_image_cb),
-      get_gles2_decoder_cb_(get_gles2_decoder_cb) {}
+      get_gles2_decoder_cb_(get_gles2_decoder_cb),
+      overlay_factory_cb_(overlay_factory_cb) {}
 
 GpuVideoDecodeAcceleratorFactory::~GpuVideoDecodeAcceleratorFactory() {}
 
diff --git a/media/gpu/gpu_video_decode_accelerator_factory.h b/media/gpu/gpu_video_decode_accelerator_factory.h
index 71d5a30..d54230c 100644
--- a/media/gpu/gpu_video_decode_accelerator_factory.h
+++ b/media/gpu/gpu_video_decode_accelerator_factory.h
@@ -12,6 +12,7 @@
 #include "gpu/command_buffer/service/gpu_preferences.h"
 #include "gpu/config/gpu_driver_bug_workarounds.h"
 #include "gpu/config/gpu_info.h"
+#include "media/base/android_overlay_mojo_factory.h"
 #include "media/gpu/media_gpu_export.h"
 #include "media/video/video_decode_accelerator.h"
 
@@ -65,7 +66,8 @@
       const GetGLContextCallback& get_gl_context_cb,
       const MakeGLContextCurrentCallback& make_context_current_cb,
       const BindGLImageCallback& bind_image_cb,
-      const GetGLES2DecoderCallback& get_gles2_decoder_cb);
+      const GetGLES2DecoderCallback& get_gles2_decoder_cb,
+      const AndroidOverlayMojoFactoryCB& overlay_factory_cb);
 
   static std::unique_ptr<GpuVideoDecodeAcceleratorFactory> CreateWithNoGL();
 
@@ -84,7 +86,8 @@
       const GetGLContextCallback& get_gl_context_cb,
       const MakeGLContextCurrentCallback& make_context_current_cb,
       const BindGLImageCallback& bind_image_cb,
-      const GetGLES2DecoderCallback& get_gles2_decoder_cb);
+      const GetGLES2DecoderCallback& get_gles2_decoder_cb,
+      const AndroidOverlayMojoFactoryCB& overlay_factory_cb);
 
 #if defined(OS_WIN)
   std::unique_ptr<VideoDecodeAccelerator> CreateD3D11VDA(
@@ -122,6 +125,7 @@
   const MakeGLContextCurrentCallback make_context_current_cb_;
   const BindGLImageCallback bind_image_cb_;
   const GetGLES2DecoderCallback get_gles2_decoder_cb_;
+  const AndroidOverlayMojoFactoryCB overlay_factory_cb_;
 
   base::ThreadChecker thread_checker_;
 
diff --git a/media/gpu/ipc/service/gpu_video_decode_accelerator.cc b/media/gpu/ipc/service/gpu_video_decode_accelerator.cc
index 3609e5d..d26f19a 100644
--- a/media/gpu/ipc/service/gpu_video_decode_accelerator.cc
+++ b/media/gpu/ipc/service/gpu_video_decode_accelerator.cc
@@ -157,7 +157,8 @@
 GpuVideoDecodeAccelerator::GpuVideoDecodeAccelerator(
     int32_t host_route_id,
     gpu::GpuCommandBufferStub* stub,
-    const scoped_refptr<base::SingleThreadTaskRunner>& io_task_runner)
+    const scoped_refptr<base::SingleThreadTaskRunner>& io_task_runner,
+    const AndroidOverlayMojoFactoryCB& overlay_factory_cb)
     : host_route_id_(host_route_id),
       stub_(stub),
       texture_target_(0),
@@ -166,6 +167,7 @@
                       base::WaitableEvent::InitialState::NOT_SIGNALED),
       child_task_runner_(base::ThreadTaskRunnerHandle::Get()),
       io_task_runner_(io_task_runner),
+      overlay_factory_cb_(overlay_factory_cb),
       weak_factory_for_io_(this) {
   DCHECK(stub_);
   stub_->AddDestructionObserver(this);
@@ -359,7 +361,7 @@
   std::unique_ptr<GpuVideoDecodeAcceleratorFactory> vda_factory =
       GpuVideoDecodeAcceleratorFactory::CreateWithGLES2Decoder(
           get_gl_context_cb_, make_context_current_cb_, bind_image_cb_,
-          get_gles2_decoder_cb_);
+          get_gles2_decoder_cb_, overlay_factory_cb_);
 
   if (!vda_factory) {
     LOG(ERROR) << "Failed creating the VDA factory";
diff --git a/media/gpu/ipc/service/gpu_video_decode_accelerator.h b/media/gpu/ipc/service/gpu_video_decode_accelerator.h
index 6c6d0bff..7165477 100644
--- a/media/gpu/ipc/service/gpu_video_decode_accelerator.h
+++ b/media/gpu/ipc/service/gpu_video_decode_accelerator.h
@@ -21,6 +21,7 @@
 #include "gpu/ipc/service/gpu_command_buffer_stub.h"
 #include "ipc/ipc_listener.h"
 #include "ipc/ipc_sender.h"
+#include "media/base/android_overlay_mojo_factory.h"
 #include "media/gpu/gpu_video_decode_accelerator_helpers.h"
 #include "media/video/video_decode_accelerator.h"
 #include "ui/gfx/geometry/size.h"
@@ -44,7 +45,8 @@
   GpuVideoDecodeAccelerator(
       int32_t host_route_id,
       gpu::GpuCommandBufferStub* stub,
-      const scoped_refptr<base::SingleThreadTaskRunner>& io_task_runner);
+      const scoped_refptr<base::SingleThreadTaskRunner>& io_task_runner,
+      const AndroidOverlayMojoFactoryCB& factory);
 
   // Static query for the capabilities, which includes the supported profiles.
   // This query calls the appropriate platform-specific version.  The returned
@@ -151,6 +153,9 @@
   // GPU IO thread task runner.
   const scoped_refptr<base::SingleThreadTaskRunner> io_task_runner_;
 
+  // Optional factory for mojo-based android overlays.
+  AndroidOverlayMojoFactoryCB overlay_factory_cb_;
+
   // Weak pointers will be invalidated on IO thread.
   base::WeakPtrFactory<Client> weak_factory_for_io_;
 
diff --git a/media/gpu/ipc/service/media_gpu_channel.cc b/media/gpu/ipc/service/media_gpu_channel.cc
index 2f5732d..288598c 100644
--- a/media/gpu/ipc/service/media_gpu_channel.cc
+++ b/media/gpu/ipc/service/media_gpu_channel.cc
@@ -89,9 +89,11 @@
   base::UnguessableToken channel_token_;
 };
 
-MediaGpuChannel::MediaGpuChannel(gpu::GpuChannel* channel,
-                                 const base::UnguessableToken& channel_token)
-    : channel_(channel) {
+MediaGpuChannel::MediaGpuChannel(
+    gpu::GpuChannel* channel,
+    const base::UnguessableToken& channel_token,
+    const AndroidOverlayMojoFactoryCB& overlay_factory_cb)
+    : channel_(channel), overlay_factory_cb_(overlay_factory_cb) {
   channel_->AddFilter(new MediaGpuChannelFilter(channel_token));
 }
 
@@ -149,7 +151,8 @@
     return;
   }
   GpuVideoDecodeAccelerator* decoder = new GpuVideoDecodeAccelerator(
-      decoder_route_id, stub, stub->channel()->io_task_runner());
+      decoder_route_id, stub, stub->channel()->io_task_runner(),
+      overlay_factory_cb_);
   bool succeeded = decoder->Initialize(config);
   GpuCommandBufferMsg_CreateVideoDecoder::WriteReplyParams(reply_message,
                                                            succeeded);
diff --git a/media/gpu/ipc/service/media_gpu_channel.h b/media/gpu/ipc/service/media_gpu_channel.h
index 547b26a..589df0e 100644
--- a/media/gpu/ipc/service/media_gpu_channel.h
+++ b/media/gpu/ipc/service/media_gpu_channel.h
@@ -10,6 +10,7 @@
 #include "base/unguessable_token.h"
 #include "ipc/ipc_listener.h"
 #include "ipc/ipc_sender.h"
+#include "media/base/android_overlay_mojo_factory.h"
 #include "media/gpu/ipc/service/gpu_jpeg_decode_accelerator.h"
 #include "media/video/video_decode_accelerator.h"
 
@@ -28,7 +29,8 @@
 class MediaGpuChannel : public IPC::Listener, public IPC::Sender {
  public:
   MediaGpuChannel(gpu::GpuChannel* channel,
-                  const base::UnguessableToken& channel_token);
+                  const base::UnguessableToken& channel_token,
+                  const AndroidOverlayMojoFactoryCB& overlay_factory_cb);
   ~MediaGpuChannel() override;
 
   // IPC::Sender implementation:
@@ -53,6 +55,7 @@
   gpu::GpuChannel* const channel_;
   base::UnguessableToken channel_token_;
   std::unique_ptr<GpuJpegDecodeAccelerator> jpeg_decoder_;
+  AndroidOverlayMojoFactoryCB overlay_factory_cb_;
   DISALLOW_COPY_AND_ASSIGN(MediaGpuChannel);
 };
 
diff --git a/media/gpu/ipc/service/media_gpu_channel_manager.cc b/media/gpu/ipc/service/media_gpu_channel_manager.cc
index 0a7e7c8..9605762 100644
--- a/media/gpu/ipc/service/media_gpu_channel_manager.cc
+++ b/media/gpu/ipc/service/media_gpu_channel_manager.cc
@@ -28,7 +28,7 @@
   DCHECK(gpu_channel);
   base::UnguessableToken channel_token = base::UnguessableToken::Create();
   std::unique_ptr<MediaGpuChannel> media_gpu_channel(
-      new MediaGpuChannel(gpu_channel, channel_token));
+      new MediaGpuChannel(gpu_channel, channel_token, overlay_factory_cb_));
   gpu_channel->SetUnhandledMessageListener(media_gpu_channel.get());
   media_gpu_channels_[client_id] = std::move(media_gpu_channel);
   channel_to_token_[client_id] = channel_token;
@@ -58,4 +58,9 @@
   return channel_manager_->LookupChannel(it->second);
 }
 
+void MediaGpuChannelManager::SetOverlayFactory(
+    AndroidOverlayMojoFactoryCB overlay_factory_cb) {
+  overlay_factory_cb_ = std::move(overlay_factory_cb);
+}
+
 }  // namespace media
diff --git a/media/gpu/ipc/service/media_gpu_channel_manager.h b/media/gpu/ipc/service/media_gpu_channel_manager.h
index 8cc3f2f..48f798b2 100644
--- a/media/gpu/ipc/service/media_gpu_channel_manager.h
+++ b/media/gpu/ipc/service/media_gpu_channel_manager.h
@@ -15,6 +15,7 @@
 #include "base/unguessable_token.h"
 #include "ipc/ipc_listener.h"
 #include "ipc/ipc_sender.h"
+#include "media/base/android_overlay_mojo_factory.h"
 #include "media/video/video_decode_accelerator.h"
 
 namespace gpu {
@@ -36,6 +37,8 @@
   void RemoveChannel(int32_t client_id);
   void DestroyAllChannels();
 
+  void SetOverlayFactory(AndroidOverlayMojoFactoryCB overlay_factory_cb);
+
   // TODO(sandersd): Should we expose the MediaGpuChannel instead?
   gpu::GpuChannel* LookupChannel(const base::UnguessableToken& channel_token);
 
@@ -45,6 +48,7 @@
       media_gpu_channels_;
   std::map<base::UnguessableToken, int32_t> token_to_channel_;
   std::map<int32_t, base::UnguessableToken> channel_to_token_;
+  AndroidOverlayMojoFactoryCB overlay_factory_cb_;
   DISALLOW_COPY_AND_ASSIGN(MediaGpuChannelManager);
 };
 
diff --git a/media/mojo/clients/BUILD.gn b/media/mojo/clients/BUILD.gn
index fa96b34..9322758 100644
--- a/media/mojo/clients/BUILD.gn
+++ b/media/mojo/clients/BUILD.gn
@@ -16,6 +16,8 @@
 
     "//media/test/*",
 
+    "//content/gpu:*",
+
     # TODO(liberato): can we avoid this?
     "//content/test/*",
   ]
diff --git a/media/mojo/clients/mojo_android_overlay.cc b/media/mojo/clients/mojo_android_overlay.cc
index ab6554a..eb03d74 100644
--- a/media/mojo/clients/mojo_android_overlay.cc
+++ b/media/mojo/clients/mojo_android_overlay.cc
@@ -6,20 +6,14 @@
 
 #include "gpu/ipc/common/gpu_surface_lookup.h"
 #include "services/service_manager/public/cpp/connect.h"
-#include "services/service_manager/public/interfaces/interface_provider.mojom.h"
 
 namespace media {
 
 MojoAndroidOverlay::MojoAndroidOverlay(
-    service_manager::mojom::InterfaceProvider* interface_provider,
+    mojom::AndroidOverlayProviderPtr provider_ptr,
     AndroidOverlayConfig config,
     const base::UnguessableToken& routing_token)
-    : interface_provider_(interface_provider), config_(std::move(config)) {
-  // Connect to the provider service.
-  mojom::AndroidOverlayProviderPtr provider_ptr;
-  service_manager::GetInterface<mojom::AndroidOverlayProvider>(
-      interface_provider_, &provider_ptr_);
-
+    : config_(std::move(config)) {
   // Fill in details of |config| into |mojo_config|.  Our caller could do this
   // too, but since we want to retain |config_| anyway, we do it here.
   mojom::AndroidOverlayConfigPtr mojo_config =
@@ -32,8 +26,8 @@
   binding_ = base::MakeUnique<mojo::Binding<mojom::AndroidOverlayClient>>(
       this, mojo::MakeRequest(&ptr));
 
-  provider_ptr_->CreateOverlay(mojo::MakeRequest(&overlay_ptr_), std::move(ptr),
-                               std::move(mojo_config));
+  provider_ptr->CreateOverlay(mojo::MakeRequest(&overlay_ptr_), std::move(ptr),
+                              std::move(mojo_config));
 }
 
 MojoAndroidOverlay::~MojoAndroidOverlay() {
diff --git a/media/mojo/clients/mojo_android_overlay.h b/media/mojo/clients/mojo_android_overlay.h
index af52d8f..311862d 100644
--- a/media/mojo/clients/mojo_android_overlay.h
+++ b/media/mojo/clients/mojo_android_overlay.h
@@ -11,22 +11,15 @@
 #include "media/mojo/interfaces/android_overlay.mojom.h"
 #include "mojo/public/cpp/bindings/binding.h"
 
-namespace service_manager {
-namespace mojom {
-class InterfaceProvider;
-}
-}
-
 namespace media {
 
 // AndroidOverlay implementation via mojo.
 class MojoAndroidOverlay : public AndroidOverlay,
                            public mojom::AndroidOverlayClient {
  public:
-  MojoAndroidOverlay(
-      service_manager::mojom::InterfaceProvider* interface_provider,
-      AndroidOverlayConfig config,
-      const base::UnguessableToken& routing_token);
+  MojoAndroidOverlay(mojom::AndroidOverlayProviderPtr provider_ptr,
+                     AndroidOverlayConfig config,
+                     const base::UnguessableToken& routing_token);
 
   ~MojoAndroidOverlay() override;
 
@@ -39,9 +32,7 @@
   void OnDestroyed() override;
 
  private:
-  service_manager::mojom::InterfaceProvider* interface_provider_;
   AndroidOverlayConfig config_;
-  mojom::AndroidOverlayProviderPtr provider_ptr_;
   mojom::AndroidOverlayPtr overlay_ptr_;
   std::unique_ptr<mojo::Binding<mojom::AndroidOverlayClient>> binding_;
   gl::ScopedJavaSurface surface_;
diff --git a/media/mojo/clients/mojo_android_overlay_unittest.cc b/media/mojo/clients/mojo_android_overlay_unittest.cc
index 80465af..cf11d7e 100644
--- a/media/mojo/clients/mojo_android_overlay_unittest.cc
+++ b/media/mojo/clients/mojo_android_overlay_unittest.cc
@@ -67,34 +67,9 @@
     mojom::AndroidOverlayConfigPtr config_;
   };
 
-  // When the overlay client needs the provider interface, it'll ask us.
-  class MockInterfaceProvider
-      : public StrictMock<service_manager::mojom::InterfaceProvider> {
-   public:
-    // |provider| is the provider that we'll provide, provided that we're only
-    // asked to provide it once.  Savvy?
-    MockInterfaceProvider(mojom::AndroidOverlayProvider& provider)
-        : provider_binding_(&provider) {}
-
-    // We can't mock GetInterface directly because of |handle|'s deleted ctor.
-    MOCK_METHOD1(InterfaceGotten, void(const std::string&));
-
-    void GetInterface(const std::string& name,
-                      mojo::ScopedMessagePipeHandle handle) override {
-      // Let the mock know.
-      InterfaceGotten(name);
-
-      // Actually do the work.
-      provider_binding_.Bind(
-          mojom::AndroidOverlayProviderRequest(std::move(handle)));
-    }
-
-    mojo::Binding<mojom::AndroidOverlayProvider> provider_binding_;
-  };
-
  public:
   MojoAndroidOverlayTest()
-      : overlay_binding_(&mock_overlay_), interface_provider_(mock_provider_) {}
+      : provider_binding_(&mock_provider_), overlay_binding_(&mock_overlay_) {}
 
   ~MojoAndroidOverlayTest() override {}
 
@@ -128,14 +103,14 @@
   // Create an overlay in |overlay_client_| using the current config, but do
   // not bind anything to |overlay_request_| yet.
   void CreateOverlay() {
-    EXPECT_CALL(interface_provider_,
-                InterfaceGotten(mojom::AndroidOverlayProvider::Name_))
-        .Times(1);
     EXPECT_CALL(mock_provider_, OverlayCreated());
 
     base::UnguessableToken routing_token = base::UnguessableToken::Create();
+    mojom::AndroidOverlayProviderPtr provider_ptr;
+    provider_binding_.Bind(mojo::MakeRequest(&provider_ptr));
+
     overlay_client_.reset(new MojoAndroidOverlay(
-        &interface_provider_, std::move(config_), routing_token));
+        std::move(provider_ptr), std::move(config_), routing_token));
     base::RunLoop().RunUntilIdle();
   }
 
@@ -182,14 +157,13 @@
   // |interface_provider_| will bind it.
   MockAndroidOverlayProvider mock_provider_;
 
+  // Binding for |mock_provider_|.
+  mojo::Binding<mojom::AndroidOverlayProvider> provider_binding_;
+
   // The mock overlay impl that |mock_provider_| will provide.
   MockAndroidOverlay mock_overlay_;
   mojo::Binding<mojom::AndroidOverlay> overlay_binding_;
 
-  // The InterfaceProvider impl that will provide |mock_provider_| to the
-  // overlay client |overlay_client_|.
-  MockInterfaceProvider interface_provider_;
-
   // The client under test.
   std::unique_ptr<AndroidOverlay> overlay_client_;
 
diff --git a/net/android/BUILD.gn b/net/android/BUILD.gn
index 03a8205..2ff835d 100644
--- a/net/android/BUILD.gn
+++ b/net/android/BUILD.gn
@@ -118,6 +118,7 @@
     "javatests/src/org/chromium/net/AndroidProxyConfigServiceTestUtil.java",
     "javatests/src/org/chromium/net/AndroidProxySelectorTest.java",
     "javatests/src/org/chromium/net/NetErrorsTest.java",
+    "javatests/src/org/chromium/net/NetworkChangeNotifierNoNativeTest.java",
     "javatests/src/org/chromium/net/NetworkChangeNotifierTest.java",
     "javatests/src/org/chromium/net/X509UtilTest.java",
   ]
diff --git a/net/android/java/src/org/chromium/net/NetworkChangeNotifier.java b/net/android/java/src/org/chromium/net/NetworkChangeNotifier.java
index 6549e02..924e3b8 100644
--- a/net/android/java/src/org/chromium/net/NetworkChangeNotifier.java
+++ b/net/android/java/src/org/chromium/net/NetworkChangeNotifier.java
@@ -38,9 +38,8 @@
     private final ArrayList<Long> mNativeChangeNotifiers;
     private final ObserverList<ConnectionTypeObserver> mConnectionTypeObservers;
     private NetworkChangeNotifierAutoDetect mAutoDetector;
+    // Last value broadcast via ConnectionTypeChange signal.
     private int mCurrentConnectionType = ConnectionType.CONNECTION_UNKNOWN;
-    private double mCurrentMaxBandwidth = Double.POSITIVE_INFINITY;
-    private int mMaxBandwidthConnectionType = mCurrentConnectionType;
 
     @SuppressLint("StaticFieldLeak")
     private static NetworkChangeNotifier sInstance;
@@ -82,14 +81,9 @@
 
     @CalledByNative
     public int getCurrentConnectionSubtype() {
-        return mAutoDetector == null ? ConnectionSubtype.SUBTYPE_UNKNOWN
-                                     : NetworkChangeNotifierAutoDetect.convertToConnectionSubtype(
-                                               mAutoDetector.getCurrentNetworkState());
-    }
-
-    @CalledByNative
-    public double getCurrentMaxBandwidthInMbps() {
-        return mCurrentMaxBandwidth;
+        return mAutoDetector == null
+                ? ConnectionSubtype.SUBTYPE_UNKNOWN
+                : mAutoDetector.getCurrentNetworkState().getConnectionSubtype();
     }
 
     /**
@@ -116,13 +110,6 @@
     }
 
     /**
-     * Calls a native map lookup of subtype to max bandwidth.
-     */
-    public static double getMaxBandwidthForConnectionSubtype(int subtype) {
-        return nativeGetMaxBandwidthForConnectionSubtype(subtype);
-    }
-
-    /**
      * Adds a native-side observer.
      */
     @CalledByNative
@@ -199,8 +186,8 @@
                                 updateCurrentConnectionType(newConnectionType);
                             }
                             @Override
-                            public void onMaxBandwidthChanged(double maxBandwidthMbps) {
-                                updateCurrentMaxBandwidth(maxBandwidthMbps);
+                            public void onConnectionSubtypeChanged(int newConnectionSubtype) {
+                                notifyObserversOfConnectionSubtypeChange(newConnectionSubtype);
                             }
                             @Override
                             public void onNetworkConnect(long netId, int connectionType) {
@@ -222,9 +209,8 @@
                         policy);
                 final NetworkChangeNotifierAutoDetect.NetworkState networkState =
                         mAutoDetector.getCurrentNetworkState();
-                updateCurrentConnectionType(
-                        NetworkChangeNotifierAutoDetect.convertToConnectionType(networkState));
-                updateCurrentMaxBandwidth(mAutoDetector.getCurrentMaxBandwidthInMbps(networkState));
+                updateCurrentConnectionType(networkState.getConnectionType());
+                notifyObserversOfConnectionSubtypeChange(networkState.getConnectionSubtype());
             }
         } else {
             destroyAutoDetector();
@@ -232,7 +218,8 @@
     }
 
     /**
-     * Updates the perceived network state when not auto-detecting changes to connectivity.
+     * For testing, updates the perceived network state when not auto-detecting changes to
+     * connectivity.
      *
      * @param networkAvailable True if the NetworkChangeNotifier should perceive a "connected"
      *    state, false implies "disconnected".
@@ -248,8 +235,9 @@
                 mCurrentConnectionType != ConnectionType.CONNECTION_NONE;
         if (connectionCurrentlyExists != forceOnline) {
             updateCurrentConnectionType(forceOnline ? ConnectionType.CONNECTION_UNKNOWN
-                    : ConnectionType.CONNECTION_NONE);
-            updateCurrentMaxBandwidth(forceOnline ? Double.POSITIVE_INFINITY : 0.0);
+                                                    : ConnectionType.CONNECTION_NONE);
+            notifyObserversOfConnectionSubtypeChange(forceOnline ? ConnectionSubtype.SUBTYPE_UNKNOWN
+                                                                 : ConnectionSubtype.SUBTYPE_NONE);
         }
     }
 
@@ -288,11 +276,11 @@
         getInstance().notifyObserversOfConnectionTypeChange(connectionType, netId);
     }
 
-    // For testing, pretend the max bandwidth has changed.
+    // For testing, pretend the connection subtype has changed.
     @CalledByNative
-    public static void fakeMaxBandwidthChanged(double maxBandwidthMbps) {
+    public static void fakeConnectionSubtypeChanged(int connectionSubtype) {
         setAutoDetectConnectivityState(false);
-        getInstance().notifyObserversOfMaxBandwidthChange(maxBandwidthMbps);
+        getInstance().notifyObserversOfConnectionSubtypeChange(connectionSubtype);
     }
 
     private void updateCurrentConnectionType(int newConnectionType) {
@@ -300,16 +288,6 @@
         notifyObserversOfConnectionTypeChange(newConnectionType);
     }
 
-    private void updateCurrentMaxBandwidth(double maxBandwidthMbps) {
-        if (maxBandwidthMbps == mCurrentMaxBandwidth
-                && mCurrentConnectionType == mMaxBandwidthConnectionType) {
-            return;
-        }
-        mCurrentMaxBandwidth = maxBandwidthMbps;
-        mMaxBandwidthConnectionType = mCurrentConnectionType;
-        notifyObserversOfMaxBandwidthChange(maxBandwidthMbps);
-    }
-
     /**
      * Alerts all observers of a connection change.
      */
@@ -330,9 +308,9 @@
     /**
      * Alerts all observers of a bandwidth change.
      */
-    void notifyObserversOfMaxBandwidthChange(double maxBandwidthMbps) {
+    void notifyObserversOfConnectionSubtypeChange(int connectionSubtype) {
         for (Long nativeChangeNotifier : mNativeChangeNotifiers) {
-            nativeNotifyMaxBandwidthChanged(nativeChangeNotifier, maxBandwidthMbps);
+            nativeNotifyMaxBandwidthChanged(nativeChangeNotifier, connectionSubtype);
         }
     }
 
@@ -402,7 +380,7 @@
             long nativePtr, int newConnectionType, long defaultNetId);
 
     @NativeClassQualifiedName("NetworkChangeNotifierDelegateAndroid")
-    private native void nativeNotifyMaxBandwidthChanged(long nativePtr, double maxBandwidthMbps);
+    private native void nativeNotifyMaxBandwidthChanged(long nativePtr, int subType);
 
     @NativeClassQualifiedName("NetworkChangeNotifierDelegateAndroid")
     private native void nativeNotifyOfNetworkConnect(
@@ -417,8 +395,6 @@
     @NativeClassQualifiedName("NetworkChangeNotifierDelegateAndroid")
     private native void nativeNotifyPurgeActiveNetworkList(long nativePtr, long[] activeNetIds);
 
-    private static native double nativeGetMaxBandwidthForConnectionSubtype(int subtype);
-
     // For testing only.
     public static NetworkChangeNotifierAutoDetect getAutoDetectorForTest() {
         return getInstance().mAutoDetector;
diff --git a/net/android/java/src/org/chromium/net/NetworkChangeNotifierAutoDetect.java b/net/android/java/src/org/chromium/net/NetworkChangeNotifierAutoDetect.java
index c3bfc8e9..42543c93 100644
--- a/net/android/java/src/org/chromium/net/NetworkChangeNotifierAutoDetect.java
+++ b/net/android/java/src/org/chromium/net/NetworkChangeNotifierAutoDetect.java
@@ -49,7 +49,10 @@
 // TODO(crbug.com/635567): Fix this properly.
 @SuppressLint("NewApi")
 public class NetworkChangeNotifierAutoDetect extends BroadcastReceiver {
-    static class NetworkState {
+    /**
+     * Immutable class representing the state of a device's network.
+     */
+    public static class NetworkState {
         private final boolean mConnected;
         private final int mType;
         private final int mSubtype;
@@ -81,6 +84,72 @@
         public String getWifiSsid() {
             return mWifiSsid;
         }
+
+        /**
+         * Returns the connection type for the given NetworkState.
+         */
+        @ConnectionType
+        public int getConnectionType() {
+            if (!isConnected()) {
+                return ConnectionType.CONNECTION_NONE;
+            }
+            return convertToConnectionType(getNetworkType(), getNetworkSubType());
+        }
+
+        /**
+         * Returns the connection subtype for the given NetworkState.
+         */
+        public int getConnectionSubtype() {
+            if (!isConnected()) {
+                return ConnectionSubtype.SUBTYPE_NONE;
+            }
+
+            switch (getNetworkType()) {
+                case ConnectivityManager.TYPE_ETHERNET:
+                case ConnectivityManager.TYPE_WIFI:
+                case ConnectivityManager.TYPE_WIMAX:
+                case ConnectivityManager.TYPE_BLUETOOTH:
+                    return ConnectionSubtype.SUBTYPE_UNKNOWN;
+                case ConnectivityManager.TYPE_MOBILE:
+                    // Use information from TelephonyManager to classify the connection.
+                    switch (getNetworkSubType()) {
+                        case TelephonyManager.NETWORK_TYPE_GPRS:
+                            return ConnectionSubtype.SUBTYPE_GPRS;
+                        case TelephonyManager.NETWORK_TYPE_EDGE:
+                            return ConnectionSubtype.SUBTYPE_EDGE;
+                        case TelephonyManager.NETWORK_TYPE_CDMA:
+                            return ConnectionSubtype.SUBTYPE_CDMA;
+                        case TelephonyManager.NETWORK_TYPE_1xRTT:
+                            return ConnectionSubtype.SUBTYPE_1XRTT;
+                        case TelephonyManager.NETWORK_TYPE_IDEN:
+                            return ConnectionSubtype.SUBTYPE_IDEN;
+                        case TelephonyManager.NETWORK_TYPE_UMTS:
+                            return ConnectionSubtype.SUBTYPE_UMTS;
+                        case TelephonyManager.NETWORK_TYPE_EVDO_0:
+                            return ConnectionSubtype.SUBTYPE_EVDO_REV_0;
+                        case TelephonyManager.NETWORK_TYPE_EVDO_A:
+                            return ConnectionSubtype.SUBTYPE_EVDO_REV_A;
+                        case TelephonyManager.NETWORK_TYPE_HSDPA:
+                            return ConnectionSubtype.SUBTYPE_HSDPA;
+                        case TelephonyManager.NETWORK_TYPE_HSUPA:
+                            return ConnectionSubtype.SUBTYPE_HSUPA;
+                        case TelephonyManager.NETWORK_TYPE_HSPA:
+                            return ConnectionSubtype.SUBTYPE_HSPA;
+                        case TelephonyManager.NETWORK_TYPE_EVDO_B:
+                            return ConnectionSubtype.SUBTYPE_EVDO_REV_B;
+                        case TelephonyManager.NETWORK_TYPE_EHRPD:
+                            return ConnectionSubtype.SUBTYPE_EHRPD;
+                        case TelephonyManager.NETWORK_TYPE_HSPAP:
+                            return ConnectionSubtype.SUBTYPE_HSPAP;
+                        case TelephonyManager.NETWORK_TYPE_LTE:
+                            return ConnectionSubtype.SUBTYPE_LTE;
+                        default:
+                            return ConnectionSubtype.SUBTYPE_UNKNOWN;
+                    }
+                default:
+                    return ConnectionSubtype.SUBTYPE_UNKNOWN;
+            }
+        }
     }
 
     /** Queries the ConnectivityManager for information about the current connection. */
@@ -516,7 +585,7 @@
                     onAvailable(newNetwork);
                 }
                 @ConnectionType
-                final int newConnectionType = convertToConnectionType(getCurrentNetworkState());
+                final int newConnectionType = getCurrentNetworkState().getConnectionType();
                 runOnThread(new Runnable() {
                     @Override
                     public void run() {
@@ -581,11 +650,7 @@
     private final MyNetworkCallback mNetworkCallback;
     private final NetworkRequest mNetworkRequest;
     private boolean mRegistered;
-    @ConnectionType
-    private int mConnectionType;
-    private String mWifiSSID;
-    private double mMaxBandwidthMbps;
-    private int mMaxBandwidthConnectionType;
+    private NetworkState mNetworkState;
     // When a BroadcastReceiver is registered for a sticky broadcast that has been sent out at
     // least once, onReceive() will immediately be called. mIgnoreNextBroadcast is set to true
     // when this class is registered in such a circumstance, and indicates that the next
@@ -610,9 +675,9 @@
          */
         public void onConnectionTypeChanged(@ConnectionType int newConnectionType);
         /**
-         * Called when maximum bandwidth of default network changes.
+         * Called when connection subtype of default network changes.
          */
-        public void onMaxBandwidthChanged(double maxBandwidthMbps);
+        public void onConnectionSubtypeChanged(int newConnectionSubtype);
         /**
          * Called when device connects to network with NetID netId. For
          * example device associates with a WiFi access point.
@@ -671,11 +736,7 @@
             mNetworkCallback = null;
             mNetworkRequest = null;
         }
-        final NetworkState networkState = getCurrentNetworkState();
-        mConnectionType = convertToConnectionType(networkState);
-        mWifiSSID = networkState.getWifiSsid();
-        mMaxBandwidthMbps = getCurrentMaxBandwidthInMbps(networkState);
-        mMaxBandwidthConnectionType = mConnectionType;
+        mNetworkState = getCurrentNetworkState();
         mIntentFilter = new NetworkConnectivityIntentFilter();
         mIgnoreNextBroadcast = false;
         mShouldSignalObserver = false;
@@ -744,9 +805,7 @@
         if (mRegistered) return;
 
         if (mShouldSignalObserver) {
-            final NetworkState networkState = getCurrentNetworkState();
-            connectionTypeChanged(networkState);
-            maxBandwidthChanged(networkState);
+            connectionTypeChanged();
         }
         // When registering for a sticky broadcast, like CONNECTIVITY_ACTION, if registerReceiver
         // returns non-null, it means the broadcast was previously issued and onReceive() will be
@@ -866,18 +925,6 @@
     }
 
     /**
-     * Returns the connection type for the given NetworkState.
-     */
-    @ConnectionType
-    public static int convertToConnectionType(NetworkState networkState) {
-        if (!networkState.isConnected()) {
-            return ConnectionType.CONNECTION_NONE;
-        }
-        return convertToConnectionType(
-                networkState.getNetworkType(), networkState.getNetworkSubType());
-    }
-
-    /**
      * Returns the connection type for the given ConnectivityManager type and subtype.
      */
     @ConnectionType
@@ -920,72 +967,6 @@
         }
     }
 
-    /**
-     * Returns the connection subtype for the given NetworkState.
-     */
-    public static int convertToConnectionSubtype(NetworkState networkState) {
-        if (!networkState.isConnected()) {
-            return ConnectionSubtype.SUBTYPE_NONE;
-        }
-
-        switch (networkState.getNetworkType()) {
-            case ConnectivityManager.TYPE_ETHERNET:
-            case ConnectivityManager.TYPE_WIFI:
-            case ConnectivityManager.TYPE_WIMAX:
-            case ConnectivityManager.TYPE_BLUETOOTH:
-                return ConnectionSubtype.SUBTYPE_UNKNOWN;
-            case ConnectivityManager.TYPE_MOBILE:
-                // Use information from TelephonyManager to classify the connection.
-                switch (networkState.getNetworkSubType()) {
-                    case TelephonyManager.NETWORK_TYPE_GPRS:
-                        return ConnectionSubtype.SUBTYPE_GPRS;
-                    case TelephonyManager.NETWORK_TYPE_EDGE:
-                        return ConnectionSubtype.SUBTYPE_EDGE;
-                    case TelephonyManager.NETWORK_TYPE_CDMA:
-                        return ConnectionSubtype.SUBTYPE_CDMA;
-                    case TelephonyManager.NETWORK_TYPE_1xRTT:
-                        return ConnectionSubtype.SUBTYPE_1XRTT;
-                    case TelephonyManager.NETWORK_TYPE_IDEN:
-                        return ConnectionSubtype.SUBTYPE_IDEN;
-                    case TelephonyManager.NETWORK_TYPE_UMTS:
-                        return ConnectionSubtype.SUBTYPE_UMTS;
-                    case TelephonyManager.NETWORK_TYPE_EVDO_0:
-                        return ConnectionSubtype.SUBTYPE_EVDO_REV_0;
-                    case TelephonyManager.NETWORK_TYPE_EVDO_A:
-                        return ConnectionSubtype.SUBTYPE_EVDO_REV_A;
-                    case TelephonyManager.NETWORK_TYPE_HSDPA:
-                        return ConnectionSubtype.SUBTYPE_HSDPA;
-                    case TelephonyManager.NETWORK_TYPE_HSUPA:
-                        return ConnectionSubtype.SUBTYPE_HSUPA;
-                    case TelephonyManager.NETWORK_TYPE_HSPA:
-                        return ConnectionSubtype.SUBTYPE_HSPA;
-                    case TelephonyManager.NETWORK_TYPE_EVDO_B:
-                        return ConnectionSubtype.SUBTYPE_EVDO_REV_B;
-                    case TelephonyManager.NETWORK_TYPE_EHRPD:
-                        return ConnectionSubtype.SUBTYPE_EHRPD;
-                    case TelephonyManager.NETWORK_TYPE_HSPAP:
-                        return ConnectionSubtype.SUBTYPE_HSPAP;
-                    case TelephonyManager.NETWORK_TYPE_LTE:
-                        return ConnectionSubtype.SUBTYPE_LTE;
-                    default:
-                        return ConnectionSubtype.SUBTYPE_UNKNOWN;
-                }
-            default:
-                return ConnectionSubtype.SUBTYPE_UNKNOWN;
-        }
-    }
-
-    /**
-     * Returns the bandwidth of the current connection in Mbps. The result is
-     * derived from the NetInfo v3 specification's mapping from network type to
-     * max link speed. In cases where more information is available that is used
-     * instead. For more on NetInfo, see http://w3c.github.io/netinfo/.
-     */
-    public double getCurrentMaxBandwidthInMbps(NetworkState networkState) {
-        return NetworkChangeNotifier.getMaxBandwidthForConnectionSubtype(
-                convertToConnectionSubtype(networkState));
-    }
-
     // BroadcastReceiver
     @Override
     public void onReceive(Context context, Intent intent) {
@@ -1001,33 +982,22 @@
                     mIgnoreNextBroadcast = false;
                     return;
                 }
-                final NetworkState networkState = getCurrentNetworkState();
-                connectionTypeChanged(networkState);
-                maxBandwidthChanged(networkState);
+                connectionTypeChanged();
             }
         });
     }
 
-    private void connectionTypeChanged(NetworkState networkState) {
-        @ConnectionType
-        int newConnectionType = convertToConnectionType(networkState);
-        String newWifiSSID = networkState.getWifiSsid();
-        if (newConnectionType == mConnectionType && newWifiSSID.equals(mWifiSSID)) return;
-
-        mConnectionType = newConnectionType;
-        mWifiSSID = newWifiSSID;
-        mObserver.onConnectionTypeChanged(newConnectionType);
-    }
-
-    private void maxBandwidthChanged(NetworkState networkState) {
-        double newMaxBandwidthMbps = getCurrentMaxBandwidthInMbps(networkState);
-        if (newMaxBandwidthMbps == mMaxBandwidthMbps
-                && mConnectionType == mMaxBandwidthConnectionType) {
-            return;
+    private void connectionTypeChanged() {
+        NetworkState networkState = getCurrentNetworkState();
+        if (networkState.getConnectionType() != mNetworkState.getConnectionType()
+                || !networkState.getWifiSsid().equals(mNetworkState.getWifiSsid())) {
+            mObserver.onConnectionTypeChanged(networkState.getConnectionType());
         }
-        mMaxBandwidthMbps = newMaxBandwidthMbps;
-        mMaxBandwidthConnectionType = mConnectionType;
-        mObserver.onMaxBandwidthChanged(newMaxBandwidthMbps);
+        if (networkState.getConnectionType() != mNetworkState.getConnectionType()
+                || networkState.getConnectionSubtype() != mNetworkState.getConnectionSubtype()) {
+            mObserver.onConnectionSubtypeChanged(networkState.getConnectionSubtype());
+        }
+        mNetworkState = networkState;
     }
 
     // TODO(crbug.com/635567): Fix this properly.
diff --git a/net/android/javatests/src/org/chromium/net/NetworkChangeNotifierNoNativeTest.java b/net/android/javatests/src/org/chromium/net/NetworkChangeNotifierNoNativeTest.java
new file mode 100644
index 0000000..5391a6f
--- /dev/null
+++ b/net/android/javatests/src/org/chromium/net/NetworkChangeNotifierNoNativeTest.java
@@ -0,0 +1,33 @@
+// 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.
+
+package org.chromium.net;
+
+import android.os.Looper;
+import android.support.test.InstrumentationRegistry;
+import android.support.test.filters.MediumTest;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import org.chromium.base.test.BaseJUnit4ClassRunner;
+
+/**
+ * Tests for org.chromium.net.NetworkChangeNotifier without native code. This class specifically
+ * does not have a setUp() method that loads native libraries.
+ */
+@RunWith(BaseJUnit4ClassRunner.class)
+public class NetworkChangeNotifierNoNativeTest {
+    /**
+     * Verify NetworkChangeNotifier can initialize without calling into native code. This test
+     * will crash if any native calls are made during NetworkChangeNotifier initialization.
+     */
+    @Test
+    @MediumTest
+    public void testNoNativeDependence() {
+        Looper.prepare();
+        NetworkChangeNotifier.init(InstrumentationRegistry.getInstrumentation().getTargetContext());
+        NetworkChangeNotifier.registerToReceiveNotificationsAlways();
+    }
+}
\ No newline at end of file
diff --git a/net/android/javatests/src/org/chromium/net/NetworkChangeNotifierTest.java b/net/android/javatests/src/org/chromium/net/NetworkChangeNotifierTest.java
index 6c1b7a8..00f4994 100644
--- a/net/android/javatests/src/org/chromium/net/NetworkChangeNotifierTest.java
+++ b/net/android/javatests/src/org/chromium/net/NetworkChangeNotifierTest.java
@@ -86,19 +86,19 @@
       */
     private static class TestNetworkChangeNotifier extends NetworkChangeNotifier {
         @Override
-        void notifyObserversOfMaxBandwidthChange(double maxBandwidthMbps) {
-            mReceivedMaxBandwidthNotification = true;
+        void notifyObserversOfConnectionSubtypeChange(int newConnectionSubtype) {
+            mReceivedConnectionSubtypeNotification = true;
         }
 
-        public boolean hasReceivedMaxBandwidthNotification() {
-            return mReceivedMaxBandwidthNotification;
+        public boolean hasReceivedConnectionSubtypeNotification() {
+            return mReceivedConnectionSubtypeNotification;
         }
 
-        public void resetHasReceivedMaxBandwidthNotification() {
-            mReceivedMaxBandwidthNotification = false;
+        public void resetHasReceivedConnectionSubtypeNotification() {
+            mReceivedConnectionSubtypeNotification = false;
         }
 
-        private boolean mReceivedMaxBandwidthNotification = false;
+        private boolean mReceivedConnectionSubtypeNotification = false;
     }
 
     private static class Helper {
@@ -347,7 +347,7 @@
         @Override
         public void onConnectionTypeChanged(int newConnectionType) {}
         @Override
-        public void onMaxBandwidthChanged(double maxBandwidthMbps) {}
+        public void onConnectionSubtypeChanged(int newConnectionSubtype) {}
 
         @Override
         public void onNetworkConnect(long netId, int connectionType) {
@@ -444,16 +444,12 @@
         mWifiDelegate.setWifiSSID("foo");
     }
 
-    private double getCurrentMaxBandwidthInMbps() {
-        final NetworkChangeNotifierAutoDetect.NetworkState networkState =
-                mReceiver.getCurrentNetworkState();
-        return mReceiver.getCurrentMaxBandwidthInMbps(networkState);
+    private int getCurrentConnectionSubtype() {
+        return mReceiver.getCurrentNetworkState().getConnectionSubtype();
     }
 
     private int getCurrentConnectionType() {
-        final NetworkChangeNotifierAutoDetect.NetworkState networkState =
-                mReceiver.getCurrentNetworkState();
-        return NetworkChangeNotifierAutoDetect.convertToConnectionType(networkState);
+        return mReceiver.getCurrentNetworkState().getConnectionType();
     }
 
     @Before
@@ -523,64 +519,64 @@
     }
 
     /**
-     * Tests that changing the network type changes the maxBandwidth.
+     * Tests that changing the network type changes the connection subtype.
      */
     @Test
     @UiThreadTest
     @MediumTest
     @Feature({"Android-AppBase"})
-    public void testNetworkChangeNotifierMaxBandwidthEthernet() {
+    public void testNetworkChangeNotifierConnectionSubtypeEthernet() {
         // Show that for Ethernet the link speed is unknown (+Infinity).
         mConnectivityDelegate.setNetworkType(ConnectivityManager.TYPE_ETHERNET);
         Assert.assertEquals(ConnectionType.CONNECTION_ETHERNET, getCurrentConnectionType());
-        Assert.assertEquals(Double.POSITIVE_INFINITY, getCurrentMaxBandwidthInMbps(), 0);
+        Assert.assertEquals(ConnectionSubtype.SUBTYPE_UNKNOWN, getCurrentConnectionSubtype());
     }
 
     @Test
     @UiThreadTest
     @MediumTest
     @Feature({"Android-AppBase"})
-    public void testNetworkChangeNotifierMaxBandwidthWifi() {
+    public void testNetworkChangeNotifierConnectionSubtypeWifi() {
         // Show that for WiFi the link speed is unknown (+Infinity).
         mConnectivityDelegate.setNetworkType(ConnectivityManager.TYPE_WIFI);
         Assert.assertEquals(ConnectionType.CONNECTION_WIFI, getCurrentConnectionType());
-        Assert.assertEquals(Double.POSITIVE_INFINITY, getCurrentMaxBandwidthInMbps(), 0);
+        Assert.assertEquals(ConnectionSubtype.SUBTYPE_UNKNOWN, getCurrentConnectionSubtype());
     }
 
     @Test
     @UiThreadTest
     @MediumTest
     @Feature({"Android-AppBase"})
-    public void testNetworkChangeNotifierMaxBandwidthWiMax() {
+    public void testNetworkChangeNotifierConnectionSubtypeWiMax() {
         // Show that for WiMax the link speed is unknown (+Infinity), although the type is 4g.
         // TODO(jkarlin): Add support for CONNECTION_WIMAX as specified in
         // http://w3c.github.io/netinfo/.
         mConnectivityDelegate.setNetworkType(ConnectivityManager.TYPE_WIMAX);
         Assert.assertEquals(ConnectionType.CONNECTION_4G, getCurrentConnectionType());
-        Assert.assertEquals(Double.POSITIVE_INFINITY, getCurrentMaxBandwidthInMbps(), 0);
+        Assert.assertEquals(ConnectionSubtype.SUBTYPE_UNKNOWN, getCurrentConnectionSubtype());
     }
 
     @Test
     @UiThreadTest
     @MediumTest
     @Feature({"Android-AppBase"})
-    public void testNetworkChangeNotifierMaxBandwidthBluetooth() {
+    public void testNetworkChangeNotifierConnectionSubtypeBluetooth() {
         // Show that for bluetooth the link speed is unknown (+Infinity).
         mConnectivityDelegate.setNetworkType(ConnectivityManager.TYPE_BLUETOOTH);
         Assert.assertEquals(ConnectionType.CONNECTION_BLUETOOTH, getCurrentConnectionType());
-        Assert.assertEquals(Double.POSITIVE_INFINITY, getCurrentMaxBandwidthInMbps(), 0);
+        Assert.assertEquals(ConnectionSubtype.SUBTYPE_UNKNOWN, getCurrentConnectionSubtype());
     }
 
     @Test
     @UiThreadTest
     @MediumTest
     @Feature({"Android-AppBase"})
-    public void testNetworkChangeNotifierMaxBandwidthMobile() {
-        // Test that for mobile types the subtype is used to determine the maxBandwidth.
+    public void testNetworkChangeNotifierConnectionSubtypeMobile() {
+        // Test that for mobile types the subtype is used to determine the connection subtype.
         mConnectivityDelegate.setNetworkType(ConnectivityManager.TYPE_MOBILE);
         mConnectivityDelegate.setNetworkSubtype(TelephonyManager.NETWORK_TYPE_LTE);
         Assert.assertEquals(ConnectionType.CONNECTION_4G, getCurrentConnectionType());
-        Assert.assertEquals(100.0, getCurrentMaxBandwidthInMbps(), 0);
+        Assert.assertEquals(ConnectionSubtype.SUBTYPE_LTE, getCurrentConnectionSubtype());
     }
 
     /**
@@ -657,7 +653,7 @@
     @UiThreadTest
     @MediumTest
     @Feature({"Android-AppBase"})
-    public void testNetworkChangeNotifierMaxBandwidthNotifications() {
+    public void testNetworkChangeNotifierConnectionSubtypeNotifications() {
         mReceiver.register();
         // Initialize the NetworkChangeNotifier with a connection.
         mConnectivityDelegate.setActiveNetworkExists(true);
@@ -665,22 +661,22 @@
         Intent connectivityIntent = new Intent(ConnectivityManager.CONNECTIVITY_ACTION);
         mReceiver.onReceive(InstrumentationRegistry.getInstrumentation().getTargetContext(),
                 connectivityIntent);
-        Assert.assertTrue(mNotifier.hasReceivedMaxBandwidthNotification());
-        mNotifier.resetHasReceivedMaxBandwidthNotification();
+        Assert.assertTrue(mNotifier.hasReceivedConnectionSubtypeNotification());
+        mNotifier.resetHasReceivedConnectionSubtypeNotification();
 
         // We shouldn't be re-notified if the connection hasn't actually changed.
         NetworkChangeNotifierTestObserver observer = new NetworkChangeNotifierTestObserver();
         NetworkChangeNotifier.addConnectionTypeObserver(observer);
         mReceiver.onReceive(InstrumentationRegistry.getInstrumentation().getTargetContext(),
                 connectivityIntent);
-        Assert.assertFalse(mNotifier.hasReceivedMaxBandwidthNotification());
+        Assert.assertFalse(mNotifier.hasReceivedConnectionSubtypeNotification());
 
         // We should be notified if bandwidth and connection type changed.
         mConnectivityDelegate.setNetworkType(ConnectivityManager.TYPE_ETHERNET);
         mReceiver.onReceive(InstrumentationRegistry.getInstrumentation().getTargetContext(),
                 connectivityIntent);
-        Assert.assertTrue(mNotifier.hasReceivedMaxBandwidthNotification());
-        mNotifier.resetHasReceivedMaxBandwidthNotification();
+        Assert.assertTrue(mNotifier.hasReceivedConnectionSubtypeNotification());
+        mNotifier.resetHasReceivedConnectionSubtypeNotification();
 
         // We should be notified if the connection type changed, but not the bandwidth.
         // Note that TYPE_ETHERNET and TYPE_BLUETOOTH have the same +INFINITY max bandwidth.
@@ -688,7 +684,7 @@
         mConnectivityDelegate.setNetworkType(ConnectivityManager.TYPE_BLUETOOTH);
         mReceiver.onReceive(InstrumentationRegistry.getInstrumentation().getTargetContext(),
                 connectivityIntent);
-        Assert.assertTrue(mNotifier.hasReceivedMaxBandwidthNotification());
+        Assert.assertTrue(mNotifier.hasReceivedConnectionSubtypeNotification());
     }
 
     /**
diff --git a/net/android/network_change_notifier_android_unittest.cc b/net/android/network_change_notifier_android_unittest.cc
index 7c54250c..3069e6b 100644
--- a/net/android/network_change_notifier_android_unittest.cc
+++ b/net/android/network_change_notifier_android_unittest.cc
@@ -181,6 +181,7 @@
 class BaseNetworkChangeNotifierAndroidTest : public testing::Test {
  protected:
   typedef NetworkChangeNotifier::ConnectionType ConnectionType;
+  typedef NetworkChangeNotifier::ConnectionSubtype ConnectionSubtype;
 
   ~BaseNetworkChangeNotifierAndroidTest() override {}
 
@@ -224,8 +225,8 @@
     base::RunLoop().RunUntilIdle();
   }
 
-  void FakeMaxBandwidthChange(double max_bandwidth_mbps) {
-    delegate_.FakeMaxBandwidthChanged(max_bandwidth_mbps);
+  void FakeConnectionSubtypeChange(ConnectionSubtype subtype) {
+    delegate_.FakeConnectionSubtypeChanged(subtype);
     base::RunLoop().RunUntilIdle();
   }
 
@@ -396,15 +397,15 @@
 TEST_F(NetworkChangeNotifierDelegateAndroidTest, MaxBandwidthCallbackNotifier) {
   // The bandwidth notification should always be forwarded, even if the value
   // doesn't change (because the type might have changed).
-  FakeMaxBandwidthChange(100.0);
+  FakeConnectionSubtypeChange(ConnectionSubtype::SUBTYPE_CDMA);
   EXPECT_EQ(1, delegate_observer_.bandwidth_notifications_count());
   EXPECT_EQ(1, max_bandwidth_observer_.notifications_count());
 
-  FakeMaxBandwidthChange(100.0);
+  FakeConnectionSubtypeChange(ConnectionSubtype::SUBTYPE_CDMA);
   EXPECT_EQ(2, delegate_observer_.bandwidth_notifications_count());
   EXPECT_EQ(2, max_bandwidth_observer_.notifications_count());
 
-  FakeMaxBandwidthChange(101.0);
+  FakeConnectionSubtypeChange(ConnectionSubtype::SUBTYPE_LTE);
   EXPECT_EQ(3, delegate_observer_.bandwidth_notifications_count());
   EXPECT_EQ(3, max_bandwidth_observer_.notifications_count());
 }
diff --git a/net/android/network_change_notifier_delegate_android.cc b/net/android/network_change_notifier_delegate_android.cc
index 73cfb99..ffa0e16 100644
--- a/net/android/network_change_notifier_delegate_android.cc
+++ b/net/android/network_change_notifier_delegate_android.cc
@@ -63,13 +63,6 @@
   }
 }
 
-jdouble GetMaxBandwidthForConnectionSubtype(JNIEnv* env,
-                                            const JavaParamRef<jclass>& caller,
-                                            jint subtype) {
-  return NetworkChangeNotifierAndroid::GetMaxBandwidthForConnectionSubtype(
-      ConvertConnectionSubtype(subtype));
-}
-
 NetworkChangeNotifierDelegateAndroid::NetworkChangeNotifierDelegateAndroid()
     : observers_(new base::ObserverListThreadSafe<Observer>()) {
   JNIEnv* env = base::android::AttachCurrentThread();
@@ -80,8 +73,8 @@
       ConvertConnectionType(Java_NetworkChangeNotifier_getCurrentConnectionType(
           env, java_network_change_notifier_)));
   SetCurrentMaxBandwidth(
-      Java_NetworkChangeNotifier_getCurrentMaxBandwidthInMbps(
-          env, java_network_change_notifier_));
+      NetworkChangeNotifierAndroid::GetMaxBandwidthForConnectionSubtype(
+          GetCurrentConnectionSubtype()));
   SetCurrentDefaultNetwork(Java_NetworkChangeNotifier_getCurrentDefaultNetId(
       env, java_network_change_notifier_));
   NetworkMap network_map;
@@ -189,9 +182,11 @@
 void NetworkChangeNotifierDelegateAndroid::NotifyMaxBandwidthChanged(
     JNIEnv* env,
     const JavaParamRef<jobject>& obj,
-    jdouble new_max_bandwidth) {
+    jint subtype) {
   DCHECK(thread_checker_.CalledOnValidThread());
-
+  double new_max_bandwidth =
+      NetworkChangeNotifierAndroid::GetMaxBandwidthForConnectionSubtype(
+          ConvertConnectionSubtype(subtype));
   SetCurrentMaxBandwidth(new_max_bandwidth);
   observers_->Notify(FROM_HERE, &Observer::OnMaxBandwidthChanged,
                      new_max_bandwidth, GetCurrentConnectionType());
@@ -361,10 +356,10 @@
   Java_NetworkChangeNotifier_fakeDefaultNetwork(env, network, type);
 }
 
-void NetworkChangeNotifierDelegateAndroid::FakeMaxBandwidthChanged(
-    double max_bandwidth_mbps) {
+void NetworkChangeNotifierDelegateAndroid::FakeConnectionSubtypeChanged(
+    ConnectionSubtype subtype) {
   JNIEnv* env = base::android::AttachCurrentThread();
-  Java_NetworkChangeNotifier_fakeMaxBandwidthChanged(env, max_bandwidth_mbps);
+  Java_NetworkChangeNotifier_fakeConnectionSubtypeChanged(env, subtype);
 }
 
 }  // namespace net
diff --git a/net/android/network_change_notifier_delegate_android.h b/net/android/network_change_notifier_delegate_android.h
index 4329d638..e31d0fe2 100644
--- a/net/android/network_change_notifier_delegate_android.h
+++ b/net/android/network_change_notifier_delegate_android.h
@@ -27,6 +27,7 @@
 class NET_EXPORT_PRIVATE NetworkChangeNotifierDelegateAndroid {
  public:
   typedef NetworkChangeNotifier::ConnectionType ConnectionType;
+  typedef NetworkChangeNotifier::ConnectionSubtype ConnectionSubtype;
   typedef NetworkChangeNotifier::NetworkHandle NetworkHandle;
   typedef NetworkChangeNotifier::NetworkList NetworkList;
 
@@ -66,7 +67,7 @@
   void NotifyMaxBandwidthChanged(
       JNIEnv* env,
       const base::android::JavaParamRef<jobject>& obj,
-      jdouble new_max_bandwidth);
+      jint subtype);
 
   // Called from NetworkChangeNotifier.java on the JNI thread to push
   // down notifications of network connectivity events. These functions in
@@ -141,7 +142,7 @@
   void FakeNetworkDisconnected(NetworkHandle network);
   void FakePurgeActiveNetworkList(NetworkList networks);
   void FakeDefaultNetwork(NetworkHandle network, ConnectionType type);
-  void FakeMaxBandwidthChanged(double max_bandwidth_mbps);
+  void FakeConnectionSubtypeChanged(ConnectionSubtype subtype);
 
   base::ThreadChecker thread_checker_;
   scoped_refptr<base::ObserverListThreadSafe<Observer>> observers_;
diff --git a/storage/browser/blob/blob_url_request_job_factory.cc b/storage/browser/blob/blob_url_request_job_factory.cc
index ceb8761..f710aba 100644
--- a/storage/browser/blob/blob_url_request_job_factory.cc
+++ b/storage/browser/blob/blob_url_request_job_factory.cc
@@ -10,6 +10,7 @@
 #include "base/strings/string_util.h"
 #include "net/base/load_flags.h"
 #include "net/base/request_priority.h"
+#include "net/traffic_annotation/network_traffic_annotation.h"
 #include "net/url_request/url_request_context.h"
 #include "storage/browser/blob/blob_data_handle.h"
 #include "storage/browser/blob/blob_storage_context.h"
@@ -30,8 +31,33 @@
     const net::URLRequestContext* request_context,
     net::URLRequest::Delegate* request_delegate) {
   const GURL kBlobUrl("blob://see_user_data/");
+  net::NetworkTrafficAnnotationTag traffic_annotation =
+      net::DefineNetworkTrafficAnnotation("blob_read", R"(
+        semantics {
+          sender: "BlobProtocolHandler"
+          description:
+            "Blobs are used for a variety of use cases, and are basically "
+            "immutable blocks of data. See https://chromium.googlesource.com/"
+            "chromium/src/+/master/storage/browser/blob/README.md for an "
+            "explanation of blobs and their implementation in Chrome. These "
+            "can be created by scripts in a website, web platform features, or "
+            "internally in the browser."
+          trigger:
+            "Request for reading the contents of a blob."
+          data:
+            "A reference to a Blob, File, or CacheStorage entry created from "
+            "script, a web platform feature, or browser internals."
+          destination: LOCAL
+        }
+        policy {
+          cookies_allowed: false
+          setting: "This feature cannot be disabled by settings."
+          policy_exception_justification:
+            "Not implemented. This is a local data fetch request and has no "
+            "network activity."
+        })");
   std::unique_ptr<net::URLRequest> request = request_context->CreateRequest(
-      kBlobUrl, net::DEFAULT_PRIORITY, request_delegate);
+      kBlobUrl, net::DEFAULT_PRIORITY, request_delegate, traffic_annotation);
   request->SetLoadFlags(net::LOAD_DO_NOT_SAVE_COOKIES |
                         net::LOAD_DO_NOT_SEND_COOKIES);
   SetRequestedBlobDataHandle(request.get(), std::move(blob_data_handle));
diff --git a/storage/browser/blob/blob_url_request_job_unittest.cc b/storage/browser/blob/blob_url_request_job_unittest.cc
index 7203422..353eaf08 100644
--- a/storage/browser/blob/blob_url_request_job_unittest.cc
+++ b/storage/browser/blob/blob_url_request_job_unittest.cc
@@ -26,6 +26,7 @@
 #include "net/http/http_byte_range.h"
 #include "net/http/http_request_headers.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_context.h"
 #include "net/url_request/url_request_job_factory_impl.h"
@@ -263,7 +264,8 @@
   void TestRequest(const std::string& method,
                    const net::HttpRequestHeaders& extra_headers) {
     request_ = url_request_context_.CreateRequest(
-        GURL("blob:blah"), net::DEFAULT_PRIORITY, &url_request_delegate_);
+        GURL("blob:blah"), net::DEFAULT_PRIORITY, &url_request_delegate_,
+        TRAFFIC_ANNOTATION_FOR_TESTS);
     request_->set_method(method);
     if (!extra_headers.IsEmpty())
       request_->SetExtraRequestHeaders(extra_headers);
diff --git a/testing/buildbot/chromium.android.json b/testing/buildbot/chromium.android.json
index d6387fa..64d40c1 100644
--- a/testing/buildbot/chromium.android.json
+++ b/testing/buildbot/chromium.android.json
@@ -7,6 +7,9 @@
   "Android N5X Swarm Builder": {
     "gtest_tests": [
       {
+        "args": [
+          "--gs-results-bucket=chromium-result-details"
+        ],
         "merge": {
           "args": [
             "--bucket",
@@ -276,6 +279,9 @@
         "test": "chrome_public_test_vr_apk"
       },
       {
+        "args": [
+          "--gs-results-bucket=chromium-result-details"
+        ],
         "merge": {
           "args": [
             "--bucket",
@@ -394,6 +400,9 @@
         "test": "components_unittests"
       },
       {
+        "args": [
+          "--gs-results-bucket=chromium-result-details"
+        ],
         "merge": {
           "args": [
             "--bucket",
@@ -1024,6 +1033,9 @@
         "test": "mojo_system_unittests"
       },
       {
+        "args": [
+          "--gs-results-bucket=chromium-result-details"
+        ],
         "merge": {
           "args": [
             "--bucket",
@@ -2766,6 +2778,9 @@
         "test": "vr_shell_unittests"
       },
       {
+        "args": [
+          "--gs-results-bucket=chromium-result-details"
+        ],
         "merge": {
           "args": [
             "--bucket",
@@ -2809,7 +2824,8 @@
       {
         "args": [
           "--shared-prefs-file=../../chrome/android/shared_preference_files/test/vr_cardboard_skipdon_setupcomplete.json",
-          "--additional-apk=../../third_party/gvr-android-sdk/test-apks/vr_services/vr_services_current.apk"
+          "--additional-apk=../../third_party/gvr-android-sdk/test-apks/vr_services/vr_services_current.apk",
+          "--gs-results-bucket=chromium-result-details"
         ],
         "merge": {
           "args": [
@@ -2893,6 +2909,9 @@
         "test": "chrome_sync_shell_test_apk"
       },
       {
+        "args": [
+          "--gs-results-bucket=chromium-result-details"
+        ],
         "merge": {
           "args": [
             "--bucket",
@@ -2934,6 +2953,9 @@
         "test": "content_shell_test_apk"
       },
       {
+        "args": [
+          "--gs-results-bucket=chromium-result-details"
+        ],
         "merge": {
           "args": [
             "--bucket",
@@ -3117,6 +3139,9 @@
         "test": "android_webview_unittests"
       },
       {
+        "args": [
+          "--gs-results-bucket=chromium-result-details"
+        ],
         "merge": {
           "args": [
             "--bucket",
@@ -3303,6 +3328,9 @@
         "test": "cc_unittests"
       },
       {
+        "args": [
+          "--gs-results-bucket=chromium-result-details"
+        ],
         "merge": {
           "args": [
             "--bucket",
@@ -3312,7 +3340,6 @@
           ],
           "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
         },
-        "render_results_dir": "chrome/test/data/android/render_tests",
         "swarming": {
           "can_use_on_swarming_builders": true,
           "cipd_packages": [
@@ -3388,7 +3415,8 @@
       },
       {
         "args": [
-          "--enable-browser-side-navigation"
+          "--enable-browser-side-navigation",
+          "--gs-results-bucket=chromium-result-details"
         ],
         "merge": {
           "args": [
@@ -3400,7 +3428,6 @@
           "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
         },
         "name": "browser_side_navigation_chrome_public_test_apk",
-        "render_results_dir": "chrome/test/data/android/render_tests",
         "swarming": {
           "can_use_on_swarming_builders": true,
           "cipd_packages": [
@@ -3431,6 +3458,9 @@
         "test": "chrome_public_test_apk"
       },
       {
+        "args": [
+          "--gs-results-bucket=chromium-result-details"
+        ],
         "merge": {
           "args": [
             "--bucket",
@@ -3471,7 +3501,8 @@
       },
       {
         "args": [
-          "--enable-browser-side-navigation"
+          "--enable-browser-side-navigation",
+          "--gs-results-bucket=chromium-result-details"
         ],
         "merge": {
           "args": [
@@ -3759,6 +3790,9 @@
         "test": "content_browsertests"
       },
       {
+        "args": [
+          "--gs-results-bucket=chromium-result-details"
+        ],
         "merge": {
           "args": [
             "--bucket",
@@ -3799,7 +3833,8 @@
       },
       {
         "args": [
-          "--enable-browser-side-navigation"
+          "--enable-browser-side-navigation",
+          "--gs-results-bucket=chromium-result-details"
         ],
         "merge": {
           "args": [
diff --git a/third_party/WebKit/LayoutTests/inspector/console/console-call-getter-on-proto-expected.txt b/third_party/WebKit/LayoutTests/inspector/console/console-call-getter-on-proto-expected.txt
index c7870da..72dd764 100644
--- a/third_party/WebKit/LayoutTests/inspector/console/console-call-getter-on-proto-expected.txt
+++ b/third_party/WebKit/LayoutTests/inspector/console/console-call-getter-on-proto-expected.txt
@@ -5,7 +5,7 @@
     foo: 239
     value: 239
     __proto__: A
-        constructor: ƒ ()
+        constructor: function ()
         foo: 239
         __proto__: Object
 
diff --git a/third_party/WebKit/LayoutTests/inspector/console/console-copy-truncated-text-expected.txt b/third_party/WebKit/LayoutTests/inspector/console/console-copy-truncated-text-expected.txt
index 385a9a9..5e5d9a29 100644
--- a/third_party/WebKit/LayoutTests/inspector/console/console-copy-truncated-text-expected.txt
+++ b/third_party/WebKit/LayoutTests/inspector/console/console-copy-truncated-text-expected.txt
@@ -34,31 +34,31 @@
 Running: testSelectAcrossMultipleMessages
 
 Making selection: 0, 0, 1, 11
-Selection length: 178, text: www.z123456789z123456789z123456789z123456789z123456789z123456789z123456789z123456789z123456789z123456789z123456789z123456789z123456789z123456789z123456789.com
+Selection length: 177, text: www.z123456789z123456789z123456789z123456789z123456789z123456789z123456789z123456789z123456789z123456789z123456789z123456789z123456789z123456789z123456789.com
 VM:5 www.bar.com
 
 Making selection: 0, 75, 1, 11
-Selection length: 103, text: 123456789z123456789z123456789z123456789z123456789z123456789z123456789z123456789.com
+Selection length: 102, text: 123456789z123456789z123456789z123456789z123456789z123456789z123456789z123456789.com
 VM:5 www.bar.com
 
 Making selection: 0, 76, 1, 11
-Selection length: 94, text: z123456789z123456789z123456789z123456789z123456789z123456789z123456789.com
+Selection length: 93, text: z123456789z123456789z123456789z123456789z123456789z123456789z123456789.com
 VM:5 www.bar.com
 
 Running: testSelectAcrossMultipleMessagesWithTruncatedUrls
 
 Making selection: 0, 0, 2, 75
-Selection length: 262, text: www.z123456789z123456789z123456789z123456789z123456789z123456789z123456789z123456789z123456789z123456789z123456789z123456789z123456789z123456789z123456789.com
+Selection length: 260, text: www.z123456789z123456789z123456789z123456789z123456789z123456789z123456789z123456789z123456789z123456789z123456789z123456789z123456789z123456789z123456789.com
 VM:5 www.bar.com
 VM:6 www.z123456789z123456789z123456789z123456789z123456789z123456789z123456789z
 
 Making selection: 0, 0, 2, 76
-Selection length: 271, text: www.z123456789z123456789z123456789z123456789z123456789z123456789z123456789z123456789z123456789z123456789z123456789z123456789z123456789z123456789z123456789.com
+Selection length: 269, text: www.z123456789z123456789z123456789z123456789z123456789z123456789z123456789z123456789z123456789z123456789z123456789z123456789z123456789z123456789z123456789.com
 VM:5 www.bar.com
 VM:6 www.z123456789z123456789z123456789z123456789z123456789z123456789z123456789z123456789
 
 Making selection: 0, 0, 2, 150
-Selection length: 345, text: www.z123456789z123456789z123456789z123456789z123456789z123456789z123456789z123456789z123456789z123456789z123456789z123456789z123456789z123456789z123456789.com
+Selection length: 343, text: www.z123456789z123456789z123456789z123456789z123456789z123456789z123456789z123456789z123456789z123456789z123456789z123456789z123456789z123456789z123456789.com
 VM:5 www.bar.com
 VM:6 www.z123456789z123456789z123456789z123456789z123456789z123456789z123456789z123456789z123456789z123456789z123456789z123456789z123456789z123456789z123456789.com
 
@@ -227,5 +227,5 @@
 Running: testSelectionStartingInNonTextNode
 
 Making selection from empty prefix to end
-Selection length: 167, text: VM:11 www.z123456789z123456789z123456789z123456789z123456789z123456789z123456789z123456789z123456789z123456789z123456789z123456789z123456789z123456789z123456789.com
+Selection length: 166, text: VM:11 www.z123456789z123456789z123456789z123456789z123456789z123456789z123456789z123456789z123456789z123456789z123456789z123456789z123456789z123456789z123456789.com
 
diff --git a/third_party/WebKit/LayoutTests/inspector/console/console-dir-es6-expected.txt b/third_party/WebKit/LayoutTests/inspector/console/console-dir-es6-expected.txt
index db462126..79129f55 100644
--- a/third_party/WebKit/LayoutTests/inspector/console/console-dir-es6-expected.txt
+++ b/third_party/WebKit/LayoutTests/inspector/console/console-dir-es6-expected.txt
@@ -111,7 +111,7 @@
     0: class 
     1: class classWithWhitespace
     2: class FooClass
-    3: ƒ jump(x)
+    3: function jump(x)
     4: class BarClass
     5: class BarClass2
     6: class BarClass3
@@ -124,24 +124,24 @@
     13: () => {…}
     14: (...x) => { return 1 }
     15: (x, y, ...z) => { return 1 }
-    16: ƒ (...x)
-    17: ƒ (x, y, ...z)
-    18: ƒ ({a})
-    19: ƒ ([a])
-    20: ƒ ({a, b})
-    21: ƒ (...{a})
-    22: ƒ (a = (1), b)
-    23: ƒ (a = {x: (1)}, b)
-    24: ƒ (a = (x) => { return 1 }, b)
-    25: ƒ ({a: b})
-    26: ƒ (c = ")", {a: b})
+    16: function (...x)
+    17: function (x, y, ...z)
+    18: function ({a})
+    19: function ([a])
+    20: function ({a, b})
+    21: function (...{a})
+    22: function (a = (1), b)
+    23: function (a = {x: (1)}, b)
+    24: function (a = (x) => { return 1 }, b)
+    25: function ({a: b})
+    26: function (c = ")", {a: b})
     length: 27
     __proto__: Array(0)
 console-dir-es6.html:93 Array(4)
     0: badArrow(x = a => {…}
-    1: ƒ (a = ")
-    2: ƒ (a = function()
-    3: ƒ (a = class{ constructor()
+    1: function (a = ")
+    2: function (a = function()
+    3: function (a = class{ constructor()
     length: 4
     __proto__: Array(0)
 
diff --git a/third_party/WebKit/LayoutTests/inspector/console/console-dir-expected.txt b/third_party/WebKit/LayoutTests/inspector/console/console-dir-expected.txt
index b8f37c8..a501ce5 100644
--- a/third_party/WebKit/LayoutTests/inspector/console/console-dir-expected.txt
+++ b/third_party/WebKit/LayoutTests/inspector/console/console-dir-expected.txt
@@ -33,13 +33,13 @@
     c d: "c d"
     negZero: -0
     __proto__: Object
-console-dir.html:19 ƒ anonymous()
+console-dir.html:19 function anonymous()
     arguments: null
     caller: null
     length: 0
     name: ""
     prototype: Object
-    __proto__: ƒ ()
+    __proto__: function ()
     [[FunctionLocation]]: console-dir.html:19
     [[Scopes]]: Scopes[1]
 console-dir.html:23 inner
@@ -50,12 +50,12 @@
     foo: Object
         No Properties
     __proto__: Object
-console-dir.html:29 ƒ __proto__()
+console-dir.html:29 function __proto__()
     arguments: null
     caller: null
     length: 0
     name: "get __proto__"
-    __proto__: ƒ ()
+    __proto__: function ()
 console-dir.html:34 Uint8Array(400000000)
     [0 … 99999999]
     [100000000 … 199999999]
diff --git a/third_party/WebKit/LayoutTests/inspector/console/console-eval-undefined-override-expected.txt b/third_party/WebKit/LayoutTests/inspector/console/console-eval-undefined-override-expected.txt
index d9bd7bec..185a7ad 100644
--- a/third_party/WebKit/LayoutTests/inspector/console/console-eval-undefined-override-expected.txt
+++ b/third_party/WebKit/LayoutTests/inspector/console/console-eval-undefined-override-expected.txt
@@ -1,7 +1,7 @@
 Tests that evaluating something in console won't crash the browser if undefined value is overriden. The test passes if it doesn't crash. Bug 64155.
 
 var x = {a:1}; x.self = x; undefined = x;
-Object {a: 1, self: {…}}
+Object {a: 1, self: Object}
 unknownVar
 VM:1 Uncaught ReferenceError: unknownVar is not defined
 (anonymous) @ VM:1
diff --git a/third_party/WebKit/LayoutTests/inspector/console/console-format-collections-expected.txt b/third_party/WebKit/LayoutTests/inspector/console/console-format-collections-expected.txt
index c206d0c6..7ce698e 100644
--- a/third_party/WebKit/LayoutTests/inspector/console/console-format-collections-expected.txt
+++ b/third_party/WebKit/LayoutTests/inspector/console/console-format-collections-expected.txt
@@ -62,7 +62,7 @@
 console-format-collections.html:35 (2) [input, input, value: ""]
 console-format-collections.html:41 (2) [1, Array(2)]
 console-format-collections.html:44 NonArrayWithLength {keys: Array(0)}
-console-format-collections.html:51 (2) [1, "2", callee: ƒ, Symbol(Symbol.iterator): ƒ]
+console-format-collections.html:51 (2) [1, "2", callee: function, Symbol(Symbol.iterator): function]
 console-format-collections.html:55 (3) ["c1", "c2", "c3", value: "c1 c2 c3"]
 console-format-collections.html:58 (5) [undefined × 5]
 console-format-collections.html:59 (4294967295) [undefined × 4294967295]
diff --git a/third_party/WebKit/LayoutTests/inspector/console/console-format-es6-expected.txt b/third_party/WebKit/LayoutTests/inspector/console/console-format-es6-expected.txt
index b1e7393b..21c8ec4 100644
--- a/third_party/WebKit/LayoutTests/inspector/console/console-format-es6-expected.txt
+++ b/third_party/WebKit/LayoutTests/inspector/console/console-format-es6-expected.txt
@@ -41,7 +41,7 @@
 globals[2]
 Symbol(a)
 console-format-es6.html:11 Object {a: Symbol(), Symbol(a): 2}
-console-format-es6.html:12 [{…}]
+console-format-es6.html:12 [Object]
 globals[3]
 Object {a: Symbol(), Symbol(a): 2}
 console-format-es6.html:11 Map(1) {Object {a: Symbol(), Symbol(a): 2} => Object {foo: 1}}
@@ -116,9 +116,9 @@
     a: Symbol()
     getter: (...)
     Symbol(a): 2
-    get getter: ƒ getter()
+    get getter: function getter()
     __proto__: Object
-console-format-es6.html:12 [{…}]
+console-format-es6.html:12 [Object]
     0: Object
     length: 1
     __proto__: Array(0)
@@ -127,7 +127,7 @@
     a: Symbol()
     getter: (...)
     Symbol(a): 2
-    get getter: ƒ getter()
+    get getter: function getter()
     __proto__: Object
 console-format-es6.html:11 Map(1) {Object {a: Symbol(), Symbol(a): 2} => Object {foo: 1}}
     size: (...)
@@ -291,7 +291,7 @@
 console-format-es6.html:11 genFunction {[[GeneratorStatus]]: "suspended"}
     __proto__: Generator
     [[GeneratorStatus]]: "suspended"
-    [[GeneratorFunction]]: ƒ* ()
+    [[GeneratorFunction]]: function* ()
     [[GeneratorReceiver]]: Window
     [[GeneratorLocation]]: console-format-es6.html:56
     [[Scopes]]: Scopes[2]
@@ -303,7 +303,7 @@
 genFunction {[[GeneratorStatus]]: "suspended"}
     __proto__: Generator
     [[GeneratorStatus]]: "suspended"
-    [[GeneratorFunction]]: ƒ* ()
+    [[GeneratorFunction]]: function* ()
     [[GeneratorReceiver]]: Window
     [[GeneratorLocation]]: console-format-es6.html:56
     [[Scopes]]: Scopes[2]
diff --git a/third_party/WebKit/LayoutTests/inspector/console/console-format-expected.txt b/third_party/WebKit/LayoutTests/inspector/console/console-format-expected.txt
index f81377a..6352739 100644
--- a/third_party/WebKit/LayoutTests/inspector/console/console-format-expected.txt
+++ b/third_party/WebKit/LayoutTests/inspector/console/console-format-expected.txt
@@ -153,16 +153,16 @@
 console-format.html:8 [p#p]
 globals[7]
     <p id="p">Tests that console logging dumps proper messages.</p>
-console-format.html:7 ƒ () { return 1; }
-console-format.html:8 [ƒ]
+console-format.html:7 function () { return 1; }
+console-format.html:8 [function]
 globals[8]
-ƒ () { return 1; }
-console-format.html:7 ƒ () {
+function () { return 1; }
+console-format.html:7 function () {
         return 2;
     }
-console-format.html:8 [ƒ]
+console-format.html:8 [function]
 globals[9]
-ƒ () {
+function () {
         return 2;
     }
 console-format.html:7 0.12
@@ -197,7 +197,7 @@
 globals[16]
     id="x"
 console-format.html:7 Object {}
-console-format.html:8 [{…}]
+console-format.html:8 [Object]
 globals[17]
 Object {}
 console-format.html:7 NaN
@@ -212,20 +212,20 @@
 console-format.html:8 [-Infinity]
 globals[20]
 -Infinity
-console-format.html:7 (10) ["test", "test2", undefined × 2, "test4", undefined × 5, foo: {…}]
+console-format.html:7 (10) ["test", "test2", undefined × 2, "test4", undefined × 5, foo: Object]
 console-format.html:8 [Array(10)]
 globals[21]
-(10) ["test", "test2", undefined × 2, "test4", undefined × 5, foo: {…}]
+(10) ["test", "test2", undefined × 2, "test4", undefined × 5, foo: Object]
 console-format.html:7 Object {}
-console-format.html:8 [{…}]
+console-format.html:8 [Object]
 globals[22]
 Object {}
-console-format.html:7 [ƒ]
+console-format.html:7 [function]
 console-format.html:8 [Array(1)]
 globals[23]
-[ƒ]
+[function]
 console-format.html:7 Object {bar: "bar"}
-console-format.html:8 [{…}]
+console-format.html:8 [Object]
 globals[24]
 Object {bar: "bar"}
 console-format.html:7 
@@ -233,31 +233,31 @@
 console-format.html:8 [svg#svg-node]
 globals[25]
     <svg id="svg-node"></svg>
-console-format.html:7 Object {enumerableProp: 4, __underscoreEnumerableProp__: 5, __underscoreNonEnumerableProp: 2, abc: 3, getFoo: ƒ…}
-console-format.html:8 [{…}]
+console-format.html:7 Object {enumerableProp: 4, __underscoreEnumerableProp__: 5, __underscoreNonEnumerableProp: 2, abc: 3, getFoo: function…}
+console-format.html:8 [Object]
 globals[26]
-Object {enumerableProp: 4, __underscoreEnumerableProp__: 5, __underscoreNonEnumerableProp: 2, abc: 3, getFoo: ƒ…}
+Object {enumerableProp: 4, __underscoreEnumerableProp__: 5, __underscoreNonEnumerableProp: 2, abc: 3, getFoo: function…}
 console-format.html:7 -0
 console-format.html:8 [-0]
 globals[27]
 -0
 console-format.html:7 Object {}
-console-format.html:8 [{…}]
+console-format.html:8 [Object]
 globals[28]
 Object {}
-console-format.html:7 ƒ Object() { [native code] }
-console-format.html:8 [ƒ]
+console-format.html:7 function Object() { [native code] }
+console-format.html:8 [function]
 globals[29]
-ƒ Object() { [native code] }
-console-format.html:7 Object {__defineGetter__: ƒ, __defineSetter__: ƒ, hasOwnProperty: ƒ, __lookupGetter__: ƒ, __lookupSetter__: ƒ…}
-console-format.html:8 [{…}]
+function Object() { [native code] }
+console-format.html:7 Object {__defineGetter__: function, __defineSetter__: function, hasOwnProperty: function, __lookupGetter__: function, __lookupSetter__: function…}
+console-format.html:8 [Object]
 globals[30]
-Object {__defineGetter__: ƒ, __defineSetter__: ƒ, hasOwnProperty: ƒ, __lookupGetter__: ƒ, __lookupSetter__: ƒ…}
-console-format.html:7 ƒ ( /**/ foo/**/, /*/**/bar,
+Object {__defineGetter__: function, __defineSetter__: function, hasOwnProperty: function, __lookupGetter__: function, __lookupSetter__: function…}
+console-format.html:7 function ( /**/ foo/**/, /*/**/bar,
     /**/baz) {}
-console-format.html:8 [ƒ]
+console-format.html:8 [function]
 globals[31]
-ƒ ( /**/ foo/**/, /*/**/bar,
+function ( /**/ foo/**/, /*/**/bar,
     /**/baz) {}
 console-format.html:7 Number {[[PrimitiveValue]]: 42}
 console-format.html:8 [Number]
@@ -396,22 +396,22 @@
     __proto__: Array(0)
 globals[7]
     <p id="p">Tests that console logging dumps proper messages.</p>
-console-format.html:7 ƒ () { return 1; }
-console-format.html:8 [ƒ]
-    0: ƒ ()
+console-format.html:7 function () { return 1; }
+console-format.html:8 [function]
+    0: function ()
     length: 1
     __proto__: Array(0)
 globals[8]
-ƒ () { return 1; }
-console-format.html:7 ƒ () {
+function () { return 1; }
+console-format.html:7 function () {
         return 2;
     }
-console-format.html:8 [ƒ]
-    0: ƒ ()
+console-format.html:8 [function]
+    0: function ()
     length: 1
     __proto__: Array(0)
 globals[9]
-ƒ () {
+function () {
         return 2;
     }
 console-format.html:7 0.12
@@ -468,16 +468,16 @@
     id="x"
 console-format.html:7 Object {}
     length: (...)
-    get length: ƒ length()
+    get length: function length()
     __proto__: Object
-console-format.html:8 [{…}]
+console-format.html:8 [Object]
     0: Object
     length: 1
     __proto__: Array(0)
 globals[17]
 Object {}
     length: (...)
-    get length: ƒ length()
+    get length: function length()
     __proto__: Object
 console-format.html:7 NaN
 console-format.html:8 [NaN]
@@ -500,7 +500,7 @@
     __proto__: Array(0)
 globals[20]
 -Infinity
-console-format.html:7 (10) ["test", "test2", undefined × 2, "test4", undefined × 5, foo: {…}]
+console-format.html:7 (10) ["test", "test2", undefined × 2, "test4", undefined × 5, foo: Object]
     0: "test"
     1: "test2"
     4: "test4"
@@ -512,7 +512,7 @@
     length: 1
     __proto__: Array(0)
 globals[21]
-(10) ["test", "test2", undefined × 2, "test4", undefined × 5, foo: {…}]
+(10) ["test", "test2", undefined × 2, "test4", undefined × 5, foo: Object]
     0: "test"
     1: "test2"
     4: "test4"
@@ -521,15 +521,15 @@
     __proto__: Array(0)
 console-format.html:7 Object {}
     __proto__: Object
-console-format.html:8 [{…}]
+console-format.html:8 [Object]
     0: Object
     length: 1
     __proto__: Array(0)
 globals[22]
 Object {}
     __proto__: Object
-console-format.html:7 [ƒ]
-    0: ƒ ()
+console-format.html:7 [function]
+    0: function ()
     length: 1
     __proto__: Array(0)
 console-format.html:8 [Array(1)]
@@ -537,14 +537,14 @@
     length: 1
     __proto__: Array(0)
 globals[23]
-[ƒ]
-    0: ƒ ()
+[function]
+    0: function ()
     length: 1
     __proto__: Array(0)
 console-format.html:7 Object {bar: "bar"}
     bar: "bar"
     __proto__: Object
-console-format.html:8 [{…}]
+console-format.html:8 [Object]
     0: Object
     length: 1
     __proto__: Array(0)
@@ -560,30 +560,30 @@
     __proto__: Array(0)
 globals[25]
     <svg id="svg-node"></svg>
-console-format.html:7 Object {enumerableProp: 4, __underscoreEnumerableProp__: 5, __underscoreNonEnumerableProp: 2, abc: 3, getFoo: ƒ…}
+console-format.html:7 Object {enumerableProp: 4, __underscoreEnumerableProp__: 5, __underscoreNonEnumerableProp: 2, abc: 3, getFoo: function…}
     enumerableProp: 4
     __underscoreEnumerableProp__: 5
     abc: 3
     bar: (...)
-    getFoo: ƒ ()
+    getFoo: function ()
     __underscoreNonEnumerableProp: 2
-    get bar: ƒ ()
-    set bar: ƒ (x)
+    get bar: function ()
+    set bar: function (x)
     __proto__: Object
-console-format.html:8 [{…}]
+console-format.html:8 [Object]
     0: Object
     length: 1
     __proto__: Array(0)
 globals[26]
-Object {enumerableProp: 4, __underscoreEnumerableProp__: 5, __underscoreNonEnumerableProp: 2, abc: 3, getFoo: ƒ…}
+Object {enumerableProp: 4, __underscoreEnumerableProp__: 5, __underscoreNonEnumerableProp: 2, abc: 3, getFoo: function…}
     enumerableProp: 4
     __underscoreEnumerableProp__: 5
     abc: 3
     bar: (...)
-    getFoo: ƒ ()
+    getFoo: function ()
     __underscoreNonEnumerableProp: 2
-    get bar: ƒ ()
-    set bar: ƒ (x)
+    get bar: function ()
+    set bar: function (x)
     __proto__: Object
 console-format.html:7 -0
 console-format.html:8 [-0]
@@ -594,61 +594,61 @@
 -0
 console-format.html:7 Object {}
     No Properties
-console-format.html:8 [{…}]
+console-format.html:8 [Object]
     0: Object
     length: 1
     __proto__: Array(0)
 globals[28]
 Object {}
     No Properties
-console-format.html:7 ƒ Object() { [native code] }
-console-format.html:8 [ƒ]
-    0: ƒ Object()
+console-format.html:7 function Object() { [native code] }
+console-format.html:8 [function]
+    0: function Object()
     length: 1
     __proto__: Array(0)
 globals[29]
-ƒ Object() { [native code] }
-console-format.html:7 Object {__defineGetter__: ƒ, __defineSetter__: ƒ, hasOwnProperty: ƒ, __lookupGetter__: ƒ, __lookupSetter__: ƒ…}
-    constructor: ƒ Object()
-    hasOwnProperty: ƒ hasOwnProperty()
-    isPrototypeOf: ƒ isPrototypeOf()
-    propertyIsEnumerable: ƒ propertyIsEnumerable()
-    toLocaleString: ƒ toLocaleString()
-    toString: ƒ toString()
-    valueOf: ƒ valueOf()
-    __defineGetter__: ƒ __defineGetter__()
-    __defineSetter__: ƒ __defineSetter__()
-    __lookupGetter__: ƒ __lookupGetter__()
-    __lookupSetter__: ƒ __lookupSetter__()
-    get __proto__: ƒ __proto__()
-    set __proto__: ƒ __proto__()
-console-format.html:8 [{…}]
+function Object() { [native code] }
+console-format.html:7 Object {__defineGetter__: function, __defineSetter__: function, hasOwnProperty: function, __lookupGetter__: function, __lookupSetter__: function…}
+    constructor: function Object()
+    hasOwnProperty: function hasOwnProperty()
+    isPrototypeOf: function isPrototypeOf()
+    propertyIsEnumerable: function propertyIsEnumerable()
+    toLocaleString: function toLocaleString()
+    toString: function toString()
+    valueOf: function valueOf()
+    __defineGetter__: function __defineGetter__()
+    __defineSetter__: function __defineSetter__()
+    __lookupGetter__: function __lookupGetter__()
+    __lookupSetter__: function __lookupSetter__()
+    get __proto__: function __proto__()
+    set __proto__: function __proto__()
+console-format.html:8 [Object]
     0: Object
     length: 1
     __proto__: Array(0)
 globals[30]
-Object {__defineGetter__: ƒ, __defineSetter__: ƒ, hasOwnProperty: ƒ, __lookupGetter__: ƒ, __lookupSetter__: ƒ…}
-    constructor: ƒ Object()
-    hasOwnProperty: ƒ hasOwnProperty()
-    isPrototypeOf: ƒ isPrototypeOf()
-    propertyIsEnumerable: ƒ propertyIsEnumerable()
-    toLocaleString: ƒ toLocaleString()
-    toString: ƒ toString()
-    valueOf: ƒ valueOf()
-    __defineGetter__: ƒ __defineGetter__()
-    __defineSetter__: ƒ __defineSetter__()
-    __lookupGetter__: ƒ __lookupGetter__()
-    __lookupSetter__: ƒ __lookupSetter__()
-    get __proto__: ƒ __proto__()
-    set __proto__: ƒ __proto__()
-console-format.html:7 ƒ ( /**/ foo/**/, /*/**/bar,
+Object {__defineGetter__: function, __defineSetter__: function, hasOwnProperty: function, __lookupGetter__: function, __lookupSetter__: function…}
+    constructor: function Object()
+    hasOwnProperty: function hasOwnProperty()
+    isPrototypeOf: function isPrototypeOf()
+    propertyIsEnumerable: function propertyIsEnumerable()
+    toLocaleString: function toLocaleString()
+    toString: function toString()
+    valueOf: function valueOf()
+    __defineGetter__: function __defineGetter__()
+    __defineSetter__: function __defineSetter__()
+    __lookupGetter__: function __lookupGetter__()
+    __lookupSetter__: function __lookupSetter__()
+    get __proto__: function __proto__()
+    set __proto__: function __proto__()
+console-format.html:7 function ( /**/ foo/**/, /*/**/bar,
     /**/baz) {}
-console-format.html:8 [ƒ]
-    0: ƒ ( /**/ foo/**/, /*/**/bar,     /**/baz)
+console-format.html:8 [function]
+    0: function ( /**/ foo/**/, /*/**/bar,     /**/baz)
     length: 1
     __proto__: Array(0)
 globals[31]
-ƒ ( /**/ foo/**/, /*/**/bar,
+function ( /**/ foo/**/, /*/**/bar,
     /**/baz) {}
 console-format.html:7 Number {[[PrimitiveValue]]: 42}
     __proto__: Number
diff --git a/third_party/WebKit/LayoutTests/inspector/console/console-functions-expected.txt b/third_party/WebKit/LayoutTests/inspector/console/console-functions-expected.txt
index 49518e2..b94f7e8 100644
--- a/third_party/WebKit/LayoutTests/inspector/console/console-functions-expected.txt
+++ b/third_party/WebKit/LayoutTests/inspector/console/console-functions-expected.txt
@@ -22,18 +22,18 @@
 CONSOLE MESSAGE: line 29: [object Object]
 Tests that console logging different types of functions correctly.
 
-console-functions.html:24 ƒ simple() {}
-console-functions.html:25 ƒ simple()
+console-functions.html:24 function simple() {}
+console-functions.html:25 function simple()
     arguments: null
     caller: null
     length: 0
     name: "simple"
     prototype: Object
-    __proto__: ƒ ()
+    __proto__: function ()
     [[FunctionLocation]]: console-functions.html:10
     [[Scopes]]: Scopes[1]
-console-functions.html:24 async ƒ asyncSimple() {}
-console-functions.html:25 async ƒ asyncSimple()
+console-functions.html:24 async function asyncSimple() {}
+console-functions.html:25 async function asyncSimple()
     arguments: (...)
     caller: (...)
     length: 0
@@ -41,8 +41,8 @@
     __proto__: AsyncFunction
     [[FunctionLocation]]: console-functions.html:11
     [[Scopes]]: Scopes[1]
-console-functions.html:24 ƒ* genSimple() {}
-console-functions.html:25 ƒ* genSimple()
+console-functions.html:24 function* genSimple() {}
+console-functions.html:25 function* genSimple()
     arguments: (...)
     caller: (...)
     length: 0
@@ -52,58 +52,58 @@
     [[FunctionLocation]]: console-functions.html:12
     [[IsGenerator]]: true
     [[Scopes]]: Scopes[1]
-console-functions.html:24 ƒ (){}
-console-functions.html:25 ƒ anonymous()
+console-functions.html:24 function (){}
+console-functions.html:25 function anonymous()
     arguments: null
     caller: null
     length: 0
     name: ""
     prototype: Object
-    __proto__: ƒ ()
+    __proto__: function ()
     [[FunctionLocation]]: console-functions.html:13
     [[Scopes]]: Scopes[1]
-console-functions.html:24 ƒ (x, y){}
-console-functions.html:25 ƒ anonymous(x, y)
+console-functions.html:24 function (x, y){}
+console-functions.html:25 function anonymous(x, y)
     arguments: null
     caller: null
     length: 2
     name: ""
     prototype: Object
-    __proto__: ƒ ()
+    __proto__: function ()
     [[FunctionLocation]]: console-functions.html:14
     [[Scopes]]: Scopes[1]
-console-functions.html:24 ƒ namedArgs(x) {}
-console-functions.html:25 ƒ namedArgs(x)
+console-functions.html:24 function namedArgs(x) {}
+console-functions.html:25 function namedArgs(x)
     arguments: null
     caller: null
     length: 1
     name: "namedArgs"
     prototype: Object
-    __proto__: ƒ ()
+    __proto__: function ()
     [[FunctionLocation]]: console-functions.html:15
     [[Scopes]]: Scopes[1]
-console-functions.html:24 ƒ namedArgs2(x, y) {}
-console-functions.html:25 ƒ namedArgs2(x, y)
+console-functions.html:24 function namedArgs2(x, y) {}
+console-functions.html:25 function namedArgs2(x, y)
     arguments: null
     caller: null
     length: 2
     name: "namedArgs2"
     prototype: Object
-    __proto__: ƒ ()
+    __proto__: function ()
     [[FunctionLocation]]: console-functions.html:16
     [[Scopes]]: Scopes[1]
-console-functions.html:24 ƒ ({}) {}
-console-functions.html:25 ƒ anonymous({})
+console-functions.html:24 function ({}) {}
+console-functions.html:25 function anonymous({})
     arguments: null
     caller: null
     length: 1
     name: ""
     prototype: Object
-    __proto__: ƒ ()
+    __proto__: function ()
     [[FunctionLocation]]: console-functions.html:17
     [[Scopes]]: Scopes[1]
-console-functions.html:24 ƒ* whitespace(  x  )    {   }
-console-functions.html:25 ƒ* whitespace(  x  )
+console-functions.html:24 function* whitespace(  x  )    {   }
+console-functions.html:25 function* whitespace(  x  )
     arguments: (...)
     caller: (...)
     length: 1
@@ -113,8 +113,8 @@
     [[FunctionLocation]]: console-functions.html:18
     [[IsGenerator]]: true
     [[Scopes]]: Scopes[1]
-console-functions.html:24 async ƒ whitespace2(  x  ,  y  ,  z  )    {   }
-console-functions.html:25 async ƒ whitespace2(  x  ,  y  ,  z  )
+console-functions.html:24 async function whitespace2(  x  ,  y  ,  z  )    {   }
+console-functions.html:25 async function whitespace2(  x  ,  y  ,  z  )
     arguments: (...)
     caller: (...)
     length: 3
@@ -123,27 +123,27 @@
     [[FunctionLocation]]: console-functions.html:19
     [[Scopes]]: Scopes[1]
 console-functions.html:28 Object
-    func0: ƒ simple()
-    func1: async ƒ asyncSimple()
-    func2: ƒ* genSimple()
-    func3: ƒ ()
-    func4: ƒ (x, y)
-    func5: ƒ namedArgs(x)
-    func6: ƒ namedArgs2(x, y)
-    func7: ƒ ({})
-    func8: ƒ* whitespace(  x  )
-    func9: async ƒ whitespace2(  x  ,  y  ,  z  )
+    func0: function simple()
+    func1: async function asyncSimple()
+    func2: function* genSimple()
+    func3: function ()
+    func4: function (x, y)
+    func5: function namedArgs(x)
+    func6: function namedArgs2(x, y)
+    func7: function ({})
+    func8: function* whitespace(  x  )
+    func9: async function whitespace2(  x  ,  y  ,  z  )
     __proto__: Object
 console-functions.html:29 Object
-    func0: ƒ simple()
-    func1: async ƒ asyncSimple()
-    func2: ƒ* genSimple()
-    func3: ƒ ()
-    func4: ƒ (x, y)
-    func5: ƒ namedArgs(x)
-    func6: ƒ namedArgs2(x, y)
-    func7: ƒ ({})
-    func8: ƒ* whitespace(  x  )
-    func9: async ƒ whitespace2(  x  ,  y  ,  z  )
+    func0: function simple()
+    func1: async function asyncSimple()
+    func2: function* genSimple()
+    func3: function ()
+    func4: function (x, y)
+    func5: function namedArgs(x)
+    func6: function namedArgs2(x, y)
+    func7: function ({})
+    func8: function* whitespace(  x  )
+    func9: async function whitespace2(  x  ,  y  ,  z  )
     __proto__: Object
 
diff --git a/third_party/WebKit/LayoutTests/inspector/console/console-log-object-with-getter-expected.txt b/third_party/WebKit/LayoutTests/inspector/console/console-log-object-with-getter-expected.txt
index b9530b2..ed814bb 100644
--- a/third_party/WebKit/LayoutTests/inspector/console/console-log-object-with-getter-expected.txt
+++ b/third_party/WebKit/LayoutTests/inspector/console/console-log-object-with-getter-expected.txt
@@ -6,7 +6,7 @@
 console-log-object-with-getter.html:25 Object {}
 console-log-object-with-getter.html:26 (2) [(...), undefined × 1]
 console-log-object-with-getter.html:27 Object {}
-console-log-object-with-getter.html:25 Object {}foo: Objecta: 1b: 2__proto__: Objectget foo: ƒ ()set bar: ƒ (x)__proto__: Object console-message > source-code > console-message-anchor > devtools-link > console-message-text > console-view-object-properties-section object-value-object source-code expanded > tree-outline-disclosure tree-outline-disclosure-hide-overflow > tree-outline source-code object-properties-section > parent object-properties-section-root-element expanded > selection fill > console-object-preview > object-description > object-properties-preview source-code > object-state-note info-note > children expanded > parent expanded > name > object-properties-section-separator > object-value-object value > children expanded > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > parent > selection fill > name object-properties-section-dimmed > object-properties-section-separator > object-value-object value > children > parent > selection fill > name object-properties-section-dimmed > object-properties-section-separator > object-value-function value > object-value-function-prefix > children > parent > selection fill > name object-properties-section-dimmed > object-properties-section-separator > object-value-function value > object-value-function-prefix > children > parent > selection fill > name object-properties-section-dimmed > object-properties-section-separator > object-value-object value > children
-console-log-object-with-getter.html:26 (2) [(...), undefined × 1]0: 1length: 2get 0: ƒ ()set 1: ƒ (x)__proto__: Array(0) console-message > source-code > console-message-anchor > devtools-link > console-message-text > console-view-object-properties-section object-value-array source-code expanded > tree-outline-disclosure tree-outline-disclosure-hide-overflow > tree-outline source-code object-properties-section > parent object-properties-section-root-element expanded > selection fill > console-object-preview > object-description > object-properties-preview source-code > object-value-accessor > object-value-undefined > object-state-note info-note > children expanded > name > object-properties-section-separator > object-value-number value > children > selection fill > name object-properties-section-dimmed > object-properties-section-separator > object-value-number value > children > parent > selection fill > name object-properties-section-dimmed > object-properties-section-separator > object-value-function value > object-value-function-prefix > children > parent > selection fill > name object-properties-section-dimmed > object-properties-section-separator > object-value-function value > object-value-function-prefix > children > parent > selection fill > name object-properties-section-dimmed > object-properties-section-separator > object-value-array value > children
-console-log-object-with-getter.html:27 Object {}error: [Exception: Error: myError]function: [Exception: ƒ ()]number: [Exception: 123]string: [Exception: "myString"]get error: ƒ error()get function: ƒ function()get number: ƒ number()get string: ƒ string()__proto__: Object console-message > source-code > console-message-anchor > devtools-link > console-message-text > console-view-object-properties-section object-value-object source-code expanded > tree-outline-disclosure tree-outline-disclosure-hide-overflow > tree-outline source-code object-properties-section > parent object-properties-section-root-element expanded > selection fill > console-object-preview > object-description > object-properties-preview source-code > object-state-note info-note > children expanded > name > object-properties-section-separator > error value > object-value-error > children > name > object-properties-section-separator > error value > object-value-function > object-value-function-prefix > children > name > object-properties-section-separator > error value > object-value-number > children > name > object-properties-section-separator > error value > object-value-string > object-value-string-quote > object-value-string-quote > children > parent > selection fill > name object-properties-section-dimmed > object-properties-section-separator > object-value-function value > object-value-function-prefix > children > parent > selection fill > name object-properties-section-dimmed > object-properties-section-separator > object-value-function value > object-value-function-prefix > children > parent > selection fill > name object-properties-section-dimmed > object-properties-section-separator > object-value-function value > object-value-function-prefix > children > parent > selection fill > name object-properties-section-dimmed > object-properties-section-separator > object-value-function value > object-value-function-prefix > children > parent > selection fill > name object-properties-section-dimmed > object-properties-section-separator > object-value-object value > children
+console-log-object-with-getter.html:25 Object {}foo: Objecta: 1b: 2__proto__: Objectget foo: function ()set bar: function (x)__proto__: Object console-message > source-code > console-message-anchor > devtools-link > console-message-text > console-view-object-properties-section object-value-object source-code expanded > tree-outline-disclosure tree-outline-disclosure-hide-overflow > tree-outline source-code object-properties-section > parent object-properties-section-root-element expanded > selection fill > console-object-preview > object-description > object-state-note info-note > children expanded > parent expanded > name > object-properties-section-separator > object-value-object value > children expanded > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > parent > selection fill > name object-properties-section-dimmed > object-properties-section-separator > object-value-object value > children > parent > selection fill > name object-properties-section-dimmed > object-properties-section-separator > object-value-function value > object-value-function-prefix > children > parent > selection fill > name object-properties-section-dimmed > object-properties-section-separator > object-value-function value > object-value-function-prefix > children > parent > selection fill > name object-properties-section-dimmed > object-properties-section-separator > object-value-object value > children
+console-log-object-with-getter.html:26 (2) [(...), undefined × 1]0: 1length: 2get 0: function ()set 1: function (x)__proto__: Array(0) console-message > source-code > console-message-anchor > devtools-link > console-message-text > console-view-object-properties-section object-value-array source-code expanded > tree-outline-disclosure tree-outline-disclosure-hide-overflow > tree-outline source-code object-properties-section > parent object-properties-section-root-element expanded > selection fill > console-object-preview > object-description > object-value-accessor > object-value-undefined > object-state-note info-note > children expanded > name > object-properties-section-separator > object-value-number value > children > selection fill > name object-properties-section-dimmed > object-properties-section-separator > object-value-number value > children > parent > selection fill > name object-properties-section-dimmed > object-properties-section-separator > object-value-function value > object-value-function-prefix > children > parent > selection fill > name object-properties-section-dimmed > object-properties-section-separator > object-value-function value > object-value-function-prefix > children > parent > selection fill > name object-properties-section-dimmed > object-properties-section-separator > object-value-array value > children
+console-log-object-with-getter.html:27 Object {}error: [Exception: Error: myError]function: [Exception: function ()]number: [Exception: 123]string: [Exception: "myString"]get error: function error()get function: function function()get number: function number()get string: function string()__proto__: Object console-message > source-code > console-message-anchor > devtools-link > console-message-text > console-view-object-properties-section object-value-object source-code expanded > tree-outline-disclosure tree-outline-disclosure-hide-overflow > tree-outline source-code object-properties-section > parent object-properties-section-root-element expanded > selection fill > console-object-preview > object-description > object-state-note info-note > children expanded > name > object-properties-section-separator > error value > object-value-error > children > name > object-properties-section-separator > error value > object-value-function > object-value-function-prefix > children > name > object-properties-section-separator > error value > object-value-number > children > name > object-properties-section-separator > error value > object-value-string > object-value-string-quote > object-value-string-quote > children > parent > selection fill > name object-properties-section-dimmed > object-properties-section-separator > object-value-function value > object-value-function-prefix > children > parent > selection fill > name object-properties-section-dimmed > object-properties-section-separator > object-value-function value > object-value-function-prefix > children > parent > selection fill > name object-properties-section-dimmed > object-properties-section-separator > object-value-function value > object-value-function-prefix > children > parent > selection fill > name object-properties-section-dimmed > object-properties-section-separator > object-value-function value > object-value-function-prefix > children > parent > selection fill > name object-properties-section-dimmed > object-properties-section-separator > object-value-object value > children
 
diff --git a/third_party/WebKit/LayoutTests/inspector/console/console-log-short-hand-method-expected.txt b/third_party/WebKit/LayoutTests/inspector/console/console-log-short-hand-method-expected.txt
index e25467f..aeb0555 100644
--- a/third_party/WebKit/LayoutTests/inspector/console/console-log-short-hand-method-expected.txt
+++ b/third_party/WebKit/LayoutTests/inspector/console/console-log-short-hand-method-expected.txt
@@ -3,10 +3,10 @@
 
 console-log-short-hand-method.html:18 Object
     baz: (...)
-    boo: ƒ (c,d)
-    foo: ƒ foo(a,b)
-    gen: ƒ* gen()
-    get baz: ƒ baz()
-    set baz: ƒ baz(x)
+    boo: function (c,d)
+    foo: function foo(a,b)
+    gen: function* gen()
+    get baz: function baz()
+    set baz: function baz(x)
     __proto__: Object
 
diff --git a/third_party/WebKit/LayoutTests/inspector/console/console-log-toString-object-expected.txt b/third_party/WebKit/LayoutTests/inspector/console/console-log-toString-object-expected.txt
index 49bae54b..bfd32b3 100644
--- a/third_party/WebKit/LayoutTests/inspector/console/console-log-toString-object-expected.txt
+++ b/third_party/WebKit/LayoutTests/inspector/console/console-log-toString-object-expected.txt
@@ -3,5 +3,5 @@
 Tests that passing an object which throws on string conversion into console.log won't crash inspected Page. The test passes if it doesn't crash. Bug 57557
 
 Page reloaded.
-console-log-toString-object.html:7 Object {toString: {…}}
+console-log-toString-object.html:7 Object {toString: Object}
 
diff --git a/third_party/WebKit/LayoutTests/inspector/console/console-native-function-expected.txt b/third_party/WebKit/LayoutTests/inspector/console/console-native-function-expected.txt
index 3550166..a981380 100644
--- a/third_party/WebKit/LayoutTests/inspector/console/console-native-function-expected.txt
+++ b/third_party/WebKit/LayoutTests/inspector/console/console-native-function-expected.txt
@@ -1,7 +1,7 @@
 Tests that console dumps native function without exception.
 
 Math.random
-ƒ random() { [native code] }
+function random() { [native code] }
 document.appendChild
-ƒ appendChild() { [native code] }
+function appendChild() { [native code] }
 
diff --git a/third_party/WebKit/LayoutTests/inspector/console/console-object-preview-expected.txt b/third_party/WebKit/LayoutTests/inspector/console/console-object-preview-expected.txt
index 82e10f84..1086024 100644
--- a/third_party/WebKit/LayoutTests/inspector/console/console-object-preview-expected.txt
+++ b/third_party/WebKit/LayoutTests/inspector/console/console-object-preview-expected.txt
@@ -32,66 +32,66 @@
 Tests that console produces instant previews for arrays and objects.
 
 console-object-preview.html:9 Mutating object in a loop console-message > source-code > console-message-anchor > devtools-link > console-message-text
-console-object-preview.html:13 Object {a: 0, b: 0, c: 0} console-message > source-code > console-message-anchor > devtools-link > console-message-text > console-view-object-properties-section object-value-object source-code > tree-outline-disclosure tree-outline-disclosure-hide-overflow > tree-outline source-code object-properties-section > parent object-properties-section-root-element > selection fill > console-object-preview > object-description > object-properties-preview source-code > name > object-value-number > name > object-value-number > name > object-value-number > object-state-note info-note > children
-console-object-preview.html:13 Object {a: 0, b: 0, c: 1} console-message > source-code > console-message-anchor > devtools-link > console-message-text > console-view-object-properties-section object-value-object source-code > tree-outline-disclosure tree-outline-disclosure-hide-overflow > tree-outline source-code object-properties-section > parent object-properties-section-root-element > selection fill > console-object-preview > object-description > object-properties-preview source-code > name > object-value-number > name > object-value-number > name > object-value-number > object-state-note info-note > children
-console-object-preview.html:13 Object {a: 0, b: 0, c: 2} console-message > source-code > console-message-anchor > devtools-link > console-message-text > console-view-object-properties-section object-value-object source-code > tree-outline-disclosure tree-outline-disclosure-hide-overflow > tree-outline source-code object-properties-section > parent object-properties-section-root-element > selection fill > console-object-preview > object-description > object-properties-preview source-code > name > object-value-number > name > object-value-number > name > object-value-number > object-state-note info-note > children
+console-object-preview.html:13 Object {a: 0, b: 0, c: 0} console-message > source-code > console-message-anchor > devtools-link > console-message-text > console-view-object-properties-section object-value-object source-code > tree-outline-disclosure tree-outline-disclosure-hide-overflow > tree-outline source-code object-properties-section > parent object-properties-section-root-element > selection fill > console-object-preview > object-description > name > object-value-number > name > object-value-number > name > object-value-number > object-state-note info-note > children
+console-object-preview.html:13 Object {a: 0, b: 0, c: 1} console-message > source-code > console-message-anchor > devtools-link > console-message-text > console-view-object-properties-section object-value-object source-code > tree-outline-disclosure tree-outline-disclosure-hide-overflow > tree-outline source-code object-properties-section > parent object-properties-section-root-element > selection fill > console-object-preview > object-description > name > object-value-number > name > object-value-number > name > object-value-number > object-state-note info-note > children
+console-object-preview.html:13 Object {a: 0, b: 0, c: 2} console-message > source-code > console-message-anchor > devtools-link > console-message-text > console-view-object-properties-section object-value-object source-code > tree-outline-disclosure tree-outline-disclosure-hide-overflow > tree-outline source-code object-properties-section > parent object-properties-section-root-element > selection fill > console-object-preview > object-description > name > object-value-number > name > object-value-number > name > object-value-number > object-state-note info-note > children
 console-object-preview.html:16 Mutating array in a loop console-message > source-code > console-message-anchor > devtools-link > console-message-text
-console-object-preview.html:20 (3) [0, 0, 0] console-message > source-code > console-message-anchor > devtools-link > console-message-text > console-view-object-properties-section object-value-array source-code > tree-outline-disclosure tree-outline-disclosure-hide-overflow > tree-outline source-code object-properties-section > parent object-properties-section-root-element > selection fill > console-object-preview > object-description > object-properties-preview source-code > object-value-number > object-value-number > object-value-number > object-state-note info-note > children
-console-object-preview.html:20 (3) [0, 0, 1] console-message > source-code > console-message-anchor > devtools-link > console-message-text > console-view-object-properties-section object-value-array source-code > tree-outline-disclosure tree-outline-disclosure-hide-overflow > tree-outline source-code object-properties-section > parent object-properties-section-root-element > selection fill > console-object-preview > object-description > object-properties-preview source-code > object-value-number > object-value-number > object-value-number > object-state-note info-note > children
-console-object-preview.html:20 (3) [0, 0, 2] console-message > source-code > console-message-anchor > devtools-link > console-message-text > console-view-object-properties-section object-value-array source-code > tree-outline-disclosure tree-outline-disclosure-hide-overflow > tree-outline source-code object-properties-section > parent object-properties-section-root-element > selection fill > console-object-preview > object-description > object-properties-preview source-code > object-value-number > object-value-number > object-value-number > object-state-note info-note > children
+console-object-preview.html:20 (3) [0, 0, 0] console-message > source-code > console-message-anchor > devtools-link > console-message-text > console-view-object-properties-section object-value-array source-code > tree-outline-disclosure tree-outline-disclosure-hide-overflow > tree-outline source-code object-properties-section > parent object-properties-section-root-element > selection fill > console-object-preview > object-description > object-value-number > object-value-number > object-value-number > object-state-note info-note > children
+console-object-preview.html:20 (3) [0, 0, 1] console-message > source-code > console-message-anchor > devtools-link > console-message-text > console-view-object-properties-section object-value-array source-code > tree-outline-disclosure tree-outline-disclosure-hide-overflow > tree-outline source-code object-properties-section > parent object-properties-section-root-element > selection fill > console-object-preview > object-description > object-value-number > object-value-number > object-value-number > object-state-note info-note > children
+console-object-preview.html:20 (3) [0, 0, 2] console-message > source-code > console-message-anchor > devtools-link > console-message-text > console-view-object-properties-section object-value-array source-code > tree-outline-disclosure tree-outline-disclosure-hide-overflow > tree-outline source-code object-properties-section > parent object-properties-section-root-element > selection fill > console-object-preview > object-description > object-value-number > object-value-number > object-value-number > object-state-note info-note > children
 console-object-preview.html:23 Object with many properties console-message > source-code > console-message-anchor > devtools-link > console-message-text
-console-object-preview.html:28 Object {property_0: 0, property_1: 1, property_2: 2, property_3: 3, property_4: 4…} console-message > source-code > console-message-anchor > devtools-link > console-message-text > console-view-object-properties-section object-value-object source-code > tree-outline-disclosure tree-outline-disclosure-hide-overflow > tree-outline source-code object-properties-section > parent object-properties-section-root-element > selection fill > console-object-preview > object-description > object-properties-preview source-code > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > object-state-note info-note > children
+console-object-preview.html:28 Object {property_0: 0, property_1: 1, property_2: 2, property_3: 3, property_4: 4…} console-message > source-code > console-message-anchor > devtools-link > console-message-text > console-view-object-properties-section object-value-object source-code > tree-outline-disclosure tree-outline-disclosure-hide-overflow > tree-outline source-code object-properties-section > parent object-properties-section-root-element > selection fill > console-object-preview > object-description > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > object-state-note info-note > children
 console-object-preview.html:30 Array with many properties console-message > source-code > console-message-anchor > devtools-link > console-message-text
-console-object-preview.html:35 (2) [0, 1, property_0: 0, property_1: 1, property_2: 2, property_3: 3, property_4: 4…] console-message > source-code > console-message-anchor > devtools-link > console-message-text > console-view-object-properties-section object-value-array source-code > tree-outline-disclosure tree-outline-disclosure-hide-overflow > tree-outline source-code object-properties-section > parent object-properties-section-root-element > selection fill > console-object-preview > object-description > object-properties-preview source-code > object-value-number > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > object-state-note info-note > children
+console-object-preview.html:35 (2) [0, 1, property_0: 0, property_1: 1, property_2: 2, property_3: 3, property_4: 4…] console-message > source-code > console-message-anchor > devtools-link > console-message-text > console-view-object-properties-section object-value-array source-code > tree-outline-disclosure tree-outline-disclosure-hide-overflow > tree-outline source-code object-properties-section > parent object-properties-section-root-element > selection fill > console-object-preview > object-description > object-value-number > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > object-state-note info-note > children
 console-object-preview.html:37 Array with gaps and overflow console-message > source-code > console-message-anchor > devtools-link > console-message-text
-console-object-preview.html:42 (5733) [32: 0, 89: 1, 146: 2, 203: 3, 260: 4, 317: 5, 374: 6, 431: 7, 488: 8, 545: 9, 602: 10, 659: 11, 716: 12, 773: 13, 830: 14, 887: 15, 944: 16, 1001: 17, 1058: 18, 1115: 19, 1172: 20, 1229: 21, 1286: 22, 1343: 23, 1400: 24, 1457: 25, 1514: 26, 1571: 27, 1628: 28, 1685: 29, 1742: 30, 1799: 31, 1856: 32, 1913: 33, 1970: 34, 2027: 35, 2084: 36, 2141: 37, 2198: 38, 2255: 39, 2312: 40, 2369: 41, 2426: 42, 2483: 43, 2540: 44, 2597: 45, 2654: 46, 2711: 47, 2768: 48, 2825: 49, 2882: 50, 2939: 51, 2996: 52, 3053: 53, 3110: 54, 3167: 55, 3224: 56, 3281: 57, 3338: 58, 3395: 59, 3452: 60, 3509: 61, 3566: 62, 3623: 63, 3680: 64, 3737: 65, 3794: 66, 3851: 67, 3908: 68, 3965: 69, 4022: 70, 4079: 71, 4136: 72, 4193: 73, 4250: 74, 4307: 75, 4364: 76, 4421: 77, 4478: 78, 4535: 79, 4592: 80, 4649: 81, 4706: 82, 4763: 83, 4820: 84, 4877: 85, 4934: 86, 4991: 87, 5048: 88, 5105: 89, 5162: 90, 5219: 91, 5276: 92, 5333: 93, 5390: 94, 5447: 95, 5504: 96, 5561: 97, 5618: 98, 5675: 99…] console-message > source-code > console-message-anchor > devtools-link > console-message-text > console-view-object-properties-section object-value-array source-code > tree-outline-disclosure tree-outline-disclosure-hide-overflow > tree-outline source-code object-properties-section > parent object-properties-section-root-element > selection fill > console-object-preview > object-description > object-properties-preview source-code > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > object-state-note info-note > children
+console-object-preview.html:42 (5733) [32: 0, 89: 1, 146: 2, 203: 3, 260: 4, 317: 5, 374: 6, 431: 7, 488: 8, 545: 9, 602: 10, 659: 11, 716: 12, 773: 13, 830: 14, 887: 15, 944: 16, 1001: 17, 1058: 18, 1115: 19, 1172: 20, 1229: 21, 1286: 22, 1343: 23, 1400: 24, 1457: 25, 1514: 26, 1571: 27, 1628: 28, 1685: 29, 1742: 30, 1799: 31, 1856: 32, 1913: 33, 1970: 34, 2027: 35, 2084: 36, 2141: 37, 2198: 38, 2255: 39, 2312: 40, 2369: 41, 2426: 42, 2483: 43, 2540: 44, 2597: 45, 2654: 46, 2711: 47, 2768: 48, 2825: 49, 2882: 50, 2939: 51, 2996: 52, 3053: 53, 3110: 54, 3167: 55, 3224: 56, 3281: 57, 3338: 58, 3395: 59, 3452: 60, 3509: 61, 3566: 62, 3623: 63, 3680: 64, 3737: 65, 3794: 66, 3851: 67, 3908: 68, 3965: 69, 4022: 70, 4079: 71, 4136: 72, 4193: 73, 4250: 74, 4307: 75, 4364: 76, 4421: 77, 4478: 78, 4535: 79, 4592: 80, 4649: 81, 4706: 82, 4763: 83, 4820: 84, 4877: 85, 4934: 86, 4991: 87, 5048: 88, 5105: 89, 5162: 90, 5219: 91, 5276: 92, 5333: 93, 5390: 94, 5447: 95, 5504: 96, 5561: 97, 5618: 98, 5675: 99…] console-message > source-code > console-message-anchor > devtools-link > console-message-text > console-view-object-properties-section object-value-array source-code > tree-outline-disclosure tree-outline-disclosure-hide-overflow > tree-outline source-code object-properties-section > parent object-properties-section-root-element > selection fill > console-object-preview > object-description > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > object-state-note info-note > children
 console-object-preview.html:44 Array with gaps without overflow console-message > source-code > console-message-anchor > devtools-link > console-message-text
-console-object-preview.html:49 (5619) [undefined × 32, 0, undefined × 56, 1, undefined × 56, 2, undefined × 56, 3, undefined × 56, 4, undefined × 56, 5, undefined × 56, 6, undefined × 56, 7, undefined × 56, 8, undefined × 56, 9, undefined × 56, 10, undefined × 56, 11, undefined × 56, 12, undefined × 56, 13, undefined × 56, 14, undefined × 56, 15, undefined × 56, 16, undefined × 56, 17, undefined × 56, 18, undefined × 56, 19, undefined × 56, 20, undefined × 56, 21, undefined × 56, 22, undefined × 56, 23, undefined × 56, 24, undefined × 56, 25, undefined × 56, 26, undefined × 56, 27, undefined × 56, 28, undefined × 56, 29, undefined × 56, 30, undefined × 56, 31, undefined × 56, 32, undefined × 56, 33, undefined × 56, 34, undefined × 56, 35, undefined × 56, 36, undefined × 56, 37, undefined × 56, 38, undefined × 56, 39, undefined × 56, 40, undefined × 56, 41, undefined × 56, 42, undefined × 56, 43, undefined × 56, 44, undefined × 56, 45, undefined × 56, 46, undefined × 56, 47, undefined × 56, 48, undefined × 56, console-message > source-code > console-message-anchor > devtools-link > console-message-text > console-view-object-properties-section object-value-array source-code > tree-outline-disclosure tree-outline-disclosure-hide-overflow > tree-outline source-code object-properties-section > parent object-properties-section-root-element > selection fill > console-object-preview > object-description > object-properties-preview source-code > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-state-note info-note > children
+console-object-preview.html:49 (5619) [undefined × 32, 0, undefined × 56, 1, undefined × 56, 2, undefined × 56, 3, undefined × 56, 4, undefined × 56, 5, undefined × 56, 6, undefined × 56, 7, undefined × 56, 8, undefined × 56, 9, undefined × 56, 10, undefined × 56, 11, undefined × 56, 12, undefined × 56, 13, undefined × 56, 14, undefined × 56, 15, undefined × 56, 16, undefined × 56, 17, undefined × 56, 18, undefined × 56, 19, undefined × 56, 20, undefined × 56, 21, undefined × 56, 22, undefined × 56, 23, undefined × 56, 24, undefined × 56, 25, undefined × 56, 26, undefined × 56, 27, undefined × 56, 28, undefined × 56, 29, undefined × 56, 30, undefined × 56, 31, undefined × 56, 32, undefined × 56, 33, undefined × 56, 34, undefined × 56, 35, undefined × 56, 36, undefined × 56, 37, undefined × 56, 38, undefined × 56, 39, undefined × 56, 40, undefined × 56, 41, undefined × 56, 42, undefined × 56, 43, undefined × 56, 44, undefined × 56, 45, undefined × 56, 46, undefined × 56, 47, undefined × 56, 48, undefined × 56, console-message > source-code > console-message-anchor > devtools-link > console-message-text > console-view-object-properties-section object-value-array source-code > tree-outline-disclosure tree-outline-disclosure-hide-overflow > tree-outline source-code object-properties-section > parent object-properties-section-root-element > selection fill > console-object-preview > object-description > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-state-note info-note > children
 console-object-preview.html:51 Object with proto console-message > source-code > console-message-anchor > devtools-link > console-message-text
-console-object-preview.html:54 Object {d: 1} console-message > source-code > console-message-anchor > devtools-link > console-message-text > console-view-object-properties-section object-value-object source-code > tree-outline-disclosure tree-outline-disclosure-hide-overflow > tree-outline source-code object-properties-section > parent object-properties-section-root-element > selection fill > console-object-preview > object-description > object-properties-preview source-code > name > object-value-number > object-state-note info-note > children
+console-object-preview.html:54 Object {d: 1} console-message > source-code > console-message-anchor > devtools-link > console-message-text > console-view-object-properties-section object-value-object source-code > tree-outline-disclosure tree-outline-disclosure-hide-overflow > tree-outline source-code object-properties-section > parent object-properties-section-root-element > selection fill > console-object-preview > object-description > name > object-value-number > object-state-note info-note > children
 console-object-preview.html:56 Sparse array console-message > source-code > console-message-anchor > devtools-link > console-message-text
-console-object-preview.html:59 (150) [undefined × 50, 50, undefined × 99] console-message > source-code > console-message-anchor > devtools-link > console-message-text > console-view-object-properties-section object-value-array source-code > tree-outline-disclosure tree-outline-disclosure-hide-overflow > tree-outline source-code object-properties-section > parent object-properties-section-root-element > selection fill > console-object-preview > object-description > object-properties-preview source-code > object-value-undefined > object-value-number > object-value-undefined > object-state-note info-note > children
+console-object-preview.html:59 (150) [undefined × 50, 50, undefined × 99] console-message > source-code > console-message-anchor > devtools-link > console-message-text > console-view-object-properties-section object-value-array source-code > tree-outline-disclosure tree-outline-disclosure-hide-overflow > tree-outline source-code object-properties-section > parent object-properties-section-root-element > selection fill > console-object-preview > object-description > object-value-undefined > object-value-number > object-value-undefined > object-state-note info-note > children
 console-object-preview.html:61 Dense array with indexes and propeties console-message > source-code > console-message-anchor > devtools-link > console-message-text
-console-object-preview.html:67 (150) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99…] console-message > source-code > console-message-anchor > devtools-link > console-message-text > console-view-object-properties-section object-value-array source-code > tree-outline-disclosure tree-outline-disclosure-hide-overflow > tree-outline source-code object-properties-section > parent object-properties-section-root-element > selection fill > console-object-preview > object-description > object-properties-preview source-code > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-state-note info-note > children
+console-object-preview.html:67 (150) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99…] console-message > source-code > console-message-anchor > devtools-link > console-message-text > console-view-object-properties-section object-value-array source-code > tree-outline-disclosure tree-outline-disclosure-hide-overflow > tree-outline source-code object-properties-section > parent object-properties-section-root-element > selection fill > console-object-preview > object-description > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-state-note info-note > children
 console-object-preview.html:69 Object with properties containing whitespaces console-message > source-code > console-message-anchor > devtools-link > console-message-text
-console-object-preview.html:76 Object {" a b ": " a b ", c d: "c d", "": "", "  ": "  ", "a↵↵b↵c": "a↵↵b↵c"} console-message > source-code > console-message-anchor > devtools-link > console-message-text > console-view-object-properties-section object-value-object source-code > tree-outline-disclosure tree-outline-disclosure-hide-overflow > tree-outline source-code object-properties-section > parent object-properties-section-root-element > selection fill > console-object-preview > object-description > object-properties-preview source-code > name > object-value-string > name > object-value-string > name > object-value-string > name > object-value-string > name > object-value-string > object-state-note info-note > children
+console-object-preview.html:76 Object {" a b ": " a b ", c d: "c d", "": "", "  ": "  ", "a↵↵b↵c": "a↵↵b↵c"} console-message > source-code > console-message-anchor > devtools-link > console-message-text > console-view-object-properties-section object-value-object source-code > tree-outline-disclosure tree-outline-disclosure-hide-overflow > tree-outline source-code object-properties-section > parent object-properties-section-root-element > selection fill > console-object-preview > object-description > name > object-value-string > name > object-value-string > name > object-value-string > name > object-value-string > name > object-value-string > object-state-note info-note > children
 console-object-preview.html:78 Object with a document.all property console-message > source-code > console-message-anchor > devtools-link > console-message-text
-console-object-preview.html:79 Object {all: HTMLAllCollection(7)} console-message > source-code > console-message-anchor > devtools-link > console-message-text > console-view-object-properties-section object-value-object source-code > tree-outline-disclosure tree-outline-disclosure-hide-overflow > tree-outline source-code object-properties-section > parent object-properties-section-root-element > selection fill > console-object-preview > object-description > object-properties-preview source-code > name > object-value-array > object-state-note info-note > children
+console-object-preview.html:79 Object {all: HTMLAllCollection(7)} console-message > source-code > console-message-anchor > devtools-link > console-message-text > console-view-object-properties-section object-value-object source-code > tree-outline-disclosure tree-outline-disclosure-hide-overflow > tree-outline source-code object-properties-section > parent object-properties-section-root-element > selection fill > console-object-preview > object-description > name > object-value-array > object-state-note info-note > children
 console-object-preview.html:81 Object with special numbers console-message > source-code > console-message-anchor > devtools-link > console-message-text
-console-object-preview.html:83 Object {nan: NaN, posInf: Infinity, negInf: -Infinity, negZero: -0} console-message > source-code > console-message-anchor > devtools-link > console-message-text > console-view-object-properties-section object-value-object source-code > tree-outline-disclosure tree-outline-disclosure-hide-overflow > tree-outline source-code object-properties-section > parent object-properties-section-root-element > selection fill > console-object-preview > object-description > object-properties-preview source-code > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > object-state-note info-note > children
+console-object-preview.html:83 Object {nan: NaN, posInf: Infinity, negInf: -Infinity, negZero: -0} console-message > source-code > console-message-anchor > devtools-link > console-message-text > console-view-object-properties-section object-value-object source-code > tree-outline-disclosure tree-outline-disclosure-hide-overflow > tree-outline source-code object-properties-section > parent object-properties-section-root-element > selection fill > console-object-preview > object-description > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > object-state-note info-note > children
 console-object-preview.html:85 Object with exactly 5 properties: expected to be lossless console-message > source-code > console-message-anchor > devtools-link > console-message-text
-console-object-preview.html:86 Object {a: 1, b: 2, c: 3, d: 4, e: 5} console-message > source-code > console-message-anchor > devtools-link > console-message-text > console-view-object-properties-section object-value-object source-code > tree-outline-disclosure tree-outline-disclosure-hide-overflow > tree-outline source-code object-properties-section > parent object-properties-section-root-element > selection fill > console-object-preview > object-description > object-properties-preview source-code > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > object-state-note info-note > children
-console-object-preview.html:88 Object {null: null, undef: undefined, regexp: /^[regexp]$/g, bool: false} console-message > source-code > console-message-anchor > devtools-link > console-message-text > console-view-object-properties-section object-value-object source-code > tree-outline-disclosure tree-outline-disclosure-hide-overflow > tree-outline source-code object-properties-section > parent object-properties-section-root-element > selection fill > console-object-preview > object-description > object-properties-preview source-code > name > object-value-null > name > object-value-undefined > name > object-value-regexp > name > object-value-boolean > object-state-note info-note > children
+console-object-preview.html:86 Object {a: 1, b: 2, c: 3, d: 4, e: 5} console-message > source-code > console-message-anchor > devtools-link > console-message-text > console-view-object-properties-section object-value-object source-code > tree-outline-disclosure tree-outline-disclosure-hide-overflow > tree-outline source-code object-properties-section > parent object-properties-section-root-element > selection fill > console-object-preview > object-description > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > object-state-note info-note > children
+console-object-preview.html:88 Object {null: null, undef: undefined, regexp: /^[regexp]$/g, bool: false} console-message > source-code > console-message-anchor > devtools-link > console-message-text > console-view-object-properties-section object-value-object source-code > tree-outline-disclosure tree-outline-disclosure-hide-overflow > tree-outline source-code object-properties-section > parent object-properties-section-root-element > selection fill > console-object-preview > object-description > name > object-value-null > name > object-value-undefined > name > object-value-regexp > name > object-value-boolean > object-state-note info-note > children
 Expanded all messages
 console-object-preview.html:9 Mutating object in a loop console-message > source-code > console-message-anchor > devtools-link > console-message-text
-console-object-preview.html:13 Object {a: 0, b: 0, c: 0}a: 0b: 0c: 2__proto__: Object console-message > source-code > console-message-anchor > devtools-link > console-message-text > console-view-object-properties-section object-value-object source-code expanded > tree-outline-disclosure tree-outline-disclosure-hide-overflow > tree-outline source-code object-properties-section > parent object-properties-section-root-element expanded > selection fill > console-object-preview > object-description > object-properties-preview source-code > name > object-value-number > name > object-value-number > name > object-value-number > object-state-note info-note > children expanded > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > parent > selection fill > name object-properties-section-dimmed > object-properties-section-separator > object-value-object value > children
-console-object-preview.html:13 Object {a: 0, b: 0, c: 1}a: 0b: 0c: 2__proto__: Object console-message > source-code > console-message-anchor > devtools-link > console-message-text > console-view-object-properties-section object-value-object source-code expanded > tree-outline-disclosure tree-outline-disclosure-hide-overflow > tree-outline source-code object-properties-section > parent object-properties-section-root-element expanded > selection fill > console-object-preview > object-description > object-properties-preview source-code > name > object-value-number > name > object-value-number > name > object-value-number > object-state-note info-note > children expanded > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > parent > selection fill > name object-properties-section-dimmed > object-properties-section-separator > object-value-object value > children
-console-object-preview.html:13 Object {a: 0, b: 0, c: 2}a: 0b: 0c: 2__proto__: Object console-message > source-code > console-message-anchor > devtools-link > console-message-text > console-view-object-properties-section object-value-object source-code expanded > tree-outline-disclosure tree-outline-disclosure-hide-overflow > tree-outline source-code object-properties-section > parent object-properties-section-root-element expanded > selection fill > console-object-preview > object-description > object-properties-preview source-code > name > object-value-number > name > object-value-number > name > object-value-number > object-state-note info-note > children expanded > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > parent > selection fill > name object-properties-section-dimmed > object-properties-section-separator > object-value-object value > children
+console-object-preview.html:13 Object {a: 0, b: 0, c: 0}a: 0b: 0c: 2__proto__: Object console-message > source-code > console-message-anchor > devtools-link > console-message-text > console-view-object-properties-section object-value-object source-code expanded > tree-outline-disclosure tree-outline-disclosure-hide-overflow > tree-outline source-code object-properties-section > parent object-properties-section-root-element expanded > selection fill > console-object-preview > object-description > name > object-value-number > name > object-value-number > name > object-value-number > object-state-note info-note > children expanded > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > parent > selection fill > name object-properties-section-dimmed > object-properties-section-separator > object-value-object value > children
+console-object-preview.html:13 Object {a: 0, b: 0, c: 1}a: 0b: 0c: 2__proto__: Object console-message > source-code > console-message-anchor > devtools-link > console-message-text > console-view-object-properties-section object-value-object source-code expanded > tree-outline-disclosure tree-outline-disclosure-hide-overflow > tree-outline source-code object-properties-section > parent object-properties-section-root-element expanded > selection fill > console-object-preview > object-description > name > object-value-number > name > object-value-number > name > object-value-number > object-state-note info-note > children expanded > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > parent > selection fill > name object-properties-section-dimmed > object-properties-section-separator > object-value-object value > children
+console-object-preview.html:13 Object {a: 0, b: 0, c: 2}a: 0b: 0c: 2__proto__: Object console-message > source-code > console-message-anchor > devtools-link > console-message-text > console-view-object-properties-section object-value-object source-code expanded > tree-outline-disclosure tree-outline-disclosure-hide-overflow > tree-outline source-code object-properties-section > parent object-properties-section-root-element expanded > selection fill > console-object-preview > object-description > name > object-value-number > name > object-value-number > name > object-value-number > object-state-note info-note > children expanded > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > parent > selection fill > name object-properties-section-dimmed > object-properties-section-separator > object-value-object value > children
 console-object-preview.html:16 Mutating array in a loop console-message > source-code > console-message-anchor > devtools-link > console-message-text
-console-object-preview.html:20 (3) [0, 0, 0]0: 01: 02: 2length: 3__proto__: Array(0) console-message > source-code > console-message-anchor > devtools-link > console-message-text > console-view-object-properties-section object-value-array source-code expanded > tree-outline-disclosure tree-outline-disclosure-hide-overflow > tree-outline source-code object-properties-section > parent object-properties-section-root-element expanded > selection fill > console-object-preview > object-description > object-properties-preview source-code > object-value-number > object-value-number > object-value-number > object-state-note info-note > children expanded > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name object-properties-section-dimmed > object-properties-section-separator > object-value-number value > children > parent > selection fill > name object-properties-section-dimmed > object-properties-section-separator > object-value-array value > children
-console-object-preview.html:20 (3) [0, 0, 1]0: 01: 02: 2length: 3__proto__: Array(0) console-message > source-code > console-message-anchor > devtools-link > console-message-text > console-view-object-properties-section object-value-array source-code expanded > tree-outline-disclosure tree-outline-disclosure-hide-overflow > tree-outline source-code object-properties-section > parent object-properties-section-root-element expanded > selection fill > console-object-preview > object-description > object-properties-preview source-code > object-value-number > object-value-number > object-value-number > object-state-note info-note > children expanded > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name object-properties-section-dimmed > object-properties-section-separator > object-value-number value > children > parent > selection fill > name object-properties-section-dimmed > object-properties-section-separator > object-value-array value > children
-console-object-preview.html:20 (3) [0, 0, 2]0: 01: 02: 2length: 3__proto__: Array(0) console-message > source-code > console-message-anchor > devtools-link > console-message-text > console-view-object-properties-section object-value-array source-code expanded > tree-outline-disclosure tree-outline-disclosure-hide-overflow > tree-outline source-code object-properties-section > parent object-properties-section-root-element expanded > selection fill > console-object-preview > object-description > object-properties-preview source-code > object-value-number > object-value-number > object-value-number > object-state-note info-note > children expanded > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name object-properties-section-dimmed > object-properties-section-separator > object-value-number value > children > parent > selection fill > name object-properties-section-dimmed > object-properties-section-separator > object-value-array value > children
+console-object-preview.html:20 (3) [0, 0, 0]0: 01: 02: 2length: 3__proto__: Array(0) console-message > source-code > console-message-anchor > devtools-link > console-message-text > console-view-object-properties-section object-value-array source-code expanded > tree-outline-disclosure tree-outline-disclosure-hide-overflow > tree-outline source-code object-properties-section > parent object-properties-section-root-element expanded > selection fill > console-object-preview > object-description > object-value-number > object-value-number > object-value-number > object-state-note info-note > children expanded > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name object-properties-section-dimmed > object-properties-section-separator > object-value-number value > children > parent > selection fill > name object-properties-section-dimmed > object-properties-section-separator > object-value-array value > children
+console-object-preview.html:20 (3) [0, 0, 1]0: 01: 02: 2length: 3__proto__: Array(0) console-message > source-code > console-message-anchor > devtools-link > console-message-text > console-view-object-properties-section object-value-array source-code expanded > tree-outline-disclosure tree-outline-disclosure-hide-overflow > tree-outline source-code object-properties-section > parent object-properties-section-root-element expanded > selection fill > console-object-preview > object-description > object-value-number > object-value-number > object-value-number > object-state-note info-note > children expanded > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name object-properties-section-dimmed > object-properties-section-separator > object-value-number value > children > parent > selection fill > name object-properties-section-dimmed > object-properties-section-separator > object-value-array value > children
+console-object-preview.html:20 (3) [0, 0, 2]0: 01: 02: 2length: 3__proto__: Array(0) console-message > source-code > console-message-anchor > devtools-link > console-message-text > console-view-object-properties-section object-value-array source-code expanded > tree-outline-disclosure tree-outline-disclosure-hide-overflow > tree-outline source-code object-properties-section > parent object-properties-section-root-element expanded > selection fill > console-object-preview > object-description > object-value-number > object-value-number > object-value-number > object-state-note info-note > children expanded > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name object-properties-section-dimmed > object-properties-section-separator > object-value-number value > children > parent > selection fill > name object-properties-section-dimmed > object-properties-section-separator > object-value-array value > children
 console-object-preview.html:23 Object with many properties console-message > source-code > console-message-anchor > devtools-link > console-message-text
-console-object-preview.html:28 Object {property_0: 0, property_1: 1, property_2: 2, property_3: 3, property_4: 4…}property_0: 0property_1: 1property_2: 2property_3: 3property_4: 4property_5: 5property_6: 6property_7: 7property_8: 8property_9: 9__proto__: Object console-message > source-code > console-message-anchor > devtools-link > console-message-text > console-view-object-properties-section object-value-object source-code expanded > tree-outline-disclosure tree-outline-disclosure-hide-overflow > tree-outline source-code object-properties-section > parent object-properties-section-root-element expanded > selection fill > console-object-preview > object-description > object-properties-preview source-code > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > object-state-note info-note > children expanded > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > parent > selection fill > name object-properties-section-dimmed > object-properties-section-separator > object-value-object value > children
+console-object-preview.html:28 Object {property_0: 0, property_1: 1, property_2: 2, property_3: 3, property_4: 4…}property_0: 0property_1: 1property_2: 2property_3: 3property_4: 4property_5: 5property_6: 6property_7: 7property_8: 8property_9: 9__proto__: Object console-message > source-code > console-message-anchor > devtools-link > console-message-text > console-view-object-properties-section object-value-object source-code expanded > tree-outline-disclosure tree-outline-disclosure-hide-overflow > tree-outline source-code object-properties-section > parent object-properties-section-root-element expanded > selection fill > console-object-preview > object-description > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > object-state-note info-note > children expanded > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > parent > selection fill > name object-properties-section-dimmed > object-properties-section-separator > object-value-object value > children
 console-object-preview.html:30 Array with many properties console-message > source-code > console-message-anchor > devtools-link > console-message-text
-console-object-preview.html:35 (2) [0, 1, property_0: 0, property_1: 1, property_2: 2, property_3: 3, property_4: 4…]0: 01: 1property_0: 0property_1: 1property_2: 2property_3: 3property_4: 4property_5: 5property_6: 6property_7: 7property_8: 8property_9: 9length: 2__proto__: Array(0) console-message > source-code > console-message-anchor > devtools-link > console-message-text > console-view-object-properties-section object-value-array source-code expanded > tree-outline-disclosure tree-outline-disclosure-hide-overflow > tree-outline source-code object-properties-section > parent object-properties-section-root-element expanded > selection fill > console-object-preview > object-description > object-properties-preview source-code > object-value-number > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > object-state-note info-note > children expanded > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name object-properties-section-dimmed > object-properties-section-separator > object-value-number value > children > parent > selection fill > name object-properties-section-dimmed > object-properties-section-separator > object-value-array value > children
+console-object-preview.html:35 (2) [0, 1, property_0: 0, property_1: 1, property_2: 2, property_3: 3, property_4: 4…]0: 01: 1property_0: 0property_1: 1property_2: 2property_3: 3property_4: 4property_5: 5property_6: 6property_7: 7property_8: 8property_9: 9length: 2__proto__: Array(0) console-message > source-code > console-message-anchor > devtools-link > console-message-text > console-view-object-properties-section object-value-array source-code expanded > tree-outline-disclosure tree-outline-disclosure-hide-overflow > tree-outline source-code object-properties-section > parent object-properties-section-root-element expanded > selection fill > console-object-preview > object-description > object-value-number > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > object-state-note info-note > children expanded > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name object-properties-section-dimmed > object-properties-section-separator > object-value-number value > children > parent > selection fill > name object-properties-section-dimmed > object-properties-section-separator > object-value-array value > children
 console-object-preview.html:37 Array with gaps and overflow console-message > source-code > console-message-anchor > devtools-link > console-message-text
-console-object-preview.html:42 (5733) [32: 0, 89: 1, 146: 2, 203: 3, 260: 4, 317: 5, 374: 6, 431: 7, 488: 8, 545: 9, 602: 10, 659: 11, 716: 12, 773: 13, 830: 14, 887: 15, 944: 16, 1001: 17, 1058: 18, 1115: 19, 1172: 20, 1229: 21, 1286: 22, 1343: 23, 1400: 24, 1457: 25, 1514: 26, 1571: 27, 1628: 28, 1685: 29, 1742: 30, 1799: 31, 1856: 32, 1913: 33, 1970: 34, 2027: 35, 2084: 36, 2141: 37, 2198: 38, 2255: 39, 2312: 40, 2369: 41, 2426: 42, 2483: 43, 2540: 44, 2597: 45, 2654: 46, 2711: 47, 2768: 48, 2825: 49, 2882: 50, 2939: 51, 2996: 52, 3053: 53, 3110: 54, 3167: 55, 3224: 56, 3281: 57, 3338: 58, 3395: 59, 3452: 60, 3509: 61, 3566: 62, 3623: 63, 3680: 64, 3737: 65, 3794: 66, 3851: 67, 3908: 68, 3965: 69, 4022: 70, 4079: 71, 4136: 72, 4193: 73, 4250: 74, 4307: 75, 4364: 76, 4421: 77, 4478: 78, 4535: 79, 4592: 80, 4649: 81, 4706: 82, 4763: 83, 4820: 84, 4877: 85, 4934: 86, 4991: 87, 5048: 88, 5105: 89, 5162: 90, 5219: 91, 5276: 92, 5333: 93, 5390: 94, 5447: 95, 5504: 96, 5561: 97, 5618: 98, 5675: 99…][32 … 5675]573 console-message > source-code > console-message-anchor > devtools-link > console-message-text > console-view-object-properties-section object-value-array source-code expanded > tree-outline-disclosure tree-outline-disclosure-hide-overflow > tree-outline source-code object-properties-section > parent object-properties-section-root-element expanded > selection fill > console-object-preview > object-description > object-properties-preview source-code > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > object-state-note info-note > children expanded > parent object-properties-section-name > selection fill > tree-element-title > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name object-properties-section-dimmed > object-properties-section-separator > object-value-number value > children > parent > selection fill > name object-properties-section-dimmed > object-properties-section-separator > object-value-array value > children
+console-object-preview.html:42 (5733) [32: 0, 89: 1, 146: 2, 203: 3, 260: 4, 317: 5, 374: 6, 431: 7, 488: 8, 545: 9, 602: 10, 659: 11, 716: 12, 773: 13, 830: 14, 887: 15, 944: 16, 1001: 17, 1058: 18, 1115: 19, 1172: 20, 1229: 21, 1286: 22, 1343: 23, 1400: 24, 1457: 25, 1514: 26, 1571: 27, 1628: 28, 1685: 29, 1742: 30, 1799: 31, 1856: 32, 1913: 33, 1970: 34, 2027: 35, 2084: 36, 2141: 37, 2198: 38, 2255: 39, 2312: 40, 2369: 41, 2426: 42, 2483: 43, 2540: 44, 2597: 45, 2654: 46, 2711: 47, 2768: 48, 2825: 49, 2882: 50, 2939: 51, 2996: 52, 3053: 53, 3110: 54, 3167: 55, 3224: 56, 3281: 57, 3338: 58, 3395: 59, 3452: 60, 3509: 61, 3566: 62, 3623: 63, 3680: 64, 3737: 65, 3794: 66, 3851: 67, 3908: 68, 3965: 69, 4022: 70, 4079: 71, 4136: 72, 4193: 73, 4250: 74, 4307: 75, 4364: 76, 4421: 77, 4478: 78, 4535: 79, 4592: 80, 4649: 81, 4706: 82, 4763: 83, 4820: 84, 4877: 85, 4934: 86, 4991: 87, 5048: 88, 5105: 89, 5162: 90, 5219: 91, 5276: 92, 5333: 93, 5390: 94, 5447: 95, 5504: 96, 5561: 97, 5618: 98, 5675: 99…][32 … 5675]573 console-message > source-code > console-message-anchor > devtools-link > console-message-text > console-view-object-properties-section object-value-array source-code expanded > tree-outline-disclosure tree-outline-disclosure-hide-overflow > tree-outline source-code object-properties-section > parent object-properties-section-root-element expanded > selection fill > console-object-preview > object-description > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > object-state-note info-note > children expanded > parent object-properties-section-name > selection fill > tree-element-title > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name object-properties-section-dimmed > object-properties-section-separator > object-value-number value > children > parent > selection fill > name object-properties-section-dimmed > object-properties-section-separator > object-value-array value > children
 console-object-preview.html:44 Array with gaps without overflow console-message > source-code > console-message-anchor > devtools-link > console-message-text
-console-object-preview.html:49 (5619) [undefined × 32, 0, undefined × 56, 1, undefined × 56, 2, undefined × 56, 3, undefined × 56, 4, undefined × 56, 5, undefined × 56, 6, undefined × 56, 7, undefined × 56, 8, undefined × 56, 9, undefined × 56, 10, undefined × 56, 11, undefined × 56, 12, undefined × 56, 13, undefined × 56, 14, undefined × 56, 15, undefined × 56, 16, undefined × 56, 17, undefined × 56, 18, undefined × 56, 19, undefined × 56, 20, undefined × 56, 21, undefined × 56, 22, undefined × 56, 23, undefined × 56, 24, undefined × 56, 25, undefined × 56, 26, undefined × 56, 27, undefined × 56, 28, undefined × 56, 29, undefined × 56, 30, undefined × 56, 31, undefined × 56, 32, undefined × 56, 33, undefined × 56, 34, undefined × 56, 35, undefined × 56, 36, undefined × 56, 37, undefined × 56, 38, undefined × 56, 39, undefined × 56, 40, undefined × 56, 41, undefined × 56, 42, undefined × 56, 43, undefined × 56, 44, undefined × 56, 45, undefined × 56, 46, undefined × 56, 47, undefined × 56, 48, undefined × 56, console-message > source-code > console-message-anchor > devtools-link > console-message-text > console-view-object-properties-section object-value-array source-code expanded > tree-outline-disclosure tree-outline-disclosure-hide-overflow > tree-outline source-code object-properties-section > parent object-properties-section-root-element expanded > selection fill > console-object-preview > object-description > object-properties-preview source-code > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-state-note info-note > children expanded > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name object-properties-section-dimmed > object-properties-section-separator > object-value-number value > children > parent > selection fill > name object-properties-section-dimmed > object-properties-section-separator > object-value-array value > children
+console-object-preview.html:49 (5619) [undefined × 32, 0, undefined × 56, 1, undefined × 56, 2, undefined × 56, 3, undefined × 56, 4, undefined × 56, 5, undefined × 56, 6, undefined × 56, 7, undefined × 56, 8, undefined × 56, 9, undefined × 56, 10, undefined × 56, 11, undefined × 56, 12, undefined × 56, 13, undefined × 56, 14, undefined × 56, 15, undefined × 56, 16, undefined × 56, 17, undefined × 56, 18, undefined × 56, 19, undefined × 56, 20, undefined × 56, 21, undefined × 56, 22, undefined × 56, 23, undefined × 56, 24, undefined × 56, 25, undefined × 56, 26, undefined × 56, 27, undefined × 56, 28, undefined × 56, 29, undefined × 56, 30, undefined × 56, 31, undefined × 56, 32, undefined × 56, 33, undefined × 56, 34, undefined × 56, 35, undefined × 56, 36, undefined × 56, 37, undefined × 56, 38, undefined × 56, 39, undefined × 56, 40, undefined × 56, 41, undefined × 56, 42, undefined × 56, 43, undefined × 56, 44, undefined × 56, 45, undefined × 56, 46, undefined × 56, 47, undefined × 56, 48, undefined × 56, console-message > source-code > console-message-anchor > devtools-link > console-message-text > console-view-object-properties-section object-value-array source-code expanded > tree-outline-disclosure tree-outline-disclosure-hide-overflow > tree-outline source-code object-properties-section > parent object-properties-section-root-element expanded > selection fill > console-object-preview > object-description > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-value-undefined > object-value-number > object-state-note info-note > children expanded > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name object-properties-section-dimmed > object-properties-section-separator > object-value-number value > children > parent > selection fill > name object-properties-section-dimmed > object-properties-section-separator > object-value-array value > children
 console-object-preview.html:51 Object with proto console-message > source-code > console-message-anchor > devtools-link > console-message-text
-console-object-preview.html:54 Object {d: 1}d: 1__proto__: Object console-message > source-code > console-message-anchor > devtools-link > console-message-text > console-view-object-properties-section object-value-object source-code expanded > tree-outline-disclosure tree-outline-disclosure-hide-overflow > tree-outline source-code object-properties-section > parent object-properties-section-root-element expanded > selection fill > console-object-preview > object-description > object-properties-preview source-code > name > object-value-number > object-state-note info-note > children expanded > selection fill > name > object-properties-section-separator > object-value-number value > children > parent > selection fill > name object-properties-section-dimmed > object-properties-section-separator > object-value-object value > children
+console-object-preview.html:54 Object {d: 1}d: 1__proto__: Object console-message > source-code > console-message-anchor > devtools-link > console-message-text > console-view-object-properties-section object-value-object source-code expanded > tree-outline-disclosure tree-outline-disclosure-hide-overflow > tree-outline source-code object-properties-section > parent object-properties-section-root-element expanded > selection fill > console-object-preview > object-description > name > object-value-number > object-state-note info-note > children expanded > selection fill > name > object-properties-section-separator > object-value-number value > children > parent > selection fill > name object-properties-section-dimmed > object-properties-section-separator > object-value-object value > children
 console-object-preview.html:56 Sparse array console-message > source-code > console-message-anchor > devtools-link > console-message-text
-console-object-preview.html:59 (150) [undefined × 50, 50, undefined × 99]50: 50length: 150__proto__: Array(0) console-message > source-code > console-message-anchor > devtools-link > console-message-text > console-view-object-properties-section object-value-array source-code expanded > tree-outline-disclosure tree-outline-disclosure-hide-overflow > tree-outline source-code object-properties-section > parent object-properties-section-root-element expanded > selection fill > console-object-preview > object-description > object-properties-preview source-code > object-value-undefined > object-value-number > object-value-undefined > object-state-note info-note > children expanded > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name object-properties-section-dimmed > object-properties-section-separator > object-value-number value > children > parent > selection fill > name object-properties-section-dimmed > object-properties-section-separator > object-value-array value > children
+console-object-preview.html:59 (150) [undefined × 50, 50, undefined × 99]50: 50length: 150__proto__: Array(0) console-message > source-code > console-message-anchor > devtools-link > console-message-text > console-view-object-properties-section object-value-array source-code expanded > tree-outline-disclosure tree-outline-disclosure-hide-overflow > tree-outline source-code object-properties-section > parent object-properties-section-root-element expanded > selection fill > console-object-preview > object-description > object-value-undefined > object-value-number > object-value-undefined > object-state-note info-note > children expanded > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name object-properties-section-dimmed > object-properties-section-separator > object-value-number value > children > parent > selection fill > name object-properties-section-dimmed > object-properties-section-separator > object-value-array value > children
 console-object-preview.html:61 Dense array with indexes and propeties console-message > source-code > console-message-anchor > devtools-link > console-message-text
-console-object-preview.html:67 (150) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99…][0 … 99][100 … 149]property_0: 0property_1: 1property_2: 2property_3: 3property_4: 4property_5: 5property_6: 6property_7: 7property_8: 8property_9: 9property_10: 10property_11: 11property_12: 12property_13: 13property_14: 14property_15: 15property_16: 16property_17: 17property_18: 18property_19: 19property_20: 20property_21: 21property_22: 22property_23: 23property_24: 24property_25: 25property_26: 26property_27: 27property_28: 28property_29: 29property_30: 30property_31: 31property_32: 32property_33: 33property_34: 34property_35: 35property_36: 36property_37: 37property_38: 38property_39: console-message > source-code > console-message-anchor > devtools-link > console-message-text > console-view-object-properties-section object-value-array source-code expanded > tree-outline-disclosure tree-outline-disclosure-hide-overflow > tree-outline source-code object-properties-section > parent object-properties-section-root-element expanded > selection fill > console-object-preview > object-description > object-properties-preview source-code > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-state-note info-note > children expanded > parent object-properties-section-name > selection fill > tree-element-title > children > parent object-properties-section-name > selection fill > tree-element-title > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name object-properties-section-dimmed > object-properties-section-separator > object-value-number value > children > parent > selection fill > name object-properties-section-dimmed > object-properties-section-separator > object-value-array value > children
+console-object-preview.html:67 (150) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99…][0 … 99][100 … 149]property_0: 0property_1: 1property_2: 2property_3: 3property_4: 4property_5: 5property_6: 6property_7: 7property_8: 8property_9: 9property_10: 10property_11: 11property_12: 12property_13: 13property_14: 14property_15: 15property_16: 16property_17: 17property_18: 18property_19: 19property_20: 20property_21: 21property_22: 22property_23: 23property_24: 24property_25: 25property_26: 26property_27: 27property_28: 28property_29: 29property_30: 30property_31: 31property_32: 32property_33: 33property_34: 34property_35: 35property_36: 36property_37: 37property_38: 38property_39: console-message > source-code > console-message-anchor > devtools-link > console-message-text > console-view-object-properties-section object-value-array source-code expanded > tree-outline-disclosure tree-outline-disclosure-hide-overflow > tree-outline source-code object-properties-section > parent object-properties-section-root-element expanded > selection fill > console-object-preview > object-description > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-value-number > object-state-note info-note > children expanded > parent object-properties-section-name > selection fill > tree-element-title > children > parent object-properties-section-name > selection fill > tree-element-title > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name object-properties-section-dimmed > object-properties-section-separator > object-value-number value > children > parent > selection fill > name object-properties-section-dimmed > object-properties-section-separator > object-value-array value > children
 console-object-preview.html:69 Object with properties containing whitespaces console-message > source-code > console-message-anchor > devtools-link > console-message-text
-console-object-preview.html:76 Object {" a b ": " a b ", c d: "c d", "": "", "  ": "  ", "a↵↵b↵c": "a↵↵b↵c"}"": """  ": "  "" a b ": " a b ""a↵↵b↵c": "a↵↵b↵c"c d: "c d"__proto__: Object console-message > source-code > console-message-anchor > devtools-link > console-message-text > console-view-object-properties-section object-value-object source-code expanded > tree-outline-disclosure tree-outline-disclosure-hide-overflow > tree-outline source-code object-properties-section > parent object-properties-section-root-element expanded > selection fill > console-object-preview > object-description > object-properties-preview source-code > name > object-value-string > name > object-value-string > name > object-value-string > name > object-value-string > name > object-value-string > object-state-note info-note > children expanded > selection fill > name > object-properties-section-separator > object-value-string value > object-value-string-quote > object-value-string-quote > children > selection fill > name > object-properties-section-separator > object-value-string value > object-value-string-quote > object-value-string-quote > children > selection fill > name > object-properties-section-separator > object-value-string value > object-value-string-quote > object-value-string-quote > children > selection fill > name > object-properties-section-separator > object-value-string value > object-value-string-quote > object-value-string-quote > children > selection fill > name > object-properties-section-separator > object-value-string value > object-value-string-quote > object-value-string-quote > children > parent > selection fill > name object-properties-section-dimmed > object-properties-section-separator > object-value-object value > children
+console-object-preview.html:76 Object {" a b ": " a b ", c d: "c d", "": "", "  ": "  ", "a↵↵b↵c": "a↵↵b↵c"}"": """  ": "  "" a b ": " a b ""a↵↵b↵c": "a↵↵b↵c"c d: "c d"__proto__: Object console-message > source-code > console-message-anchor > devtools-link > console-message-text > console-view-object-properties-section object-value-object source-code expanded > tree-outline-disclosure tree-outline-disclosure-hide-overflow > tree-outline source-code object-properties-section > parent object-properties-section-root-element expanded > selection fill > console-object-preview > object-description > name > object-value-string > name > object-value-string > name > object-value-string > name > object-value-string > name > object-value-string > object-state-note info-note > children expanded > selection fill > name > object-properties-section-separator > object-value-string value > object-value-string-quote > object-value-string-quote > children > selection fill > name > object-properties-section-separator > object-value-string value > object-value-string-quote > object-value-string-quote > children > selection fill > name > object-properties-section-separator > object-value-string value > object-value-string-quote > object-value-string-quote > children > selection fill > name > object-properties-section-separator > object-value-string value > object-value-string-quote > object-value-string-quote > children > selection fill > name > object-properties-section-separator > object-value-string value > object-value-string-quote > object-value-string-quote > children > parent > selection fill > name object-properties-section-dimmed > object-properties-section-separator > object-value-object value > children
 console-object-preview.html:78 Object with a document.all property console-message > source-code > console-message-anchor > devtools-link > console-message-text
-console-object-preview.html:79 Object {all: HTMLAllCollection(7)}all: HTMLAllCollection(7)__proto__: Object console-message > source-code > console-message-anchor > devtools-link > console-message-text > console-view-object-properties-section object-value-object source-code expanded > tree-outline-disclosure tree-outline-disclosure-hide-overflow > tree-outline source-code object-properties-section > parent object-properties-section-root-element expanded > selection fill > console-object-preview > object-description > object-properties-preview source-code > name > object-value-array > object-state-note info-note > children expanded > parent > selection fill > name > object-properties-section-separator > object-value-array value > children > parent > selection fill > name object-properties-section-dimmed > object-properties-section-separator > object-value-object value > children
+console-object-preview.html:79 Object {all: HTMLAllCollection(7)}all: HTMLAllCollection(7)__proto__: Object console-message > source-code > console-message-anchor > devtools-link > console-message-text > console-view-object-properties-section object-value-object source-code expanded > tree-outline-disclosure tree-outline-disclosure-hide-overflow > tree-outline source-code object-properties-section > parent object-properties-section-root-element expanded > selection fill > console-object-preview > object-description > name > object-value-array > object-state-note info-note > children expanded > parent > selection fill > name > object-properties-section-separator > object-value-array value > children > parent > selection fill > name object-properties-section-dimmed > object-properties-section-separator > object-value-object value > children
 console-object-preview.html:81 Object with special numbers console-message > source-code > console-message-anchor > devtools-link > console-message-text
-console-object-preview.html:83 Object {nan: NaN, posInf: Infinity, negInf: -Infinity, negZero: -0}nan: NaNnegInf: -InfinitynegZero: -0posInf: Infinity__proto__: Object console-message > source-code > console-message-anchor > devtools-link > console-message-text > console-view-object-properties-section object-value-object source-code expanded > tree-outline-disclosure tree-outline-disclosure-hide-overflow > tree-outline source-code object-properties-section > parent object-properties-section-root-element expanded > selection fill > console-object-preview > object-description > object-properties-preview source-code > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > object-state-note info-note > children expanded > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > parent > selection fill > name object-properties-section-dimmed > object-properties-section-separator > object-value-object value > children
+console-object-preview.html:83 Object {nan: NaN, posInf: Infinity, negInf: -Infinity, negZero: -0}nan: NaNnegInf: -InfinitynegZero: -0posInf: Infinity__proto__: Object console-message > source-code > console-message-anchor > devtools-link > console-message-text > console-view-object-properties-section object-value-object source-code expanded > tree-outline-disclosure tree-outline-disclosure-hide-overflow > tree-outline source-code object-properties-section > parent object-properties-section-root-element expanded > selection fill > console-object-preview > object-description > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > object-state-note info-note > children expanded > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > parent > selection fill > name object-properties-section-dimmed > object-properties-section-separator > object-value-object value > children
 console-object-preview.html:85 Object with exactly 5 properties: expected to be lossless console-message > source-code > console-message-anchor > devtools-link > console-message-text
-console-object-preview.html:86 Object {a: 1, b: 2, c: 3, d: 4, e: 5}a: 1b: 2c: 3d: 4e: 5__proto__: Object console-message > source-code > console-message-anchor > devtools-link > console-message-text > console-view-object-properties-section object-value-object source-code expanded > tree-outline-disclosure tree-outline-disclosure-hide-overflow > tree-outline source-code object-properties-section > parent object-properties-section-root-element expanded > selection fill > console-object-preview > object-description > object-properties-preview source-code > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > object-state-note info-note > children expanded > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > parent > selection fill > name object-properties-section-dimmed > object-properties-section-separator > object-value-object value > children
-console-object-preview.html:88 Object {null: null, undef: undefined, regexp: /^[regexp]$/g, bool: false}bool: falsenull: nullregexp: /^[regexp]$/gundef: undefined__proto__: Object console-message > source-code > console-message-anchor > devtools-link > console-message-text > console-view-object-properties-section object-value-object source-code expanded > tree-outline-disclosure tree-outline-disclosure-hide-overflow > tree-outline source-code object-properties-section > parent object-properties-section-root-element expanded > selection fill > console-object-preview > object-description > object-properties-preview source-code > name > object-value-null > name > object-value-undefined > name > object-value-regexp > name > object-value-boolean > object-state-note info-note > children expanded > selection fill > name > object-properties-section-separator > object-value-boolean value > children > selection fill > name > object-properties-section-separator > object-value-null value > children > parent > selection fill > name > object-properties-section-separator > object-value-regexp value > children > selection fill > name > object-properties-section-separator > object-value-undefined value > children > parent > selection fill > name object-properties-section-dimmed > object-properties-section-separator > object-value-object value > children
+console-object-preview.html:86 Object {a: 1, b: 2, c: 3, d: 4, e: 5}a: 1b: 2c: 3d: 4e: 5__proto__: Object console-message > source-code > console-message-anchor > devtools-link > console-message-text > console-view-object-properties-section object-value-object source-code expanded > tree-outline-disclosure tree-outline-disclosure-hide-overflow > tree-outline source-code object-properties-section > parent object-properties-section-root-element expanded > selection fill > console-object-preview > object-description > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > name > object-value-number > object-state-note info-note > children expanded > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > selection fill > name > object-properties-section-separator > object-value-number value > children > parent > selection fill > name object-properties-section-dimmed > object-properties-section-separator > object-value-object value > children
+console-object-preview.html:88 Object {null: null, undef: undefined, regexp: /^[regexp]$/g, bool: false}bool: falsenull: nullregexp: /^[regexp]$/gundef: undefined__proto__: Object console-message > source-code > console-message-anchor > devtools-link > console-message-text > console-view-object-properties-section object-value-object source-code expanded > tree-outline-disclosure tree-outline-disclosure-hide-overflow > tree-outline source-code object-properties-section > parent object-properties-section-root-element expanded > selection fill > console-object-preview > object-description > name > object-value-null > name > object-value-undefined > name > object-value-regexp > name > object-value-boolean > object-state-note info-note > children expanded > selection fill > name > object-properties-section-separator > object-value-boolean value > children > selection fill > name > object-properties-section-separator > object-value-null value > children > parent > selection fill > name > object-properties-section-separator > object-value-regexp value > children > selection fill > name > object-properties-section-separator > object-value-undefined value > children > parent > selection fill > name object-properties-section-dimmed > object-properties-section-separator > object-value-object value > children
 
diff --git a/third_party/WebKit/LayoutTests/inspector/console/console-proxy-expected.txt b/third_party/WebKit/LayoutTests/inspector/console/console-proxy-expected.txt
index 645e5fd..fcf39382 100644
--- a/third_party/WebKit/LayoutTests/inspector/console/console-proxy-expected.txt
+++ b/third_party/WebKit/LayoutTests/inspector/console/console-proxy-expected.txt
@@ -2,11 +2,11 @@
 CONSOLE MESSAGE: line 23: [object Proxy]
 Tests that console logging dumps proxy properly.
 
-console-proxy.html:21 Proxy {boo: 42, foo: 43} console-message > source-code > console-message-anchor > devtools-link > console-message-text > console-view-object-properties-section object-value-proxy source-code > tree-outline-disclosure tree-outline-disclosure-hide-overflow > tree-outline source-code object-properties-section > parent object-properties-section-root-element > selection fill > console-object-preview > object-description > object-properties-preview source-code > name > object-value-number > name > object-value-number > object-state-note info-note > children
-console-proxy.html:23 Proxy {boo: 42, foo: 43} console-message > source-code > console-message-anchor > devtools-link > console-message-text > console-view-object-properties-section object-value-proxy source-code > tree-outline-disclosure tree-outline-disclosure-hide-overflow > tree-outline source-code object-properties-section > parent object-properties-section-root-element > selection fill > console-object-preview > object-description > object-properties-preview source-code > name > object-value-number > name > object-value-number > object-state-note info-note > children
+console-proxy.html:21 Proxy {boo: 42, foo: 43} console-message > source-code > console-message-anchor > devtools-link > console-message-text > console-view-object-properties-section object-value-proxy source-code > tree-outline-disclosure tree-outline-disclosure-hide-overflow > tree-outline source-code object-properties-section > parent object-properties-section-root-element > selection fill > console-object-preview > object-description > name > object-value-number > name > object-value-number > object-state-note info-note > children
+console-proxy.html:23 Proxy {boo: 42, foo: 43} console-message > source-code > console-message-anchor > devtools-link > console-message-text > console-view-object-properties-section object-value-proxy source-code > tree-outline-disclosure tree-outline-disclosure-hide-overflow > tree-outline source-code object-properties-section > parent object-properties-section-root-element > selection fill > console-object-preview > object-description > name > object-value-number > name > object-value-number > object-state-note info-note > children
 window.accessedGet = false
 info-note display: inline-block
-console-proxy.html:21 Proxy {boo: 42, foo: 43}[[Handler]]: Object[[Target]]: Object[[IsRevoked]]: false console-message > source-code > console-message-anchor > devtools-link > console-message-text > console-view-object-properties-section object-value-proxy source-code expanded > tree-outline-disclosure tree-outline-disclosure-hide-overflow > tree-outline source-code object-properties-section > parent object-properties-section-root-element expanded > selection fill > console-object-preview > object-description > object-properties-preview source-code > name > object-value-number > name > object-value-number > object-state-note info-note > children expanded > parent > selection fill > name > object-properties-section-separator > object-value-object value > children > parent > selection fill > name > object-properties-section-separator > object-value-object value > children > selection fill > name > object-properties-section-separator > object-value-boolean value > children
-console-proxy.html:23 Proxy {boo: 42, foo: 43}[[Handler]]: Object[[Target]]: Proxy[[IsRevoked]]: false console-message > source-code > console-message-anchor > devtools-link > console-message-text > console-view-object-properties-section object-value-proxy source-code expanded > tree-outline-disclosure tree-outline-disclosure-hide-overflow > tree-outline source-code object-properties-section > parent object-properties-section-root-element expanded > selection fill > console-object-preview > object-description > object-properties-preview source-code > name > object-value-number > name > object-value-number > object-state-note info-note > children expanded > parent > selection fill > name > object-properties-section-separator > object-value-object value > children > parent > selection fill > name > object-properties-section-separator > object-value-proxy value > children > selection fill > name > object-properties-section-separator > object-value-boolean value > children
+console-proxy.html:21 Proxy {boo: 42, foo: 43}[[Handler]]: Object[[Target]]: Object[[IsRevoked]]: false console-message > source-code > console-message-anchor > devtools-link > console-message-text > console-view-object-properties-section object-value-proxy source-code expanded > tree-outline-disclosure tree-outline-disclosure-hide-overflow > tree-outline source-code object-properties-section > parent object-properties-section-root-element expanded > selection fill > console-object-preview > object-description > name > object-value-number > name > object-value-number > object-state-note info-note > children expanded > parent > selection fill > name > object-properties-section-separator > object-value-object value > children > parent > selection fill > name > object-properties-section-separator > object-value-object value > children > selection fill > name > object-properties-section-separator > object-value-boolean value > children
+console-proxy.html:23 Proxy {boo: 42, foo: 43}[[Handler]]: Object[[Target]]: Proxy[[IsRevoked]]: false console-message > source-code > console-message-anchor > devtools-link > console-message-text > console-view-object-properties-section object-value-proxy source-code expanded > tree-outline-disclosure tree-outline-disclosure-hide-overflow > tree-outline source-code object-properties-section > parent object-properties-section-root-element expanded > selection fill > console-object-preview > object-description > name > object-value-number > name > object-value-number > object-state-note info-note > children expanded > parent > selection fill > name > object-properties-section-separator > object-value-object value > children > parent > selection fill > name > object-properties-section-separator > object-value-proxy value > children > selection fill > name > object-properties-section-separator > object-value-boolean value > children
 window.accessedGet = false
 
diff --git a/third_party/WebKit/LayoutTests/inspector/console/console-save-to-temp-var-expected.txt b/third_party/WebKit/LayoutTests/inspector/console/console-save-to-temp-var-expected.txt
index 9d04197..3666ebd8 100644
--- a/third_party/WebKit/LayoutTests/inspector/console/console-save-to-temp-var-expected.txt
+++ b/third_party/WebKit/LayoutTests/inspector/console/console-save-to-temp-var-expected.txt
@@ -20,9 +20,9 @@
 temp13
 Object {foo: "bar"}
 temp14
-(4) [1, 2, 3, 4, callee: ƒ, Symbol(Symbol.iterator): ƒ]
+(4) [1, 2, 3, 4, callee: function, Symbol(Symbol.iterator): function]
 temp15
-ƒ func() {}
+function func() {}
 temp16
 Error: errr
 
diff --git a/third_party/WebKit/LayoutTests/inspector/console/console-tainted-globals-expected.txt b/third_party/WebKit/LayoutTests/inspector/console/console-tainted-globals-expected.txt
index 550766d..a666744 100644
--- a/third_party/WebKit/LayoutTests/inspector/console/console-tainted-globals-expected.txt
+++ b/third_party/WebKit/LayoutTests/inspector/console/console-tainted-globals-expected.txt
@@ -9,23 +9,23 @@
 testOverriddenArrayPushAndMathMax()
 (3) [1, 2, 3]
 testOverriddenConstructorName()
-Object {constructor: {…}}
+Object {constructor: Object}
 testThrowConstructorName()
 Object {}
 testOverriddenIsFinite()
-(2) ["arg1", "arg2", callee: ƒ, Symbol(Symbol.iterator): ƒ]
+(2) ["arg1", "arg2", callee: function, Symbol(Symbol.iterator): function]
 testOverriddenError()
 Object {result: "PASS"}
 restoreError()
 Object {result: "PASS"}
 testOverriddenToString(function func() {}, true)
-ƒ #<Function>
+function #<Function>
 testOverriddenToString(function func() {}, false)
-ƒ #<Function>
+function #<Function>
 testOverriddenToString(new Function, true)
-ƒ #<Function>
+function #<Function>
 testOverriddenToString(new Function, false)
-ƒ #<Function>
+function #<Function>
 testOverriddenToString(/^regex$/, true)
 #<RegExp>
 testOverriddenToString(/^regex$/, false)
@@ -35,11 +35,11 @@
 testOverriddenToString(new Date, false)
 #<Date>
 testOverriddenToString({}, true)
-Object {toString: ƒ, valueOf: ƒ}
+Object {toString: function, valueOf: function}
 testOverriddenToString({}, false)
-Object {toString: ƒ, valueOf: ƒ}
+Object {toString: function, valueOf: function}
 testOverriddenToString(new Number(1), true)
-Number {[[PrimitiveValue]]: 1, toString: ƒ, valueOf: ƒ}
+Number {[[PrimitiveValue]]: 1, toString: function, valueOf: function}
 testOverriddenToString(new Number(1), false)
-Number {[[PrimitiveValue]]: 1, toString: ƒ, valueOf: ƒ}
+Number {[[PrimitiveValue]]: 1, toString: function, valueOf: function}
 
diff --git a/third_party/WebKit/LayoutTests/inspector/extensions/extensions-sidebar-expected.txt b/third_party/WebKit/LayoutTests/inspector/extensions/extensions-sidebar-expected.txt
index f34336a..e69b49d3 100644
--- a/third_party/WebKit/LayoutTests/inspector/extensions/extensions-sidebar-expected.txt
+++ b/third_party/WebKit/LayoutTests/inspector/extensions/extensions-sidebar-expected.txt
@@ -6,7 +6,7 @@
 Got onShown(), frame defined
 Got onShown(), frame not defined
 RUNNING TEST: extension_testElementsSidebarSetExpression
-elements sidebar content: titlef0: "expression"f1: undefinedf2: nullf3: Objectf4: Array(0)f5: Array(3)f6: Objectf7: 42f8: Locationf9: HTMLCollection(1)f10: ƒ ()f11: "foo"__proto__: Object
+elements sidebar content: titlef0: "expression"f1: undefinedf2: nullf3: Objectf4: Array(0)f5: Array(3)f6: Objectf7: 42f8: Locationf9: HTMLCollection(1)f10: function ()f11: "foo"__proto__: Object
 RUNNING TEST: extension_testElementsSidebarSetObject
 Watch sidebar created, callback arguments dump follows:
 {
@@ -47,7 +47,7 @@
 Got onShown(), frame defined
 Got onShown(), frame not defined
 RUNNING TEST: extension_testSourcesSidebarSetExpression
-sources sidebar content: titlef0: "expression"f1: undefinedf2: nullf3: Objectf4: Array(0)f5: Array(3)f6: Objectf7: 42f8: Locationf9: HTMLCollection(1)f10: ƒ ()__proto__: Object
+sources sidebar content: titlef0: "expression"f1: undefinedf2: nullf3: Objectf4: Array(0)f5: Array(3)f6: Objectf7: 42f8: Locationf9: HTMLCollection(1)f10: function ()__proto__: Object
 RUNNING TEST: extension_testSourcesSidebarSetExpressionOnShown
 setExpression onShown frame: undefined
 RUNNING TEST: extension_testSourcesSidebarSetObject
diff --git a/third_party/WebKit/LayoutTests/inspector/initial-modules-load-expected.txt b/third_party/WebKit/LayoutTests/inspector/initial-modules-load-expected.txt
index 0b7a95b..4fb5fe1 100644
--- a/third_party/WebKit/LayoutTests/inspector/initial-modules-load-expected.txt
+++ b/third_party/WebKit/LayoutTests/inspector/initial-modules-load-expected.txt
@@ -17,7 +17,6 @@
     network_log
     persistence
     platform
-    product_registry
     protocol
     sdk
     services
@@ -46,7 +45,6 @@
     object_ui
     persistence
     platform
-    product_registry
     protocol
     sdk
     services
diff --git a/third_party/WebKit/LayoutTests/inspector/quick-open/command-menu-expected.txt b/third_party/WebKit/LayoutTests/inspector/quick-open/command-menu-expected.txt
index 272d4e8c..812da80 100644
--- a/third_party/WebKit/LayoutTests/inspector/quick-open/command-menu-expected.txt
+++ b/third_party/WebKit/LayoutTests/inspector/quick-open/command-menu-expected.txt
@@ -12,7 +12,6 @@
 Has category: Panel
 Has category: Settings
 Has category: Sources
-Has category: UI
 
 Switching to console panel
 Current panel: console
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/debugger-save-to-temp-var-expected.txt b/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/debugger-save-to-temp-var-expected.txt
index d06e5072..a0c2cfb 100644
--- a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/debugger-save-to-temp-var-expected.txt
+++ b/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/debugger-save-to-temp-var-expected.txt
@@ -21,9 +21,9 @@
 temp13
 Object {foo: "bar"}
 temp14
-(4) [1, 2, 3, 4, callee: ƒ, Symbol(Symbol.iterator): ƒ]
+(4) [1, 2, 3, 4, callee: function, Symbol(Symbol.iterator): function]
 temp15
-ƒ func() {}
+function func() {}
 temp16
 Error: errr
 
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/show-function-definition-expected.txt b/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/show-function-definition-expected.txt
index a3bf0cb..679daad7 100644
--- a/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/show-function-definition-expected.txt
+++ b/third_party/WebKit/LayoutTests/inspector/sources/debugger-ui/show-function-definition-expected.txt
@@ -6,7 +6,7 @@
 
 Running: testDumpFunctionDefinition
 jumpToMe
-ƒ jumpToMe()
+function jumpToMe()
 {
     var result = 12345;
     return window.foo || result;
diff --git a/third_party/WebKit/LayoutTests/inspector/sources/debugger/properties-special-expected.txt b/third_party/WebKit/LayoutTests/inspector/sources/debugger/properties-special-expected.txt
index b3a9383..6c5c46d 100644
--- a/third_party/WebKit/LayoutTests/inspector/sources/debugger/properties-special-expected.txt
+++ b/third_party/WebKit/LayoutTests/inspector/sources/debugger/properties-special-expected.txt
@@ -7,25 +7,25 @@
 properties-special.html:10 Boolean
     __proto__: Boolean
     [[PrimitiveValue]]: true
-properties-special.html:11 ƒ anonymous(a,b)
+properties-special.html:11 function anonymous(a,b)
     arguments: null
     caller: null
     length: 2
     name: ""
     prototype: Object
-    __proto__: ƒ ()
+    __proto__: function ()
     [[FunctionLocation]]: properties-special.html:11
     [[Scopes]]: Scopes[1]
-properties-special.html:12 ƒ bound ()
+properties-special.html:12 function bound ()
     arguments: (...)
     caller: (...)
     length: 1
     name: "bound "
-    __proto__: ƒ ()
-    [[TargetFunction]]: ƒ (a,b)
+    __proto__: function ()
+    [[TargetFunction]]: function (a,b)
     [[BoundThis]]: Object
     [[BoundArgs]]: Array(1)
-properties-special.html:13 ƒ* anonymous()
+properties-special.html:13 function* anonymous()
     arguments: (...)
     caller: (...)
     length: 0
diff --git a/third_party/WebKit/Source/core/loader/ImageLoader.cpp b/third_party/WebKit/Source/core/loader/ImageLoader.cpp
index b0fc819..74f02520 100644
--- a/third_party/WebKit/Source/core/loader/ImageLoader.cpp
+++ b/third_party/WebKit/Source/core/loader/ImageLoader.cpp
@@ -519,16 +519,6 @@
   DCHECK(failed_load_url_.IsEmpty());
   DCHECK_EQ(resource, image_.Get());
 
-  // |has_pending_load_event_| is always false and |image_complete_| is
-  // always true for entire ImageDocument loading for historical reason.
-  // DoUpdateFromElement() is not called and SetImageForImageDocument()
-  // is called instead for ImageDocument loading.
-  // TODO(hiroshige): Turn the CHECK()s to DCHECK()s before going to beta.
-  if (loading_image_document_)
-    CHECK(image_complete_);
-  else
-    CHECK(!image_complete_);
-
   image_complete_ = true;
 
   // Update ImageAnimationPolicy for image_.
@@ -541,12 +531,8 @@
     ToSVGImage(image_->GetImage())
         ->UpdateUseCounters(GetElement()->GetDocument());
 
-  if (loading_image_document_) {
-    CHECK(!has_pending_load_event_);
+  if (!has_pending_load_event_)
     return;
-  }
-
-  CHECK(has_pending_load_event_);
 
   if (resource->ErrorOccurred()) {
     LoadEventSender().CancelEvent(this);
@@ -646,10 +632,10 @@
 }
 
 void ImageLoader::DispatchPendingLoadEvent() {
-  CHECK(has_pending_load_event_);
+  if (!has_pending_load_event_)
+    return;
   if (!image_)
     return;
-  CHECK(image_complete_);
   has_pending_load_event_ = false;
   if (GetElement()->GetDocument().GetFrame())
     DispatchLoadEvent();
@@ -661,7 +647,8 @@
 }
 
 void ImageLoader::DispatchPendingErrorEvent() {
-  CHECK(has_pending_error_event_);
+  if (!has_pending_error_event_)
+    return;
   has_pending_error_event_ = false;
 
   if (GetElement()->GetDocument().GetFrame())
diff --git a/third_party/WebKit/Source/core/timing/PerformanceServerTiming.cpp b/third_party/WebKit/Source/core/timing/PerformanceServerTiming.cpp
index 4dc50b2..120613c 100644
--- a/third_party/WebKit/Source/core/timing/PerformanceServerTiming.cpp
+++ b/third_party/WebKit/Source/core/timing/PerformanceServerTiming.cpp
@@ -15,17 +15,17 @@
                                                  double duration,
                                                  const String& description)
     : PerformanceEntry(name, "server", 0.0, duration),
-      m_metric(metric),
-      m_description(description) {}
+      metric_(metric),
+      description_(description) {}
 
 PerformanceServerTiming::~PerformanceServerTiming() {}
 
 String PerformanceServerTiming::metric() const {
-  return m_metric;
+  return metric_;
 }
 
 String PerformanceServerTiming::description() const {
-  return m_description;
+  return description_;
 }
 
 void PerformanceServerTiming::BuildJSONValue(V8ObjectBuilder& builder) const {
diff --git a/third_party/WebKit/Source/core/timing/PerformanceServerTiming.h b/third_party/WebKit/Source/core/timing/PerformanceServerTiming.h
index a4d211b..814dfe41 100644
--- a/third_party/WebKit/Source/core/timing/PerformanceServerTiming.h
+++ b/third_party/WebKit/Source/core/timing/PerformanceServerTiming.h
@@ -34,8 +34,8 @@
                           double duration,
                           const String& description);
 
-  const String m_metric;
-  const String m_description;
+  const String metric_;
+  const String description_;
 };
 
 }  // namespace blink
diff --git a/third_party/WebKit/Source/devtools/BUILD.gn b/third_party/WebKit/Source/devtools/BUILD.gn
index 89f5ba8..322b6ce1 100644
--- a/third_party/WebKit/Source/devtools/BUILD.gn
+++ b/third_party/WebKit/Source/devtools/BUILD.gn
@@ -390,11 +390,8 @@
   "front_end/persistence/PersistenceUtils.js",
   "front_end/platform/module.json",
   "front_end/platform/utilities.js",
-  "front_end/product_registry/BadgePool.js",
-  "front_end/product_registry/ProductRegistry.js",
-  "front_end/product_registry/badge.css",
   "front_end/product_registry/module.json",
-  "front_end/product_registry/popup.css",
+  "front_end/product_registry/ProductRegistry.js",
   "front_end/product_registry_impl/module.json",
   "front_end/product_registry_impl/ProductRegistryImpl.js",
   "front_end/product_registry_impl/ProductRegistryData.js",
diff --git a/third_party/WebKit/Source/devtools/front_end/common/Color.js b/third_party/WebKit/Source/devtools/front_end/common/Color.js
index a5330eb..10db609 100644
--- a/third_party/WebKit/Source/devtools/front_end/common/Color.js
+++ b/third_party/WebKit/Source/devtools/front_end/common/Color.js
@@ -817,67 +817,3 @@
   Shape: Common.Color.fromRGBA([96, 82, 177, 0.8]),
   ShapeMargin: Common.Color.fromRGBA([96, 82, 127, .6])
 };
-
-Common.Color.Generator = class {
-  /**
-   * @param {!{min: number, max: number}|number=} hueSpace
-   * @param {!{min: number, max: number, count: (number|undefined)}|number=} satSpace
-   * @param {!{min: number, max: number, count: (number|undefined)}|number=} lightnessSpace
-   * @param {!{min: number, max: number, count: (number|undefined)}|number=} alphaSpace
-   */
-  constructor(hueSpace, satSpace, lightnessSpace, alphaSpace) {
-    this._hueSpace = hueSpace || {min: 0, max: 360};
-    this._satSpace = satSpace || 67;
-    this._lightnessSpace = lightnessSpace || 80;
-    this._alphaSpace = alphaSpace || 1;
-    /** @type {!Map<string, string>} */
-    this._colors = new Map();
-  }
-
-  /**
-   * @param {string} id
-   * @param {string} color
-   */
-  setColorForID(id, color) {
-    this._colors.set(id, color);
-  }
-
-  /**
-   * @param {string} id
-   * @return {string}
-   */
-  colorForID(id) {
-    var color = this._colors.get(id);
-    if (!color) {
-      color = this._generateColorForID(id);
-      this._colors.set(id, color);
-    }
-    return color;
-  }
-
-  /**
-   * @param {string} id
-   * @return {string}
-   */
-  _generateColorForID(id) {
-    var hash = String.hashCode(id);
-    var h = this._indexToValueInSpace(hash, this._hueSpace);
-    var s = this._indexToValueInSpace(hash >> 8, this._satSpace);
-    var l = this._indexToValueInSpace(hash >> 16, this._lightnessSpace);
-    var a = this._indexToValueInSpace(hash >> 24, this._alphaSpace);
-    return `hsla(${h}, ${s}%, ${l}%, ${a})`;
-  }
-
-  /**
-   * @param {number} index
-   * @param {!{min: number, max: number, count: (number|undefined)}|number} space
-   * @return {number}
-   */
-  _indexToValueInSpace(index, space) {
-    if (typeof space === 'number')
-      return space;
-    var count = space.count || space.max - space.min;
-    index %= count;
-    return space.min + Math.floor(index / (count - 1) * (space.max - space.min));
-  }
-};
diff --git a/third_party/WebKit/Source/devtools/front_end/inspector.json b/third_party/WebKit/Source/devtools/front_end/inspector.json
index 187734f..73ec761 100644
--- a/third_party/WebKit/Source/devtools/front_end/inspector.json
+++ b/third_party/WebKit/Source/devtools/front_end/inspector.json
@@ -20,7 +20,7 @@
         { "name": "sources" },
         { "name": "timeline", "condition": "!v8only" },
         { "name": "timeline_model", "condition": "!v8only" },
-        { "name": "product_registry", "condition": "!v8only", "type": "autostart" },
+        { "name": "product_registry", "condition": "!v8only" },
         { "name": "product_registry_impl", "condition": "!v8only", "type": "remote" },
         { "name": "profiler" },
         { "name": "resources", "condition": "!v8only" },
diff --git a/third_party/WebKit/Source/devtools/front_end/network/NetworkDataGridNode.js b/third_party/WebKit/Source/devtools/front_end/network/NetworkDataGridNode.js
index 10beb24e..e07c2ac 100644
--- a/third_party/WebKit/Source/devtools/front_end/network/NetworkDataGridNode.js
+++ b/third_party/WebKit/Source/devtools/front_end/network/NetworkDataGridNode.js
@@ -361,9 +361,9 @@
     /** @type {?Element} */
     this._nameCell = null;
     /** @type {?Element} */
-    this._nameBadgeElement = null;
-    /** @type {?Element} */
     this._initiatorCell = null;
+    /** @type {?Element} */
+    this._linkifiedInitiatorAnchor = null;
     this._request = request;
     this._isNavigationRequest = false;
     this.selectable = true;
@@ -933,9 +933,6 @@
     iconElement.classList.add(this._request.resourceType().name());
 
     cell.appendChild(iconElement);
-    if (!this._nameBadgeElement)
-      this._nameBadgeElement = this.parentView().badgePool.badgeForURL(this._request.parsedURL);
-    cell.appendChild(this._nameBadgeElement);
     cell.createTextChild(this._request.networkManager().target().decorateLabel(this._request.name()));
     this._appendSubtitle(cell, this._request.path());
     cell.title = this._request.url();
diff --git a/third_party/WebKit/Source/devtools/front_end/network/NetworkLogView.js b/third_party/WebKit/Source/devtools/front_end/network/NetworkLogView.js
index 2aa7048..5db1474f 100644
--- a/third_party/WebKit/Source/devtools/front_end/network/NetworkLogView.js
+++ b/third_party/WebKit/Source/devtools/front_end/network/NetworkLogView.js
@@ -90,8 +90,8 @@
     this._currentMatchedRequestNode = null;
     this._currentMatchedRequestIndex = -1;
 
+    /** @type {!Components.Linkifier} */
     this.linkifier = new Components.Linkifier();
-    this.badgePool = new ProductRegistry.BadgePool();
 
     this._recording = false;
     this._preserveLog = false;
@@ -922,7 +922,6 @@
 
     this._timeCalculator.setWindow(null);
     this.linkifier.reset();
-    this.badgePool.reset();
 
     if (this._activeGroupLookup)
       this._activeGroupLookup.reset();
diff --git a/third_party/WebKit/Source/devtools/front_end/network/RequestTimingView.js b/third_party/WebKit/Source/devtools/front_end/network/RequestTimingView.js
index 4a76e3b..fd29015 100644
--- a/third_party/WebKit/Source/devtools/front_end/network/RequestTimingView.js
+++ b/third_party/WebKit/Source/devtools/front_end/network/RequestTimingView.js
@@ -282,7 +282,7 @@
      * @param {number} right
      */
     function addTiming(serverTiming, right) {
-      var colorGenerator = new Common.Color.Generator({min: 0, max: 360, count: 36}, {min: 50, max: 80}, 80);
+      var colorGenerator = new PerfUI.FlameChart.ColorGenerator({min: 0, max: 360, count: 36}, {min: 50, max: 80}, 80);
       var isTotal = serverTiming.metric.toLowerCase() === 'total';
       var tr = tableElement.createChild('tr', isTotal ? 'network-timing-footer' : '');
       var metric = tr.createChild('td', 'network-timing-metric');
diff --git a/third_party/WebKit/Source/devtools/front_end/object_ui/ObjectPropertiesSection.js b/third_party/WebKit/Source/devtools/front_end/object_ui/ObjectPropertiesSection.js
index e2043fb..c5fa5aa 100644
--- a/third_party/WebKit/Source/devtools/front_end/object_ui/ObjectPropertiesSection.js
+++ b/third_party/WebKit/Source/devtools/front_end/object_ui/ObjectPropertiesSection.js
@@ -152,16 +152,16 @@
       addElements('class', textAfterPrefix, className);
     } else if (isAsync) {
       textAfterPrefix = text.substring('async function'.length);
-      addElements('async \u0192', textAfterPrefix, nameAndArguments(textAfterPrefix));
+      addElements('async function', textAfterPrefix, nameAndArguments(textAfterPrefix));
     } else if (isGenerator) {
       textAfterPrefix = text.substring('function*'.length);
-      addElements('\u0192*', textAfterPrefix, nameAndArguments(textAfterPrefix));
+      addElements('function*', textAfterPrefix, nameAndArguments(textAfterPrefix));
     } else if (isGeneratorShorthand) {
       textAfterPrefix = text.substring('*'.length);
-      addElements('\u0192*', textAfterPrefix, nameAndArguments(textAfterPrefix));
+      addElements('function*', textAfterPrefix, nameAndArguments(textAfterPrefix));
     } else if (isBasic) {
       textAfterPrefix = text.substring('function'.length);
-      addElements('\u0192', textAfterPrefix, nameAndArguments(textAfterPrefix));
+      addElements('function', textAfterPrefix, nameAndArguments(textAfterPrefix));
     } else if (isArrow) {
       const maxArrowFunctionCharacterLength = 60;
       var abbreviation = text;
@@ -171,7 +171,7 @@
         abbreviation = text.substring(0, firstArrowIndex + 2) + ' {\u2026}';
       addElements('', text, abbreviation);
     } else {
-      addElements('\u0192', text, nameAndArguments(text));
+      addElements('function', text, nameAndArguments(text));
     }
     valueElement.title = description || '';
     return valueElement;
@@ -738,10 +738,7 @@
       return null;
 
     var valueElement = createElementWithClass('span', 'value');
-    if (value.description === 'Object')
-      valueElement.textContent = '';
-    else
-      valueElement.setTextContentTruncatedIfNeeded(value.description || '');
+    valueElement.setTextContentTruncatedIfNeeded(value.description || '');
     valueElement.classList.add('object-value-' + (value.subtype || value.type));
     valueElement.title = value.description || '';
     return valueElement;
diff --git a/third_party/WebKit/Source/devtools/front_end/object_ui/RemoteObjectPreviewFormatter.js b/third_party/WebKit/Source/devtools/front_end/object_ui/RemoteObjectPreviewFormatter.js
index dd79f6a..31a94d7 100644
--- a/third_party/WebKit/Source/devtools/front_end/object_ui/RemoteObjectPreviewFormatter.js
+++ b/third_party/WebKit/Source/devtools/front_end/object_ui/RemoteObjectPreviewFormatter.js
@@ -46,17 +46,16 @@
         parentElement.createChild('span', 'object-description').textContent = text + ' ';
     }
 
-    var propertiesElement = parentElement.createChild('span', 'object-properties-preview source-code');
-    propertiesElement.createTextChild(isArrayOrTypedArray ? '[' : '{');
+    parentElement.createTextChild(isArrayOrTypedArray ? '[' : '{');
     if (preview.entries)
-      this._appendEntriesPreview(propertiesElement, preview);
+      this._appendEntriesPreview(parentElement, preview);
     else if (isArrayOrTypedArray)
-      this._appendArrayPropertiesPreview(propertiesElement, preview);
+      this._appendArrayPropertiesPreview(parentElement, preview);
     else
-      this._appendObjectPropertiesPreview(propertiesElement, preview);
+      this._appendObjectPropertiesPreview(parentElement, preview);
     if (preview.overflow)
-      propertiesElement.createChild('span').textContent = '\u2026';
-    propertiesElement.createTextChild(isArrayOrTypedArray ? ']' : '}');
+      parentElement.createChild('span').textContent = '\u2026';
+    parentElement.createTextChild(isArrayOrTypedArray ? ']' : '}');
   }
 
   /**
@@ -223,7 +222,7 @@
     }
 
     if (type === 'function') {
-      span.textContent = '\u0192';
+      span.textContent = 'function';
       return span;
     }
 
@@ -238,10 +237,7 @@
     }
 
     if (type === 'object' && !subtype) {
-      var preview = this._abbreviateFullQualifiedClassName(description);
-      if (preview === 'Object')
-        preview = '{\u2026}';
-      span.textContent = preview;
+      span.textContent = this._abbreviateFullQualifiedClassName(description);
       span.title = description;
       return span;
     }
diff --git a/third_party/WebKit/Source/devtools/front_end/object_ui/objectPropertiesSection.css b/third_party/WebKit/Source/devtools/front_end/object_ui/objectPropertiesSection.css
index 7e83685..70e1f29 100644
--- a/third_party/WebKit/Source/devtools/front_end/object_ui/objectPropertiesSection.css
+++ b/third_party/WebKit/Source/devtools/front_end/object_ui/objectPropertiesSection.css
@@ -4,6 +4,11 @@
  * found in the LICENSE file.
  */
 
+.object-properties-section .name {
+    color: rgb(136, 19, 145);
+    flex-shrink: 0;
+}
+
 .object-properties-section-separator {
     flex-shrink: 0;
     padding-right: 5px;
diff --git a/third_party/WebKit/Source/devtools/front_end/object_ui/objectValue.css b/third_party/WebKit/Source/devtools/front_end/object_ui/objectValue.css
index 5cfb026..f1c6b53 100644
--- a/third_party/WebKit/Source/devtools/front_end/object_ui/objectValue.css
+++ b/third_party/WebKit/Source/devtools/front_end/object_ui/objectValue.css
@@ -25,7 +25,7 @@
 
 .object-value-function-prefix,
 .object-value-boolean {
-    color: rgb(13, 34, 170);
+    color: rgb(170, 13, 145);
 }
 
 .object-value-function {
@@ -102,16 +102,3 @@
 .object-properties-section .object-description {
     color: gray;
 }
-
-.object-properties-preview {
-    white-space: nowrap;
-}
-
-.name {
-    color: rgb(136, 19, 145);
-    flex-shrink: 0;
-}
-
-.object-properties-preview .name {
-    color: #565656;
-}
diff --git a/third_party/WebKit/Source/devtools/front_end/perf_ui/FlameChart.js b/third_party/WebKit/Source/devtools/front_end/perf_ui/FlameChart.js
index 6e34f01..5ac5dd8 100644
--- a/third_party/WebKit/Source/devtools/front_end/perf_ui/FlameChart.js
+++ b/third_party/WebKit/Source/devtools/front_end/perf_ui/FlameChart.js
@@ -1494,6 +1494,73 @@
 };
 
 /**
+ * @unrestricted
+ */
+PerfUI.FlameChart.ColorGenerator = class {
+  /**
+   * @param {!{min: number, max: number}|number=} hueSpace
+   * @param {!{min: number, max: number, count: (number|undefined)}|number=} satSpace
+   * @param {!{min: number, max: number, count: (number|undefined)}|number=} lightnessSpace
+   * @param {!{min: number, max: number, count: (number|undefined)}|number=} alphaSpace
+   */
+  constructor(hueSpace, satSpace, lightnessSpace, alphaSpace) {
+    this._hueSpace = hueSpace || {min: 0, max: 360};
+    this._satSpace = satSpace || 67;
+    this._lightnessSpace = lightnessSpace || 80;
+    this._alphaSpace = alphaSpace || 1;
+    /** @type {!Map<string, string>} */
+    this._colors = new Map();
+  }
+
+  /**
+   * @param {string} id
+   * @param {string} color
+   */
+  setColorForID(id, color) {
+    this._colors.set(id, color);
+  }
+
+  /**
+   * @param {string} id
+   * @return {string}
+   */
+  colorForID(id) {
+    var color = this._colors.get(id);
+    if (!color) {
+      color = this._generateColorForID(id);
+      this._colors.set(id, color);
+    }
+    return color;
+  }
+
+  /**
+   * @param {string} id
+   * @return {string}
+   */
+  _generateColorForID(id) {
+    var hash = String.hashCode(id);
+    var h = this._indexToValueInSpace(hash, this._hueSpace);
+    var s = this._indexToValueInSpace(hash >> 8, this._satSpace);
+    var l = this._indexToValueInSpace(hash >> 16, this._lightnessSpace);
+    var a = this._indexToValueInSpace(hash >> 24, this._alphaSpace);
+    return `hsla(${h}, ${s}%, ${l}%, ${a})`;
+  }
+
+  /**
+   * @param {number} index
+   * @param {!{min: number, max: number, count: (number|undefined)}|number} space
+   * @return {number}
+   */
+  _indexToValueInSpace(index, space) {
+    if (typeof space === 'number')
+      return space;
+    var count = space.count || space.max - space.min;
+    index %= count;
+    return space.min + Math.floor(index / (count - 1) * (space.max - space.min));
+  }
+};
+
+/**
  * @implements {PerfUI.TimelineGrid.Calculator}
  * @unrestricted
  */
diff --git a/third_party/WebKit/Source/devtools/front_end/product_registry/BadgePool.js b/third_party/WebKit/Source/devtools/front_end/product_registry/BadgePool.js
deleted file mode 100644
index bacfad7..0000000
--- a/third_party/WebKit/Source/devtools/front_end/product_registry/BadgePool.js
+++ /dev/null
@@ -1,156 +0,0 @@
-// Copyright 2017 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-ProductRegistry.BadgePool = class {
-  constructor() {
-    this._setting = Common.settings.moduleSetting('product_registry.badges-visible');
-    this._setting.addChangeListener(this._settingUpdated.bind(this));
-    /** @type {!Map<!Element, function():!Promise<!Common.ParsedURL>>}*/
-    this._badgeElements = new Map();
-  }
-
-  /**
-   * @param {!SDK.ResourceTreeFrame} frame
-   * @return {!Element}
-   */
-  badgeForFrame(frame) {
-    return this._badgeForFrameOrUrl(this._resolveUrl.bind(this, frame));
-  }
-
-  /**
-   * @param {!Common.ParsedURL} parsedUrl
-   * @return {!Element}
-   */
-  badgeForURL(parsedUrl) {
-    return this._badgeForFrameOrUrl(() => Promise.resolve(parsedUrl));
-  }
-
-  reset() {
-    this._badgeElements.clear();
-  }
-
-  /**
-   * @param {function():!Promise<!Common.ParsedURL>} urlResolver
-   * @return {!Element}
-   */
-  _badgeForFrameOrUrl(urlResolver) {
-    var element = createElement('span');
-    var root = UI.createShadowRootWithCoreStyles(element, 'product_registry/badge.css');
-    var badgeElement = root.createChild('span', 'product-registry-badge monospace hidden');
-    badgeElement.textContent = '  ';
-    badgeElement.addEventListener('mousedown', event => event.consume());
-    badgeElement.addEventListener('click', event => {
-      this._showPopup(badgeElement);
-      event.consume();
-    }, false);
-
-    this._badgeElements.set(badgeElement, urlResolver);
-    if (this._setting.get())
-      this._renderBadge(badgeElement);
-    return element;
-  }
-
-  /**
-   * @param {?SDK.ResourceTreeFrame} frame
-   * @return {!Promise<!Common.ParsedURL>}
-   */
-  async _resolveUrl(frame) {
-    var registry = await ProductRegistry.instance();
-    var parsedUrl = new Common.ParsedURL(frame.url);
-    var entry = registry.entryForUrl(parsedUrl);
-    if (!entry) {
-      frame.findCreationCallFrame(callFrame => {
-        if (!callFrame.url)
-          return false;
-        parsedUrl = new Common.ParsedURL(callFrame.url);
-        return !!registry.entryForUrl(parsedUrl);
-      });
-    }
-    return parsedUrl;
-  }
-
-  /**
-   * @param {!Element} badgeElement
-   */
-  async _renderBadge(badgeElement) {
-    if (!this._badgeElements.has(badgeElement))
-      return;
-
-    var registry = await ProductRegistry.instance();
-    var parsedUrl = await this._badgeElements.get(badgeElement)();
-    var entryName = registry.nameForUrl(parsedUrl);
-
-    if (!entryName) {
-      badgeElement.textContent = '  ';
-      badgeElement.style.removeProperty('background-color');
-      return;
-    }
-
-    var label;
-    var tokens = entryName.replace(/[a-z]*/g, '').split(' ');
-    if (tokens.length > 1)
-      label = tokens[0][0] + tokens[1][0];
-    else
-      label = entryName;
-
-    badgeElement.textContent = label.substring(0, 2).toUpperCase();
-    badgeElement.style.backgroundColor = ProductRegistry.BadgePool.colorForEntryName(entryName);
-    badgeElement.classList.toggle('hidden', !this._setting.get());
-  }
-
-  _settingUpdated() {
-    var enabled = this._setting.get();
-    if (!enabled) {
-      for (var badgeElement of this._badgeElements.keys())
-        badgeElement.classList.add('hidden');
-      return;
-    }
-    for (var badgeElement of this._badgeElements.keys())
-      this._renderBadge(badgeElement);
-  }
-
-  /**
-   * @param {!Element} badgeElement
-   */
-  async _showPopup(badgeElement) {
-    if (!this._badgeElements.has(badgeElement))
-      return;
-
-    var registry = await ProductRegistry.instance();
-    var parsedUrl = await this._badgeElements.get(badgeElement)();
-    var entryName = registry.nameForUrl(parsedUrl);
-
-    var element = createElement('div');
-    var root = UI.createShadowRootWithCoreStyles(element, 'product_registry/popup.css');
-    var popupElement = root.createChild('div', 'product-registry-popup');
-    var domainElement = popupElement.createChild('div', 'product-registry-domain');
-    domainElement.textContent = parsedUrl.domain();
-    var entryNameElement = popupElement.createChild('div', 'product-registry-name');
-    entryNameElement.textContent = entryName;
-    var reportLink =
-        'https://docs.google.com/forms/d/e/1FAIpQLSchz2FdcQ-rRllzl8BbhWaTRRY-12BpPjW6Hr9e1-BpCA083w/viewform' +
-        '?entry_1425918171=' + encodeURIComponent((parsedUrl.domain() + parsedUrl.path).substr(0, 100));
-    popupElement.appendChild(UI.createExternalLink(reportLink, 'Report mismatch', 'product-registry-link'));
-
-    var dialog = new UI.Dialog();
-    dialog.setContentAnchorBox(badgeElement.boxInWindow());
-    dialog.contentElement.appendChild(element);
-    dialog.setSizeBehavior(UI.GlassPane.SizeBehavior.MeasureContent);
-    dialog.setAnchorBehavior(UI.GlassPane.AnchorBehavior.PreferTop);
-    dialog.addCloseButton();
-    dialog.show(/** @type {!Document} */ (badgeElement.ownerDocument));
-  }
-
-  /**
-   * @param {string} entryName
-   * @return {string}
-   */
-  static colorForEntryName(entryName) {
-    if (!ProductRegistry.BadgePool._colorGenerator) {
-      ProductRegistry.BadgePool._colorGenerator =
-          new Common.Color.Generator({min: 30, max: 330}, {min: 50, max: 80, count: 3}, 85);
-    }
-    return ProductRegistry.BadgePool._colorGenerator.colorForID(entryName);
-  }
-};
diff --git a/third_party/WebKit/Source/devtools/front_end/product_registry/badge.css b/third_party/WebKit/Source/devtools/front_end/product_registry/badge.css
deleted file mode 100644
index 54c9468..0000000
--- a/third_party/WebKit/Source/devtools/front_end/product_registry/badge.css
+++ /dev/null
@@ -1,14 +0,0 @@
-/*
- * Copyright 2017 The Chromium Authors. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-.product-registry-badge {
-  background-color: rgba(0, 0, 0, 0.2);
-  border-radius: 2px;
-  padding: 1px 2px;
-  margin-right: 4px;
-  white-space: pre;
-  cursor: pointer;
-}
diff --git a/third_party/WebKit/Source/devtools/front_end/product_registry/module.json b/third_party/WebKit/Source/devtools/front_end/product_registry/module.json
index 2dc1781b..3f3ce5c 100644
--- a/third_party/WebKit/Source/devtools/front_end/product_registry/module.json
+++ b/third_party/WebKit/Source/devtools/front_end/product_registry/module.json
@@ -1,34 +1,11 @@
 {
     "extensions": [
-        {
-            "type": "setting",
-            "category": "UI",
-            "settingName": "product_registry.badges-visible",
-            "settingType": "boolean",
-            "defaultValue": false,
-            "options": [
-                {
-                    "value": true,
-                    "title": "Show third party badges"
-                },
-                {
-                    "value": false,
-                    "title": "Do not show third party badges"
-                }
-            ]
-        }
     ],
     "dependencies": [
         "common",
-        "sdk",
-        "ui"
+        "sdk"
     ],
     "scripts": [
-        "BadgePool.js",
         "ProductRegistry.js"
-    ],
-    "resources": [
-        "badge.css",
-        "popup.css"
     ]
 }
diff --git a/third_party/WebKit/Source/devtools/front_end/product_registry/popup.css b/third_party/WebKit/Source/devtools/front_end/product_registry/popup.css
deleted file mode 100644
index 9929aeea..0000000
--- a/third_party/WebKit/Source/devtools/front_end/product_registry/popup.css
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Copyright 2017 The Chromium Authors. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-.product-registry-popup {
-    background-color: white;
-    padding: 15px 45px 15px 15px;
-    border-radius: 4px;
-    white-space: nowrap;
-    box-shadow: 0px 1px 2px 0px gray;
-}
-
-.product-registry-domain {
-    font-weight: bold;
-}
-
-.product-registry-name {
-    padding: 10px 0;
-}
-
-.product-registry-link {
-    display: block;
-}
-
-div[is=dt-close-button] {
-  position: absolute;
-  top: 5px;
-  right: 5px;
-}
diff --git a/third_party/WebKit/Source/devtools/front_end/product_registry_impl/ProductRegistryImpl.js b/third_party/WebKit/Source/devtools/front_end/product_registry_impl/ProductRegistryImpl.js
index e6bcbbd9..f693daf 100644
--- a/third_party/WebKit/Source/devtools/front_end/product_registry_impl/ProductRegistryImpl.js
+++ b/third_party/WebKit/Source/devtools/front_end/product_registry_impl/ProductRegistryImpl.js
@@ -27,7 +27,7 @@
    * @return {?ProductRegistry.Registry.ProductEntry}
    */
   entryForUrl(parsedUrl) {
-    if (parsedUrl.isDataURL() || !parsedUrl.isValid)
+    if (parsedUrl.isDataURL())
       return null;
     // TODO(allada) This should be expanded to allow paths as as well as domain to find a product.
     var productsByDomainHash = ProductRegistryImpl._productsByDomainHash;
diff --git a/third_party/WebKit/Source/devtools/front_end/profiler/CPUProfileFlameChart.js b/third_party/WebKit/Source/devtools/front_end/profiler/CPUProfileFlameChart.js
index 501ba7c..0d0d1dc5 100644
--- a/third_party/WebKit/Source/devtools/front_end/profiler/CPUProfileFlameChart.js
+++ b/third_party/WebKit/Source/devtools/front_end/profiler/CPUProfileFlameChart.js
@@ -39,12 +39,12 @@
   }
 
   /**
-   * @return {!Common.Color.Generator}
+   * @return {!PerfUI.FlameChart.ColorGenerator}
    */
   static colorGenerator() {
     if (!Profiler.ProfileFlameChartDataProvider._colorGenerator) {
-      var colorGenerator =
-          new Common.Color.Generator({min: 30, max: 330}, {min: 50, max: 80, count: 5}, {min: 80, max: 90, count: 3});
+      var colorGenerator = new PerfUI.FlameChart.ColorGenerator(
+          {min: 30, max: 330}, {min: 50, max: 80, count: 5}, {min: 80, max: 90, count: 3});
 
       colorGenerator.setColorForID('(idle)', 'hsl(0, 0%, 94%)');
       colorGenerator.setColorForID('(program)', 'hsl(0, 0%, 80%)');
diff --git a/third_party/WebKit/Source/devtools/front_end/timeline/TimelineFlameChartDataProvider.js b/third_party/WebKit/Source/devtools/front_end/timeline/TimelineFlameChartDataProvider.js
index deb9fba..340ee6bc 100644
--- a/third_party/WebKit/Source/devtools/front_end/timeline/TimelineFlameChartDataProvider.js
+++ b/third_party/WebKit/Source/devtools/front_end/timeline/TimelineFlameChartDataProvider.js
@@ -51,9 +51,9 @@
     this._model = null;
 
     this._consoleColorGenerator =
-        new Common.Color.Generator({min: 30, max: 55}, {min: 70, max: 100, count: 6}, 50, 0.7);
+        new PerfUI.FlameChart.ColorGenerator({min: 30, max: 55}, {min: 70, max: 100, count: 6}, 50, 0.7);
     this._extensionColorGenerator =
-        new Common.Color.Generator({min: 210, max: 300}, {min: 70, max: 100, count: 6}, 70, 0.7);
+        new PerfUI.FlameChart.ColorGenerator({min: 210, max: 300}, {min: 70, max: 100, count: 6}, 70, 0.7);
 
     /**
      * @param {!Object} extra
diff --git a/third_party/WebKit/Source/devtools/front_end/timeline/TimelineUIUtils.js b/third_party/WebKit/Source/devtools/front_end/timeline/TimelineUIUtils.js
index 887887c..7afb137 100644
--- a/third_party/WebKit/Source/devtools/front_end/timeline/TimelineUIUtils.js
+++ b/third_party/WebKit/Source/devtools/front_end/timeline/TimelineUIUtils.js
@@ -1734,7 +1734,7 @@
   static colorForId(id) {
     if (!Timeline.TimelineUIUtils.colorForId._colorGenerator) {
       Timeline.TimelineUIUtils.colorForId._colorGenerator =
-          new Common.Color.Generator({min: 30, max: 330}, {min: 50, max: 80, count: 3}, 85);
+          new PerfUI.FlameChart.ColorGenerator({min: 30, max: 330}, {min: 50, max: 80, count: 3}, 85);
       Timeline.TimelineUIUtils.colorForId._colorGenerator.setColorForID('', '#f2ecdc');
     }
     return Timeline.TimelineUIUtils.colorForId._colorGenerator.colorForID(id);
diff --git a/third_party/WebKit/Source/devtools/front_end/ui/Dialog.js b/third_party/WebKit/Source/devtools/front_end/ui/Dialog.js
index 0eb1932..64406e7 100644
--- a/third_party/WebKit/Source/devtools/front_end/ui/Dialog.js
+++ b/third_party/WebKit/Source/devtools/front_end/ui/Dialog.js
@@ -35,7 +35,6 @@
     this.contentElement.tabIndex = 0;
     this.contentElement.addEventListener('focus', () => this.widget().focus(), false);
     this.contentElement.addEventListener('keydown', this._onKeyDown.bind(this), false);
-    this.widget().setDefaultFocusedElement(this.contentElement);
     this.setPointerEventsBehavior(UI.GlassPane.PointerEventsBehavior.BlockedByGlassPane);
     this.setOutsideClickCallback(event => {
       this.hide();
diff --git a/third_party/WebKit/Source/modules/audio_output_devices/HTMLMediaElementAudioOutputDevice.cpp b/third_party/WebKit/Source/modules/audio_output_devices/HTMLMediaElementAudioOutputDevice.cpp
index 4fada83..ad24cc06 100644
--- a/third_party/WebKit/Source/modules/audio_output_devices/HTMLMediaElementAudioOutputDevice.cpp
+++ b/third_party/WebKit/Source/modules/audio_output_devices/HTMLMediaElementAudioOutputDevice.cpp
@@ -66,7 +66,8 @@
 
 void SetSinkIdResolver::TimerFired(TimerBase* timer) {
   ExecutionContext* context = GetExecutionContext();
-  ASSERT(context && context->IsDocument());
+  DCHECK(context);
+  DCHECK(context->IsDocument());
   std::unique_ptr<SetSinkIdCallbacks> callbacks =
       WTF::WrapUnique(new SetSinkIdCallbacks(this, *element_, sink_id_));
   WebMediaPlayer* web_media_player = element_->GetWebMediaPlayer();
diff --git a/third_party/WebKit/Source/modules/cachestorage/Cache.cpp b/third_party/WebKit/Source/modules/cachestorage/Cache.cpp
index f02785c..4a8dd9bf 100644
--- a/third_party/WebKit/Source/modules/cachestorage/Cache.cpp
+++ b/third_party/WebKit/Source/modules/cachestorage/Cache.cpp
@@ -289,13 +289,13 @@
       : number_of_remaining_operations_(number_of_operations),
         cache_(cache),
         resolver_(resolver) {
-    ASSERT(0 < number_of_remaining_operations_);
+    DCHECK_LT(0, number_of_remaining_operations_);
     batch_operations_.resize(number_of_operations);
   }
 
   void OnSuccess(size_t index,
                  const WebServiceWorkerCache::BatchOperation& batch_operation) {
-    ASSERT(index < batch_operations_.size());
+    DCHECK_LT(index, batch_operations_.size());
     if (completed_)
       return;
     if (!resolver_->GetExecutionContext() ||
diff --git a/third_party/WebKit/Source/modules/cachestorage/InspectorCacheStorageAgent.cpp b/third_party/WebKit/Source/modules/cachestorage/InspectorCacheStorageAgent.cpp
index cf846c2..25a41d8 100644
--- a/third_party/WebKit/Source/modules/cachestorage/InspectorCacheStorageAgent.cpp
+++ b/third_party/WebKit/Source/modules/cachestorage/InspectorCacheStorageAgent.cpp
@@ -181,7 +181,7 @@
 
   void AddRequestResponsePair(const WebServiceWorkerRequest& request,
                               const WebServiceWorkerResponse& response) {
-    ASSERT(num_responses_left_ > 0);
+    DCHECK_GT(num_responses_left_, 0);
     RequestResponse& request_response =
         responses_.at(responses_.size() - num_responses_left_);
     request_response.request = request.Url().GetString();
diff --git a/third_party/WebKit/Source/modules/canvas2d/BaseRenderingContext2D.h b/third_party/WebKit/Source/modules/canvas2d/BaseRenderingContext2D.h
index 6963be6..a3f61711 100644
--- a/third_party/WebKit/Source/modules/canvas2d/BaseRenderingContext2D.h
+++ b/third_party/WebKit/Source/modules/canvas2d/BaseRenderingContext2D.h
@@ -456,7 +456,7 @@
     CanvasRenderingContext2DState::PaintType paint_type,
     CanvasRenderingContext2DState::ImageType image_type) {
   sk_sp<SkImageFilter> filter = StateGetFilter();
-  ASSERT(IsFullCanvasCompositeMode(GetState().GlobalComposite()) || filter);
+  DCHECK(IsFullCanvasCompositeMode(GetState().GlobalComposite()) || filter);
   SkMatrix ctm = c->getTotalMatrix();
   c->setMatrix(SkMatrix::I());
   PaintFlags composite_flags;
diff --git a/third_party/WebKit/Source/modules/canvas2d/CanvasStyle.cpp b/third_party/WebKit/Source/modules/canvas2d/CanvasStyle.cpp
index 43dfce4..9221ea6 100644
--- a/third_party/WebKit/Source/modules/canvas2d/CanvasStyle.cpp
+++ b/third_party/WebKit/Source/modules/canvas2d/CanvasStyle.cpp
@@ -128,7 +128,7 @@
 RGBA32 CanvasStyle::PaintColor() const {
   if (type_ == kColorRGBA)
     return rgba_;
-  ASSERT(type_ == kGradient || type_ == kImagePattern);
+  DCHECK(type_ == kGradient || type_ == kImagePattern);
   return Color::kBlack;
 }
 
diff --git a/third_party/WebKit/Source/modules/canvas2d/CanvasStyle.h b/third_party/WebKit/Source/modules/canvas2d/CanvasStyle.h
index 434e2451..f6b8af7 100644
--- a/third_party/WebKit/Source/modules/canvas2d/CanvasStyle.h
+++ b/third_party/WebKit/Source/modules/canvas2d/CanvasStyle.h
@@ -48,7 +48,7 @@
   static CanvasStyle* CreateFromPattern(CanvasPattern*);
 
   String GetColor() const {
-    ASSERT(type_ == kColorRGBA);
+    DCHECK_EQ(type_, kColorRGBA);
     return Color(rgba_).Serialized();
   }
   CanvasGradient* GetCanvasGradient() const { return gradient_.Get(); }
diff --git a/third_party/WebKit/Source/modules/credentialmanager/CredentialsContainer.cpp b/third_party/WebKit/Source/modules/credentialmanager/CredentialsContainer.cpp
index 0a703fc..ff35965 100644
--- a/third_party/WebKit/Source/modules/credentialmanager/CredentialsContainer.cpp
+++ b/third_party/WebKit/Source/modules/credentialmanager/CredentialsContainer.cpp
@@ -104,7 +104,7 @@
       return;
     }
 
-    ASSERT(credential->IsPasswordCredential() ||
+    DCHECK(credential->IsPasswordCredential() ||
            credential->IsFederatedCredential());
     UseCounter::Count(ExecutionContext::From(resolver_->GetScriptState()),
                       UseCounter::kCredentialManagerGetReturnedCredential);
diff --git a/third_party/WebKit/Source/modules/crypto/CryptoKey.cpp b/third_party/WebKit/Source/modules/crypto/CryptoKey.cpp
index 7da91dab..4e68917f 100644
--- a/third_party/WebKit/Source/modules/crypto/CryptoKey.cpp
+++ b/third_party/WebKit/Source/modules/crypto/CryptoKey.cpp
@@ -110,7 +110,7 @@
 
   virtual void SetAlgorithm(const char* property_name,
                             const WebCryptoAlgorithm& algorithm) {
-    ASSERT(algorithm.ParamsType() == kWebCryptoAlgorithmParamsTypeNone);
+    DCHECK_EQ(algorithm.ParamsType(), kWebCryptoAlgorithmParamsTypeNone);
 
     V8ObjectBuilder algorithm_value(builder_.GetScriptState());
     algorithm_value.AddString(
diff --git a/third_party/WebKit/Source/modules/navigatorcontentutils/testing/InternalsNavigatorContentUtils.cpp b/third_party/WebKit/Source/modules/navigatorcontentutils/testing/InternalsNavigatorContentUtils.cpp
index a58c065..9d8278a9 100644
--- a/third_party/WebKit/Source/modules/navigatorcontentutils/testing/InternalsNavigatorContentUtils.cpp
+++ b/third_party/WebKit/Source/modules/navigatorcontentutils/testing/InternalsNavigatorContentUtils.cpp
@@ -15,7 +15,8 @@
 void InternalsNavigatorContentUtils::setNavigatorContentUtilsClientMock(
     Internals&,
     Document* document) {
-  ASSERT(document && document->GetPage());
+  DCHECK(document);
+  DCHECK(document->GetPage());
   NavigatorContentUtils* navigator_content_utils =
       NavigatorContentUtils::From(*document->domWindow()->navigator());
   navigator_content_utils->SetClientForTest(
diff --git a/third_party/WebKit/Source/modules/netinfo/NetworkInformation.cpp b/third_party/WebKit/Source/modules/netinfo/NetworkInformation.cpp
index eb7ddec..02f0374 100644
--- a/third_party/WebKit/Source/modules/netinfo/NetworkInformation.cpp
+++ b/third_party/WebKit/Source/modules/netinfo/NetworkInformation.cpp
@@ -116,7 +116,7 @@
 }
 
 bool NetworkInformation::HasPendingActivity() const {
-  ASSERT(context_stopped_ || observing_ == HasEventListeners());
+  DCHECK(context_stopped_ || observing_ == HasEventListeners());
 
   // Prevent collection of this object when there are active listeners.
   return observing_;
diff --git a/third_party/WebKit/Source/modules/presentation/PresentationConnection.cpp b/third_party/WebKit/Source/modules/presentation/PresentationConnection.cpp
index 9afc9f60..c53e1566 100644
--- a/third_party/WebKit/Source/modules/presentation/PresentationConnection.cpp
+++ b/third_party/WebKit/Source/modules/presentation/PresentationConnection.cpp
@@ -34,7 +34,8 @@
 
 // TODO(mlamouri): refactor in one common place.
 WebPresentationClient* PresentationClient(ExecutionContext* execution_context) {
-  ASSERT(execution_context && execution_context->IsDocument());
+  DCHECK(execution_context);
+  DCHECK(execution_context->IsDocument());
 
   Document* document = ToDocument(execution_context);
   if (!document->GetFrame())
@@ -274,7 +275,8 @@
 
 void PresentationConnection::send(DOMArrayBuffer* array_buffer,
                                   ExceptionState& exception_state) {
-  ASSERT(array_buffer && array_buffer->Buffer());
+  DCHECK(array_buffer);
+  DCHECK(array_buffer->Buffer());
   if (!CanSendMessage(exception_state))
     return;
 
@@ -476,8 +478,10 @@
 }
 
 void PresentationConnection::DidFinishLoadingBlob(DOMArrayBuffer* buffer) {
-  ASSERT(!messages_.IsEmpty() && messages_.front()->type == kMessageTypeBlob);
-  ASSERT(buffer && buffer->Buffer());
+  DCHECK(!messages_.IsEmpty());
+  DCHECK_EQ(messages_.front()->type, kMessageTypeBlob);
+  DCHECK(buffer);
+  DCHECK(buffer->Buffer());
   // Send the loaded blob immediately here and continue processing the queue.
   WebPresentationClient* client = PresentationClient(GetExecutionContext());
   if (client) {
@@ -492,7 +496,8 @@
 
 void PresentationConnection::DidFailLoadingBlob(
     FileError::ErrorCode error_code) {
-  ASSERT(!messages_.IsEmpty() && messages_.front()->type == kMessageTypeBlob);
+  DCHECK(!messages_.IsEmpty());
+  DCHECK_EQ(messages_.front()->type, kMessageTypeBlob);
   // FIXME: generate error message?
   // Ignore the current failed blob item and continue with next items.
   messages_.pop_front();
diff --git a/third_party/WebKit/Source/modules/remoteplayback/HTMLMediaElementRemotePlayback.cpp b/third_party/WebKit/Source/modules/remoteplayback/HTMLMediaElementRemotePlayback.cpp
index 9909299a..fc2e1b8 100644
--- a/third_party/WebKit/Source/modules/remoteplayback/HTMLMediaElementRemotePlayback.cpp
+++ b/third_party/WebKit/Source/modules/remoteplayback/HTMLMediaElementRemotePlayback.cpp
@@ -16,7 +16,7 @@
 bool HTMLMediaElementRemotePlayback::FastHasAttribute(
     const QualifiedName& name,
     const HTMLMediaElement& element) {
-  ASSERT(name == HTMLNames::disableremoteplaybackAttr);
+  DCHECK(name == HTMLNames::disableremoteplaybackAttr);
   return element.FastHasAttribute(name);
 }
 
@@ -25,7 +25,7 @@
     const QualifiedName& name,
     HTMLMediaElement& element,
     bool value) {
-  ASSERT(name == HTMLNames::disableremoteplaybackAttr);
+  DCHECK(name == HTMLNames::disableremoteplaybackAttr);
   element.SetBooleanAttribute(name, value);
 
   HTMLMediaElementRemotePlayback& self =
diff --git a/third_party/WebKit/Source/modules/serviceworkers/RespondWithObserver.cpp b/third_party/WebKit/Source/modules/serviceworkers/RespondWithObserver.cpp
index 19c6f1e..4d347a7f 100644
--- a/third_party/WebKit/Source/modules/serviceworkers/RespondWithObserver.cpp
+++ b/third_party/WebKit/Source/modules/serviceworkers/RespondWithObserver.cpp
@@ -45,7 +45,7 @@
 
   ScriptValue Call(ScriptValue value) override {
     DCHECK(observer_);
-    ASSERT(resolve_type_ == kFulfilled || resolve_type_ == kRejected);
+    DCHECK(resolve_type_ == kFulfilled || resolve_type_ == kRejected);
     if (resolve_type_ == kRejected) {
       observer_->ResponseWasRejected(
           kWebServiceWorkerResponseErrorPromiseRejected);
diff --git a/third_party/WebKit/Source/modules/serviceworkers/ServiceWorker.cpp b/third_party/WebKit/Source/modules/serviceworkers/ServiceWorker.cpp
index 5456aea..af6d302 100644
--- a/third_party/WebKit/Source/modules/serviceworkers/ServiceWorker.cpp
+++ b/third_party/WebKit/Source/modules/serviceworkers/ServiceWorker.cpp
@@ -143,7 +143,7 @@
   ServiceWorker* existing_worker =
       static_cast<ServiceWorker*>(handle->ServiceWorker()->Proxy());
   if (existing_worker) {
-    ASSERT(existing_worker->GetExecutionContext() == execution_context);
+    DCHECK_EQ(existing_worker->GetExecutionContext(), execution_context);
     return existing_worker;
   }
 
diff --git a/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerContainer.cpp b/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerContainer.cpp
index 938a10f..1257bea 100644
--- a/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerContainer.cpp
+++ b/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerContainer.cpp
@@ -111,7 +111,7 @@
 
   void OnSuccess(
       std::unique_ptr<WebServiceWorkerRegistration::Handle> handle) override {
-    ASSERT(ready_->GetState() == ReadyProperty::kPending);
+    DCHECK_EQ(ready_->GetState(), ReadyProperty::kPending);
 
     if (ready_->GetExecutionContext() &&
         !ready_->GetExecutionContext()->IsContextDestroyed()) {
diff --git a/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerError.cpp b/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerError.cpp
index aba7a34..d06c4b0a 100644
--- a/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerError.cpp
+++ b/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerError.cpp
@@ -122,7 +122,7 @@
 DOMException* ServiceWorkerError::Take(ScriptPromiseResolver*,
                                        const WebServiceWorkerError& web_error) {
   ExceptionParams params = GetExceptionParams(web_error);
-  ASSERT(params.code != kUnknownError);
+  DCHECK_NE(params.code, kUnknownError);
   return DOMException::Create(params.code, params.message);
 }
 
diff --git a/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerRegistration.cpp b/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerRegistration.cpp
index d25cec8e..7513bbb0 100644
--- a/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerRegistration.cpp
+++ b/third_party/WebKit/Source/modules/serviceworkers/ServiceWorkerRegistration.cpp
@@ -71,7 +71,7 @@
   ServiceWorkerRegistration* existing_registration =
       static_cast<ServiceWorkerRegistration*>(handle->Registration()->Proxy());
   if (existing_registration) {
-    ASSERT(existing_registration->GetExecutionContext() == execution_context);
+    DCHECK_EQ(existing_registration->GetExecutionContext(), execution_context);
     return existing_registration;
   }
 
diff --git a/third_party/WebKit/Source/modules/serviceworkers/WaitUntilObserver.cpp b/third_party/WebKit/Source/modules/serviceworkers/WaitUntilObserver.cpp
index 0b386a96..d8056ae 100644
--- a/third_party/WebKit/Source/modules/serviceworkers/WaitUntilObserver.cpp
+++ b/third_party/WebKit/Source/modules/serviceworkers/WaitUntilObserver.cpp
@@ -63,7 +63,7 @@
 
   ScriptValue Call(ScriptValue value) override {
     DCHECK(observer_);
-    ASSERT(resolve_type_ == kFulfilled || resolve_type_ == kRejected);
+    DCHECK(resolve_type_ == kFulfilled || resolve_type_ == kRejected);
     if (resolve_type_ == kRejected) {
       observer_->OnPromiseRejected();
       value =
@@ -158,7 +158,7 @@
 }
 
 void WaitUntilObserver::DecrementPendingActivity() {
-  ASSERT(pending_activity_ > 0);
+  DCHECK_GT(pending_activity_, 0);
   if (!execution_context_ ||
       (event_dispatch_state_ != EventDispatchState::kFailed &&
        --pending_activity_))
diff --git a/third_party/WebKit/Source/modules/speech/SpeechRecognition.cpp b/third_party/WebKit/Source/modules/speech/SpeechRecognition.cpp
index 21c26a62..d6ef052 100644
--- a/third_party/WebKit/Source/modules/speech/SpeechRecognition.cpp
+++ b/third_party/WebKit/Source/modules/speech/SpeechRecognition.cpp
@@ -37,7 +37,8 @@
 namespace blink {
 
 SpeechRecognition* SpeechRecognition::Create(ExecutionContext* context) {
-  ASSERT(context && context->IsDocument());
+  DCHECK(context);
+  DCHECK(context->IsDocument());
   Document* document = ToDocument(context);
   DCHECK(document);
   return new SpeechRecognition(document->GetPage(), context);
diff --git a/third_party/WebKit/Source/modules/webgl/WebGL2RenderingContextBase.cpp b/third_party/WebKit/Source/modules/webgl/WebGL2RenderingContextBase.cpp
index f91cec74..33e748c 100644
--- a/third_party/WebKit/Source/modules/webgl/WebGL2RenderingContextBase.cpp
+++ b/third_party/WebKit/Source/modules/webgl/WebGL2RenderingContextBase.cpp
@@ -610,7 +610,7 @@
   }
 
   WebGLFramebuffer* framebuffer_binding = GetFramebufferBinding(target);
-  ASSERT(framebuffer_binding || GetDrawingBuffer());
+  DCHECK(framebuffer_binding || GetDrawingBuffer());
   if (!framebuffer_binding) {
     // For the default framebuffer, translate GL_COLOR/GL_DEPTH/GL_STENCIL.
     // The default framebuffer of WebGL is not fb 0, it is an internal fbo.
@@ -5313,7 +5313,7 @@
   }
 
   WebGLFramebuffer* framebuffer_binding = GetFramebufferBinding(target);
-  ASSERT(framebuffer_binding || GetDrawingBuffer());
+  DCHECK(framebuffer_binding || GetDrawingBuffer());
   if (!framebuffer_binding) {
     // for the default framebuffer
     switch (attachment) {
@@ -5364,7 +5364,7 @@
     return ScriptValue::CreateNull(script_state);
 
   WebGLFramebuffer* framebuffer_binding = GetFramebufferBinding(target);
-  ASSERT(!framebuffer_binding || framebuffer_binding->Object());
+  DCHECK(!framebuffer_binding || framebuffer_binding->Object());
 
   // Default framebuffer (an internal fbo)
   if (!framebuffer_binding) {
@@ -5447,7 +5447,7 @@
         return ScriptValue::CreateNull(script_state);
     }
   }
-  ASSERT(attachment_object->IsTexture() || attachment_object->IsRenderbuffer());
+  DCHECK(attachment_object->IsTexture() || attachment_object->IsRenderbuffer());
 
   switch (pname) {
     case GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE:
diff --git a/third_party/WebKit/Source/modules/webgl/WebGLFramebuffer.cpp b/third_party/WebKit/Source/modules/webgl/WebGLFramebuffer.cpp
index a001e4e..2bbaf7e 100644
--- a/third_party/WebKit/Source/modules/webgl/WebGLFramebuffer.cpp
+++ b/third_party/WebKit/Source/modules/webgl/WebGLFramebuffer.cpp
@@ -533,7 +533,7 @@
 
 GLenum WebGLFramebuffer::GetDrawBuffer(GLenum draw_buffer) {
   int index = static_cast<int>(draw_buffer - GL_DRAW_BUFFER0_EXT);
-  ASSERT(index >= 0);
+  DCHECK_GE(index, 0);
   if (index < static_cast<int>(draw_buffers_.size()))
     return draw_buffers_[index];
   if (draw_buffer == GL_DRAW_BUFFER0_EXT)
diff --git a/third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.cpp b/third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.cpp
index 1294059..6e892c1 100644
--- a/third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.cpp
+++ b/third_party/WebKit/Source/modules/webgl/WebGLRenderingContextBase.cpp
@@ -2875,7 +2875,7 @@
     return ScriptValue::CreateNull(script_state);
   }
 
-  ASSERT(attachment_object->IsTexture() || attachment_object->IsRenderbuffer());
+  DCHECK(attachment_object->IsTexture() || attachment_object->IsRenderbuffer());
   if (attachment_object->IsTexture()) {
     switch (pname) {
       case GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE:
@@ -6266,7 +6266,7 @@
     return;
 
   context_lost_mode_ = mode;
-  ASSERT(context_lost_mode_ != kNotLostContext);
+  DCHECK_NE(context_lost_mode_, kNotLostContext);
   auto_recovery_method_ = auto_recovery_method;
 
   // Lose all the extensions.
@@ -6339,7 +6339,7 @@
     extensions_util_ = Extensions3DUtil::Create(gl);
     // The only reason the ExtensionsUtil should be invalid is if the gl context
     // is lost.
-    ASSERT(extensions_util_->IsValid() ||
+    DCHECK(extensions_util_->IsValid() ||
            gl->GetGraphicsResetStatusKHR() != GL_NO_ERROR);
   }
   return extensions_util_.get();
diff --git a/third_party/WebKit/Source/modules/webgl/WebGLSharedPlatform3DObject.cpp b/third_party/WebKit/Source/modules/webgl/WebGLSharedPlatform3DObject.cpp
index 36f9ef39..2e5fa35 100644
--- a/third_party/WebKit/Source/modules/webgl/WebGLSharedPlatform3DObject.cpp
+++ b/third_party/WebKit/Source/modules/webgl/WebGLSharedPlatform3DObject.cpp
@@ -14,7 +14,8 @@
 
 void WebGLSharedPlatform3DObject::SetObject(GLuint object) {
   // object==0 && deleted==false indicating an uninitialized state;
-  ASSERT(!object_ && !IsDeleted());
+  DCHECK(!object_);
+  DCHECK(!IsDeleted());
   object_ = object;
 }
 
diff --git a/third_party/WebKit/Source/modules/webgl/WebGLTexture.cpp b/third_party/WebKit/Source/modules/webgl/WebGLTexture.cpp
index 05958bcb..f61d7fc 100644
--- a/third_party/WebKit/Source/modules/webgl/WebGLTexture.cpp
+++ b/third_party/WebKit/Source/modules/webgl/WebGLTexture.cpp
@@ -105,7 +105,7 @@
       log += shift;
     }
   }
-  ASSERT(value == 1);
+  DCHECK_EQ(value, 1);
   return log + 1;
 }
 
diff --git a/third_party/WebKit/Source/modules/webgl/WebGLUniformLocation.cpp b/third_party/WebKit/Source/modules/webgl/WebGLUniformLocation.cpp
index 2aeb45a..302157b 100644
--- a/third_party/WebKit/Source/modules/webgl/WebGLUniformLocation.cpp
+++ b/third_party/WebKit/Source/modules/webgl/WebGLUniformLocation.cpp
@@ -51,7 +51,7 @@
 GLint WebGLUniformLocation::Location() const {
   // If the program has been linked again, then this UniformLocation is no
   // longer valid.
-  ASSERT(program_->LinkCount() == link_count_);
+  DCHECK_EQ(program_->LinkCount(), link_count_);
   return location_;
 }
 
diff --git a/third_party/WebKit/Source/modules/webusb/USBAlternateInterface.cpp b/third_party/WebKit/Source/modules/webusb/USBAlternateInterface.cpp
index 9eac61f..30f520c 100644
--- a/third_party/WebKit/Source/modules/webusb/USBAlternateInterface.cpp
+++ b/third_party/WebKit/Source/modules/webusb/USBAlternateInterface.cpp
@@ -33,14 +33,14 @@
                                              size_t alternate_index)
     : interface_(interface), alternate_index_(alternate_index) {
   DCHECK(interface_);
-  ASSERT(alternate_index_ < interface_->Info().alternates.size());
+  DCHECK_LT(alternate_index_, interface_->Info().alternates.size());
 }
 
 const device::mojom::blink::UsbAlternateInterfaceInfo&
 USBAlternateInterface::Info() const {
   const device::mojom::blink::UsbInterfaceInfo& interface_info =
       interface_->Info();
-  ASSERT(alternate_index_ < interface_info.alternates.size());
+  DCHECK_LT(alternate_index_, interface_info.alternates.size());
   return *interface_info.alternates[alternate_index_];
 }
 
diff --git a/third_party/WebKit/Source/modules/webusb/USBConfiguration.cpp b/third_party/WebKit/Source/modules/webusb/USBConfiguration.cpp
index 05ab6eb..22e74b96 100644
--- a/third_party/WebKit/Source/modules/webusb/USBConfiguration.cpp
+++ b/third_party/WebKit/Source/modules/webusb/USBConfiguration.cpp
@@ -32,7 +32,7 @@
                                    size_t configuration_index)
     : device_(device), configuration_index_(configuration_index) {
   DCHECK(device_);
-  ASSERT(configuration_index_ < device_->Info().configurations.size());
+  DCHECK_LT(configuration_index_, device_->Info().configurations.size());
 }
 
 const USBDevice* USBConfiguration::Device() const {
diff --git a/third_party/WebKit/Source/modules/webusb/USBDevice.cpp b/third_party/WebKit/Source/modules/webusb/USBDevice.cpp
index 03bd0ff3..69d40e3 100644
--- a/third_party/WebKit/Source/modules/webusb/USBDevice.cpp
+++ b/third_party/WebKit/Source/modules/webusb/USBDevice.cpp
@@ -281,7 +281,7 @@
   if (EnsureInterfaceClaimed(interface_number, resolver)) {
     // TODO(reillyg): This is duplicated work.
     int interface_index = FindInterfaceIndex(interface_number);
-    ASSERT(interface_index != -1);
+    DCHECK_NE(interface_index, -1);
     int alternate_index =
         FindAlternateIndex(interface_index, alternate_setting);
     if (alternate_index == -1) {
@@ -486,7 +486,7 @@
 }
 
 int USBDevice::FindInterfaceIndex(uint8_t interface_number) const {
-  ASSERT(configuration_index_ != -1);
+  DCHECK_NE(configuration_index_, -1);
   const auto& interfaces =
       Info().configurations[configuration_index_]->interfaces;
   for (size_t i = 0; i < interfaces.size(); ++i) {
@@ -498,7 +498,7 @@
 
 int USBDevice::FindAlternateIndex(size_t interface_index,
                                   uint8_t alternate_setting) const {
-  ASSERT(configuration_index_ != -1);
+  DCHECK_NE(configuration_index_, -1);
   const auto& alternates = Info()
                                .configurations[configuration_index_]
                                ->interfaces[interface_index]
diff --git a/third_party/WebKit/Source/modules/webusb/USBEndpoint.cpp b/third_party/WebKit/Source/modules/webusb/USBEndpoint.cpp
index 4c25e8c..777cd9c 100644
--- a/third_party/WebKit/Source/modules/webusb/USBEndpoint.cpp
+++ b/third_party/WebKit/Source/modules/webusb/USBEndpoint.cpp
@@ -72,13 +72,13 @@
                          size_t endpoint_index)
     : alternate_(alternate), endpoint_index_(endpoint_index) {
   DCHECK(alternate_);
-  ASSERT(endpoint_index_ < alternate_->Info().endpoints.size());
+  DCHECK_LT(endpoint_index_, alternate_->Info().endpoints.size());
 }
 
 const device::mojom::blink::UsbEndpointInfo& USBEndpoint::Info() const {
   const device::mojom::blink::UsbAlternateInterfaceInfo& alternate_info =
       alternate_->Info();
-  ASSERT(endpoint_index_ < alternate_info.endpoints.size());
+  DCHECK_LT(endpoint_index_, alternate_info.endpoints.size());
   return *alternate_info.endpoints[endpoint_index_];
 }
 
diff --git a/third_party/WebKit/Source/modules/webusb/USBInterface.cpp b/third_party/WebKit/Source/modules/webusb/USBInterface.cpp
index b4c0de8..b930328 100644
--- a/third_party/WebKit/Source/modules/webusb/USBInterface.cpp
+++ b/third_party/WebKit/Source/modules/webusb/USBInterface.cpp
@@ -37,9 +37,9 @@
     : device_(device),
       configuration_index_(configuration_index),
       interface_index_(interface_index) {
-  ASSERT(configuration_index_ < device_->Info().configurations.size());
-  ASSERT(
-      interface_index_ <
+  DCHECK_LT(configuration_index_, device_->Info().configurations.size());
+  DCHECK_LT(
+      interface_index_,
       device_->Info().configurations[configuration_index_]->interfaces.size());
 }
 
diff --git a/third_party/WebKit/Source/platform/transforms/TransformationMatrix.h b/third_party/WebKit/Source/platform/transforms/TransformationMatrix.h
index a3d40edf..6e8e2b94 100644
--- a/third_party/WebKit/Source/platform/transforms/TransformationMatrix.h
+++ b/third_party/WebKit/Source/platform/transforms/TransformationMatrix.h
@@ -504,8 +504,9 @@
 #if defined(TRANSFORMATION_MATRIX_USE_X86_64_SSE2)
     // m_matrix can cause this class to require higher than usual alignment.
     // Make sure the allocator handles this.
-    DCHECK((reinterpret_cast<uintptr_t>(this) &
-            (WTF_ALIGN_OF(TransformationMatrix) - 1)) == 0);
+    DCHECK_EQ((reinterpret_cast<uintptr_t>(this) &
+               (WTF_ALIGN_OF(TransformationMatrix) - 1)),
+              0UL);
 #endif
   }
 
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml
index 817545cb..a2e47af 100644
--- a/tools/metrics/histograms/enums.xml
+++ b/tools/metrics/histograms/enums.xml
@@ -34791,6 +34791,28 @@
   <int value="25" label="Bubble not shown: editable field is active"/>
 </enum>
 
+<enum name="TranslateCompactUIEvent" type="int">
+  <int value="0" label="Infobar impression"/>
+  <int value="1" label="Tab language clicked"/>
+  <int value="2" label="Infobar closed"/>
+  <int value="3" label="Options menu clicked"/>
+  <int value="4" label="More languages clicked"/>
+  <int value="5" label="Language picked from more languages"/>
+  <int value="6" label="Page not in language clicked"/>
+  <int value="7" label="Always translate clicked"/>
+  <int value="8" label="Never translate clicked"/>
+  <int value="9" label="Never translate site clicked"/>
+  <int value="10" label="Infobar hidden on scroll"/>
+  <int value="11" label="Infobar shown on scroll"/>
+  <int value="12" label="Show original language clicked"/>
+  <int value="13" label="Always translate snackbar impression"/>
+  <int value="14" label="Never translate snackbar impression"/>
+  <int value="15" label="Never translate site snackbar impression"/>
+  <int value="16" label="Cancel clicked on always translate snackbar"/>
+  <int value="17" label="Cancel clicked on never translate this site snackbar"/>
+  <int value="18" label="Cancel clicked on never translate snackbar"/>
+</enum>
+
 <enum name="TranslateError" type="int">
   <int value="0" label="No error"/>
   <int value="1" label="Network error"/>
diff --git a/tools/metrics/histograms/histograms.xml b/tools/metrics/histograms/histograms.xml
index 7549171..6d5db71 100644
--- a/tools/metrics/histograms/histograms.xml
+++ b/tools/metrics/histograms/histograms.xml
@@ -42875,6 +42875,9 @@
 
 <histogram name="NewTabPage.Interests.ImageDownloadSuccess"
     enum="BooleanSuccess">
+  <obsolete>
+    Deprecated 2017-05 (and not recorded for some time before that).
+  </obsolete>
   <owner>knn@chromium.org</owner>
   <summary>
     Android: Whether an attempt to download the image for an interest was
@@ -42884,6 +42887,9 @@
 
 <histogram name="NewTabPage.Interests.InterestsFetchSuccess"
     enum="BooleanSuccess">
+  <obsolete>
+    Deprecated 2017-05 (and not recorded for some time before that).
+  </obsolete>
   <owner>knn@chromium.org</owner>
   <summary>
     Android: Whether an attempt to fetch the interests for a user was
@@ -42892,6 +42898,9 @@
 </histogram>
 
 <histogram name="NewTabPage.Interests.NumInterests" units="interests">
+  <obsolete>
+    Deprecated 2017-05 (and not recorded for some time before that).
+  </obsolete>
   <owner>knn@chromium.org</owner>
   <summary>
     Android: The number of interests fetched for a user to display on the NTP.
@@ -42918,7 +42927,7 @@
 </histogram>
 
 <histogram name="NewTabPage.LoadTime" units="ms">
-  <owner>fserb@chromium.org</owner>
+  <owner>treib@chromium.org</owner>
   <summary>
     Histogram of the time, in milliseconds, it took for the NTP to load all of
     its tiles since navigation start.
@@ -43007,9 +43016,9 @@
 </histogram>
 
 <histogram name="NewTabPage.MostVisited" enum="MostVisitedTileIndex">
-  <owner>beaudoin@chromium.org</owner>
   <owner>justincohen@chromium.org</owner>
-  <owner>newt@chromium.org</owner>
+  <owner>mastiz@chromium.org</owner>
+  <owner>treib@chromium.org</owner>
   <summary>
     Histogram for user clicks of the most visited tile. The value is equal to
     the index of the tile.
@@ -43196,7 +43205,7 @@
 </histogram>
 
 <histogram name="NewTabPage.NumberOfTiles">
-  <owner>beaudoin@chromium.org</owner>
+  <owner>treib@chromium.org</owner>
   <summary>
     The number of tiles that are displayed on the NTP, no matter if they are
     thumbnails, gray tiles, or external tiles. Recorded before reloading the
@@ -43601,7 +43610,7 @@
 </histogram>
 
 <histogram name="NewTabPage.Snippets.EnteredState" enum="NTPSnippetsState">
-  <owner>knn@chromium.org</owner>
+  <owner>treib@chromium.org</owner>
   <summary>
     Android: The state of the RemoteSuggestionsProvider. Recorded when the state
     changes, typically once at startup and rarely afterwards, e.g. on database
@@ -43669,7 +43678,7 @@
 </histogram>
 
 <histogram name="NewTabPage.Snippets.NumArticles" units="articles">
-  <owner>knn@chromium.org</owner>
+  <owner>treib@chromium.org</owner>
   <summary>
     Android: The number of snippet articles available to show on the NTP, logged
     once every time the list is updated.
@@ -43707,7 +43716,7 @@
 </histogram>
 
 <histogram name="NewTabPage.Snippets.NumIncompleteSnippets" units="snippets">
-  <owner>maybelle@chromium.org</owner>
+  <owner>treib@chromium.org</owner>
   <summary>
     The number of snippets that we discard per fetch due to having incomplete
     data.
@@ -43773,7 +43782,7 @@
 </histogram>
 
 <histogram name="NewTabPage.SuggestionsImpression" enum="MostVisitedTileIndex">
-  <owner>beaudoin@chromium.org</owner>
+  <owner>treib@chromium.org</owner>
   <summary>
     Histogram for impressions on the various most visited tiles. The value is
     equal to the index of the thumbnail.
@@ -43862,7 +43871,7 @@
 </histogram>
 
 <histogram name="NewTabPage.TimeSpent" units="ms">
-  <owner>knn@chromium.org</owner>
+  <owner>bauerb@chromium.org</owner>
   <summary>
     The time spent on the new tab page as measured from when it was loaded or
     last brought to the foreground until it was navigated away from or hidden.
@@ -43871,7 +43880,7 @@
 </histogram>
 
 <histogram name="NewTabPage.URLState" enum="NewTabURLState">
-  <owner>beaudoin@chromium.org</owner>
+  <owner>treib@chromium.org</owner>
   <summary>
     Records the status of the New Tab page URL when an NTP is opened.
   </summary>
@@ -75715,6 +75724,54 @@
   </summary>
 </histogram>
 
+<histogram name="Translate.CompactInfobar.Event" enum="TranslateCompactUIEvent">
+  <owner>ramyasharma@google.com</owner>
+  <summary>Various user actions performed in the translate infobar.</summary>
+</histogram>
+
+<histogram name="Translate.CompactInfobar.Language.AlwaysTranslate"
+    enum="CLD3LanguageCode">
+  <owner>ramyasharma@google.com</owner>
+  <summary>
+    Records the hashcode of the source language when always translate this
+    language option is clicked in the menu.
+  </summary>
+</histogram>
+
+<histogram name="Translate.CompactInfobar.Language.MoreLanguages"
+    enum="CLD3LanguageCode">
+  <owner>ramyasharma@google.com</owner>
+  <summary>
+    Records the hashcode of the language clicked on the more languages menu.
+  </summary>
+</histogram>
+
+<histogram name="Translate.CompactInfobar.Language.NeverTranslate"
+    enum="CLD3LanguageCode">
+  <owner>ramyasharma@google.com</owner>
+  <summary>
+    Records the hashcode of the source language when never translate this
+    language option is clicked in the menu.
+  </summary>
+</histogram>
+
+<histogram name="Translate.CompactInfobar.Language.PageNotIn"
+    enum="CLD3LanguageCode">
+  <owner>ramyasharma@google.com</owner>
+  <summary>
+    Records the hashcode of the language clicked on the menu to indicate the
+    page is not in the selected language.
+  </summary>
+</histogram>
+
+<histogram name="Translate.CompactInfobar.Language.Translate"
+    enum="CLD3LanguageCode">
+  <owner>ramyasharma@google.com</owner>
+  <summary>
+    Records the hashcode of the language clicked on the infobar.
+  </summary>
+</histogram>
+
 <histogram name="Translate.ContentLanguage" enum="TranslateLanguage">
   <owner>kenjibaheux@google.com</owner>
   <summary>