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>