1diff --git a/components-chromium/font-roboto/roboto.js b/components-chromium/font-roboto/roboto.js
2index 02aebd81b0df..342d26d6f797 100644
3--- a/components-chromium/font-roboto/roboto.js
4+++ b/components-chromium/font-roboto/roboto.js
5@@ -17,7 +17,6 @@ if (!window.polymerSkipLoadingFontRoboto) {
6   link.rel = 'stylesheet';
7   link.type = 'text/css';
8   link.crossOrigin = 'anonymous';
9-  link.href =
10-      'https://fonts.googleapis.com/css?family=Roboto+Mono:400,700|Roboto:400,300,300italic,400italic,500,500italic,700,700italic';
11+  link.href = 'chrome://resources/css/roboto.css';
12   document.head.appendChild(link);
13 }
14--- a/components-chromium/iron-a11y-announcer/iron-a11y-announcer.js
15+++ b/components-chromium/iron-a11y-announcer/iron-a11y-announcer.js
16@@ -46,7 +46,7 @@ Note: announcements are only audible if you have a screen reader enabled.
17 @group Iron Elements
18 @demo demo/index.html
19 */
20-export const IronA11yAnnouncer = Polymer({
21+export var IronA11yAnnouncer = Polymer({
22   _template: html`
23     <style>
24       :host {
25--- a/components-chromium/iron-iconset-svg/iron-iconset-svg.js
26+++ b/components-chromium/iron-iconset-svg/iron-iconset-svg.js
27@@ -134,6 +134,18 @@ Polymer({
28     return null;
29   },
30
31+  /**
32+   * Produce installable clone of the SVG element matching `id` in this
33+   * iconset, or `undefined` if there is no matching element.
34+   * @param {string} iconName Name of the icon to apply.
35+   * @param {boolean} targetIsRTL Whether the target element is RTL.
36+   * @return {Element} Returns an installable clone of the SVG element
37+   *     matching `id`.
38+   */
39+  createIcon: function(iconName, targetIsRTL) {
40+    return this._cloneIcon(iconName, this.rtlMirroring && targetIsRTL);
41+  },
42+
43   /**
44    * Remove an icon from the given element by undoing the changes effected
45    * by `applyIcon`.
46diff --git a/components-chromium/polymer/lib/legacy/legacy-element-mixin.js b/components-chromium/polymer/lib/legacy/legacy-element-mixin.js
47index 21fa65c0208d..bd591b6dd341 100644
48--- a/components-chromium/polymer/lib/legacy/legacy-element-mixin.js
49+++ b/components-chromium/polymer/lib/legacy/legacy-element-mixin.js
50@@ -10,7 +10,6 @@ subject to an additional IP rights grant found at http://polymer.github.io/PATEN
51 import '../../../shadycss/entrypoints/apply-shim.js';
52 import { ElementMixin } from '../mixins/element-mixin.js';
53 import { GestureEventListeners } from '../mixins/gesture-event-listeners.js';
54-import { DirMixin } from '../mixins/dir-mixin.js';
55 import { dedupingMixin } from '../utils/mixin.js';
56 import '../utils/render-status.js';
57 import '../utils/unresolved.js';
58@@ -42,11 +41,10 @@ export const LegacyElementMixin = dedupingMixin((base) => {
59    * @constructor
60    * @implements {Polymer_ElementMixin}
61    * @implements {Polymer_GestureEventListeners}
62-   * @implements {Polymer_DirMixin}
63    * @extends {HTMLElement}
64    * @private
65    */
66-  const legacyElementBase = DirMixin(GestureEventListeners(ElementMixin(base)));
67+  const legacyElementBase = GestureEventListeners(ElementMixin(base));
68
69   /**
70    * Map of simple names to touch action names
71--- a/components-chromium/polymer/lib/mixins/template-stamp.js
72+++ b/components-chromium/polymer/lib/mixins/template-stamp.js
73@@ -204,9 +204,7 @@ export const TemplateStamp = dedupingMixin(
74       if (!template._templateInfo) {
75         let templateInfo = template._templateInfo = {};
76         templateInfo.nodeInfoList = [];
77-        templateInfo.stripWhiteSpace =
78-          (outerTemplateInfo && outerTemplateInfo.stripWhiteSpace) ||
79-          template.hasAttribute('strip-whitespace');
80+        templateInfo.stripWhiteSpace = true;
81         this._parseTemplateContent(template, templateInfo, {parent: null});
82       }
83       return template._templateInfo;
84diff --git a/components-chromium/iron-list/iron-list.js b/components-chromium/iron-list/iron-list.js
85index 43c59653a39b..26652936735c 100644
86--- a/components-chromium/iron-list/iron-list.js
87+++ b/components-chromium/iron-list/iron-list.js
88@@ -376,7 +376,15 @@
89      * there's some offset between the scrolling element and the list. For
90      * example: a header is placed above the list.
91      */
92-    scrollOffset: {type: Number, value: 0}
93+    scrollOffset: {type: Number, value: 0},
94+
95+    /**
96+     * If set to true, focus on an element will be preserved after rerender.
97+     */
98+    preserveFocus: {
99+      type: Boolean,
100+      value: false
101+    }
102   },
103
104   observers: [
105@@ -1067,10 +1075,52 @@
106   },
107
108   /**
109+   * Finds and returns the focused element (both within self and children's
110+   * Shadow DOM).
111+   * @return {?HTMLElement}
112+   */
113+  _getFocusedElement: function() {
114+    function doSearch(node, query) {
115+      let result = null;
116+      let type = node.nodeType;
117+      if (type == Node.ELEMENT_NODE || type == Node.DOCUMENT_FRAGMENT_NODE)
118+        result = node.querySelector(query);
119+      if (result)
120+        return result;
121+
122+      let child = node.firstChild;
123+      while (child !== null && result === null) {
124+        result = doSearch(child, query);
125+        child = child.nextSibling;
126+      }
127+      if (result)
128+        return result;
129+
130+      const shadowRoot = node.shadowRoot;
131+      return shadowRoot ? doSearch(shadowRoot, query) : null;
132+    }
133+
134+    // Find out if any of the items are focused first, and only search
135+    // recursively in the item that contains focus, to avoid a slow
136+    // search of the entire list.
137+    const focusWithin = doSearch(this, ':focus-within');
138+    return focusWithin ? doSearch(focusWithin, ':focus') : null;
139+  },
140+
141+  /**
142    * Called when the items have changed. That is, reassignments
143    * to `items`, splices or updates to a single item.
144    */
145   _itemsChanged: function(change) {
146+    var rendering = /^items(\.splices){0,1}$/.test(change.path);
147+    var lastFocusedIndex, focusedElement;
148+    if (rendering && this.preserveFocus) {
149+      lastFocusedIndex = this._focusedVirtualIndex;
150+      focusedElement = this._getFocusedElement();
151+    }
152+
153+    var preservingFocus = rendering && this.preserveFocus && focusedElement;
154+
155     if (change.path === 'items') {
156       this._virtualStart = 0;
157       this._physicalTop = 0;
158@@ -1082,7 +1132,7 @@
159       this._physicalItems = this._physicalItems || [];
160       this._physicalSizes = this._physicalSizes || [];
161       this._physicalStart = 0;
162-      if (this._scrollTop > this._scrollOffset) {
163+      if (this._scrollTop > this._scrollOffset && !preservingFocus) {
164         this._resetScrollPosition(0);
165       }
166       this._removeFocusedItem();
167@@ -1114,6 +1164,17 @@
168     } else if (change.path !== 'items.length') {
169       this._forwardItemPath(change.path, change.value);
170     }
171+
172+    // If the list was in focus when updated, preserve the focus on item.
173+    if (preservingFocus) {
174+      flush();
175+      focusedElement.blur();  // paper- elements breaks when focused twice.
176+      this._focusPhysicalItem(
177+          Math.min(this.items.length - 1, lastFocusedIndex));
178+      if (!this._isIndexVisible(this._focusedVirtualIndex)) {
179+        this.scrollToIndex(this._focusedVirtualIndex);
180+      }
181+    }
182   },
183
184   _forwardItemPath: function(path, value) {
185diff --git a/components-chromium/iron-overlay-behavior/iron-overlay-manager.js b/components-chromium/iron-overlay-behavior/iron-overlay-manager.js
186index 99768f419688..7dd55b8077b7 100644
187--- a/components-chromium/iron-overlay-behavior/iron-overlay-manager.js
188+++ b/components-chromium/iron-overlay-behavior/iron-overlay-manager.js
189@@ -13,7 +13,7 @@ import './iron-overlay-backdrop.js';
190
191 import {IronA11yKeysBehavior} from '../iron-a11y-keys-behavior/iron-a11y-keys-behavior.js';
192 import {dom} from '../polymer/lib/legacy/polymer.dom.js';
193-import * as gestures from '../polymer/lib/utils/gestures.js';
194+import {gestures} from '../polymer/lib/utils/gestures.js';
195
196 /**
197  * @struct
198diff --git a/components-chromium/paper-tooltip/paper-tooltip.js b/components-chromium/paper-tooltip/paper-tooltip.js
199index 853eee199025..303d1bbdfc78 100644
200--- a/components-chromium/paper-tooltip/paper-tooltip.js
201+++ b/components-chromium/paper-tooltip/paper-tooltip.js
202@@ -311,12 +311,16 @@ Polymer({
203
204   /**
205    * Returns the target element that this tooltip is anchored to. It is
206-   * either the element given by the `for` attribute, or the immediate parent
207-   * of the tooltip.
208+   * either the element given by the `for` attribute, the element manually
209+   * specified through the `target` attribute, or the immediate parent of
210+   * the tooltip.
211    *
212    * @type {Node}
213    */
214   get target() {
215+    if (this._manualTarget)
216+      return this._manualTarget;
217+
218     var parentNode = dom(this).parentNode;
219     // If the parentNode is a document fragment, then we need to use the host.
220     var ownerRoot = dom(this).getOwnerRoot();
221@@ -331,6 +335,15 @@ Polymer({
222     return target;
223   },
224
225+  /**
226+   * Sets the target element that this tooltip will be anchored to.
227+   * @param {Node} target
228+   */
229+  set target(target) {
230+    this._manualTarget = target;
231+    this._findTarget();
232+  },
233+
234   /**
235    * @return {void}
236    */
237diff --git a/components-chromium/paper-styles/color.js b/components-chromium/paper-styles/color.js
238index 6af2fa359336..c56a6737e1d8 100644
239--- a/components-chromium/paper-styles/color.js
240+++ b/components-chromium/paper-styles/color.js
241@@ -81,81 +81,6 @@ const template = html`
242       --paper-red-a400: #ff1744;
243       --paper-red-a700: #d50000;
244
245-      --paper-pink-50: #fce4ec;
246-      --paper-pink-100: #f8bbd0;
247-      --paper-pink-200: #f48fb1;
248-      --paper-pink-300: #f06292;
249-      --paper-pink-400: #ec407a;
250-      --paper-pink-500: #e91e63;
251-      --paper-pink-600: #d81b60;
252-      --paper-pink-700: #c2185b;
253-      --paper-pink-800: #ad1457;
254-      --paper-pink-900: #880e4f;
255-      --paper-pink-a100: #ff80ab;
256-      --paper-pink-a200: #ff4081;
257-      --paper-pink-a400: #f50057;
258-      --paper-pink-a700: #c51162;
259-
260-      --paper-purple-50: #f3e5f5;
261-      --paper-purple-100: #e1bee7;
262-      --paper-purple-200: #ce93d8;
263-      --paper-purple-300: #ba68c8;
264-      --paper-purple-400: #ab47bc;
265-      --paper-purple-500: #9c27b0;
266-      --paper-purple-600: #8e24aa;
267-      --paper-purple-700: #7b1fa2;
268-      --paper-purple-800: #6a1b9a;
269-      --paper-purple-900: #4a148c;
270-      --paper-purple-a100: #ea80fc;
271-      --paper-purple-a200: #e040fb;
272-      --paper-purple-a400: #d500f9;
273-      --paper-purple-a700: #aa00ff;
274-
275-      --paper-deep-purple-50: #ede7f6;
276-      --paper-deep-purple-100: #d1c4e9;
277-      --paper-deep-purple-200: #b39ddb;
278-      --paper-deep-purple-300: #9575cd;
279-      --paper-deep-purple-400: #7e57c2;
280-      --paper-deep-purple-500: #673ab7;
281-      --paper-deep-purple-600: #5e35b1;
282-      --paper-deep-purple-700: #512da8;
283-      --paper-deep-purple-800: #4527a0;
284-      --paper-deep-purple-900: #311b92;
285-      --paper-deep-purple-a100: #b388ff;
286-      --paper-deep-purple-a200: #7c4dff;
287-      --paper-deep-purple-a400: #651fff;
288-      --paper-deep-purple-a700: #6200ea;
289-
290-      --paper-indigo-50: #e8eaf6;
291-      --paper-indigo-100: #c5cae9;
292-      --paper-indigo-200: #9fa8da;
293-      --paper-indigo-300: #7986cb;
294-      --paper-indigo-400: #5c6bc0;
295-      --paper-indigo-500: #3f51b5;
296-      --paper-indigo-600: #3949ab;
297-      --paper-indigo-700: #303f9f;
298-      --paper-indigo-800: #283593;
299-      --paper-indigo-900: #1a237e;
300-      --paper-indigo-a100: #8c9eff;
301-      --paper-indigo-a200: #536dfe;
302-      --paper-indigo-a400: #3d5afe;
303-      --paper-indigo-a700: #304ffe;
304-
305-      --paper-blue-50: #e3f2fd;
306-      --paper-blue-100: #bbdefb;
307-      --paper-blue-200: #90caf9;
308-      --paper-blue-300: #64b5f6;
309-      --paper-blue-400: #42a5f5;
310-      --paper-blue-500: #2196f3;
311-      --paper-blue-600: #1e88e5;
312-      --paper-blue-700: #1976d2;
313-      --paper-blue-800: #1565c0;
314-      --paper-blue-900: #0d47a1;
315-      --paper-blue-a100: #82b1ff;
316-      --paper-blue-a200: #448aff;
317-      --paper-blue-a400: #2979ff;
318-      --paper-blue-a700: #2962ff;
319-
320       --paper-light-blue-50: #e1f5fe;
321       --paper-light-blue-100: #b3e5fc;
322       --paper-light-blue-200: #81d4fa;
323@@ -171,81 +96,6 @@ const template = html`
324       --paper-light-blue-a400: #00b0ff;
325       --paper-light-blue-a700: #0091ea;
326
327-      --paper-cyan-50: #e0f7fa;
328-      --paper-cyan-100: #b2ebf2;
329-      --paper-cyan-200: #80deea;
330-      --paper-cyan-300: #4dd0e1;
331-      --paper-cyan-400: #26c6da;
332-      --paper-cyan-500: #00bcd4;
333-      --paper-cyan-600: #00acc1;
334-      --paper-cyan-700: #0097a7;
335-      --paper-cyan-800: #00838f;
336-      --paper-cyan-900: #006064;
337-      --paper-cyan-a100: #84ffff;
338-      --paper-cyan-a200: #18ffff;
339-      --paper-cyan-a400: #00e5ff;
340-      --paper-cyan-a700: #00b8d4;
341-
342-      --paper-teal-50: #e0f2f1;
343-      --paper-teal-100: #b2dfdb;
344-      --paper-teal-200: #80cbc4;
345-      --paper-teal-300: #4db6ac;
346-      --paper-teal-400: #26a69a;
347-      --paper-teal-500: #009688;
348-      --paper-teal-600: #00897b;
349-      --paper-teal-700: #00796b;
350-      --paper-teal-800: #00695c;
351-      --paper-teal-900: #004d40;
352-      --paper-teal-a100: #a7ffeb;
353-      --paper-teal-a200: #64ffda;
354-      --paper-teal-a400: #1de9b6;
355-      --paper-teal-a700: #00bfa5;
356-
357-      --paper-green-50: #e8f5e9;
358-      --paper-green-100: #c8e6c9;
359-      --paper-green-200: #a5d6a7;
360-      --paper-green-300: #81c784;
361-      --paper-green-400: #66bb6a;
362-      --paper-green-500: #4caf50;
363-      --paper-green-600: #43a047;
364-      --paper-green-700: #388e3c;
365-      --paper-green-800: #2e7d32;
366-      --paper-green-900: #1b5e20;
367-      --paper-green-a100: #b9f6ca;
368-      --paper-green-a200: #69f0ae;
369-      --paper-green-a400: #00e676;
370-      --paper-green-a700: #00c853;
371-
372-      --paper-light-green-50: #f1f8e9;
373-      --paper-light-green-100: #dcedc8;
374-      --paper-light-green-200: #c5e1a5;
375-      --paper-light-green-300: #aed581;
376-      --paper-light-green-400: #9ccc65;
377-      --paper-light-green-500: #8bc34a;
378-      --paper-light-green-600: #7cb342;
379-      --paper-light-green-700: #689f38;
380-      --paper-light-green-800: #558b2f;
381-      --paper-light-green-900: #33691e;
382-      --paper-light-green-a100: #ccff90;
383-      --paper-light-green-a200: #b2ff59;
384-      --paper-light-green-a400: #76ff03;
385-      --paper-light-green-a700: #64dd17;
386-
387-      --paper-lime-50: #f9fbe7;
388-      --paper-lime-100: #f0f4c3;
389-      --paper-lime-200: #e6ee9c;
390-      --paper-lime-300: #dce775;
391-      --paper-lime-400: #d4e157;
392-      --paper-lime-500: #cddc39;
393-      --paper-lime-600: #c0ca33;
394-      --paper-lime-700: #afb42b;
395-      --paper-lime-800: #9e9d24;
396-      --paper-lime-900: #827717;
397-      --paper-lime-a100: #f4ff81;
398-      --paper-lime-a200: #eeff41;
399-      --paper-lime-a400: #c6ff00;
400-      --paper-lime-a700: #aeea00;
401-
402       --paper-yellow-50: #fffde7;
403       --paper-yellow-100: #fff9c4;
404       --paper-yellow-200: #fff59d;
405@@ -261,21 +111,6 @@ const template = html`
406       --paper-yellow-a400: #ffea00;
407       --paper-yellow-a700: #ffd600;
408
409-      --paper-amber-50: #fff8e1;
410-      --paper-amber-100: #ffecb3;
411-      --paper-amber-200: #ffe082;
412-      --paper-amber-300: #ffd54f;
413-      --paper-amber-400: #ffca28;
414-      --paper-amber-500: #ffc107;
415-      --paper-amber-600: #ffb300;
416-      --paper-amber-700: #ffa000;
417-      --paper-amber-800: #ff8f00;
418-      --paper-amber-900: #ff6f00;
419-      --paper-amber-a100: #ffe57f;
420-      --paper-amber-a200: #ffd740;
421-      --paper-amber-a400: #ffc400;
422-      --paper-amber-a700: #ffab00;
423-
424       --paper-orange-50: #fff3e0;
425       --paper-orange-100: #ffe0b2;
426       --paper-orange-200: #ffcc80;
427@@ -291,32 +126,6 @@ const template = html`
428       --paper-orange-a400: #ff9100;
429       --paper-orange-a700: #ff6500;
430
431-      --paper-deep-orange-50: #fbe9e7;
432-      --paper-deep-orange-100: #ffccbc;
433-      --paper-deep-orange-200: #ffab91;
434-      --paper-deep-orange-300: #ff8a65;
435-      --paper-deep-orange-400: #ff7043;
436-      --paper-deep-orange-500: #ff5722;
437-      --paper-deep-orange-600: #f4511e;
438-      --paper-deep-orange-700: #e64a19;
439-      --paper-deep-orange-800: #d84315;
440-      --paper-deep-orange-900: #bf360c;
441-      --paper-deep-orange-a100: #ff9e80;
442-      --paper-deep-orange-a200: #ff6e40;
443-      --paper-deep-orange-a400: #ff3d00;
444-      --paper-deep-orange-a700: #dd2c00;
445-
446-      --paper-brown-50: #efebe9;
447-      --paper-brown-100: #d7ccc8;
448-      --paper-brown-200: #bcaaa4;
449-      --paper-brown-300: #a1887f;
450-      --paper-brown-400: #8d6e63;
451-      --paper-brown-500: #795548;
452-      --paper-brown-600: #6d4c41;
453-      --paper-brown-700: #5d4037;
454-      --paper-brown-800: #4e342e;
455-      --paper-brown-900: #3e2723;
456-
457       --paper-grey-50: #fafafa;
458       --paper-grey-100: #f5f5f5;
459       --paper-grey-200: #eeeeee;
460