Commit 72c376b3 authored by Tom Lukaszewicz's avatar Tom Lukaszewicz Committed by Josip Sokcevic

Tab Search: Update Tab Search to use chunked rendering

This CL uses Polymer's dom-repeat chunking mode for the Tab Search
list items. This allows an initial small list of tabs to be rendered,
allowing the bubble appear at the correct size without waiting for
the entire list to render.

Bug: 1099917
Change-Id: Ib30d69923383e37e8241f62ed546ddb9ad73bbfd
Reviewed-on: https://chrome-internal-review.googlesource.com/c/chrome/browser/resources/tab_search/+/3270637Reviewed-by: default avatarJohn Lee <johntlee@chromium.org>
Cr-Commit-Position: refs/heads/master@{#819600}
parent c97ab64a
...@@ -61,7 +61,8 @@ ...@@ -61,7 +61,8 @@
<div id="tabs"> <div id="tabs">
<iron-selector id="selector" on-keydown="onItemKeyDown_" <iron-selector id="selector" on-keydown="onItemKeyDown_"
selected="{{selectedIndex_}}" selected-class="selected"> selected="{{selectedIndex_}}" selected-class="selected">
<template id="tabsList" is="dom-repeat" items="[[filteredOpenTabs_]]"> <template id="tabsList" is="dom-repeat" items="[[filteredOpenTabs_]]"
initial-count="[[chunkingItemCount_]]">
<tab-search-item id="[[item.tabId]]" class="mwb-list-item" data="[[item]]" <tab-search-item id="[[item.tabId]]" class="mwb-list-item" data="[[item]]"
on-click="onItemClick_" on-close="onItemClose_" on-click="onItemClick_" on-close="onItemClose_"
on-focus="onItemFocus_" tabindex="0" > on-focus="onItemFocus_" tabindex="0" >
......
...@@ -49,6 +49,17 @@ export class TabSearchAppElement extends PolymerElement { ...@@ -49,6 +49,17 @@ export class TabSearchAppElement extends PolymerElement {
type: Array, type: Array,
value: [], value: [],
}, },
/**
* Controls the number of tab search list items initially rendered in
* dom-repeat's chunked rendering mode.
* @private {number}
*/
chunkingItemCount_: {
type: Number,
readOnly: true,
value: 10,
},
}; };
} }
...@@ -89,8 +100,8 @@ export class TabSearchAppElement extends PolymerElement { ...@@ -89,8 +100,8 @@ export class TabSearchAppElement extends PolymerElement {
if (!this.openTabs_) { if (!this.openTabs_) {
listenOnce(this.$.tabsList, 'rendered-item-count-changed', e => { listenOnce(this.$.tabsList, 'rendered-item-count-changed', e => {
const event = /** @type {!CustomEvent<!{value: number}>} */ (e); const event = /** @type {!CustomEvent<!{value: number}>} */ (e);
// Ensure that the full list of tabs has been rendered. // The initial rendered tab list must be non-zero.
assert(event.detail.value === this.filteredOpenTabs_.length); assert(event.detail.value > 0);
// Push showUI() to the event loop to allow reflow to occur following // Push showUI() to the event loop to allow reflow to occur following
// the DOM update. // the DOM update.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment