diff --git a/src/lib/custom-style.html b/src/lib/custom-style.html
index ff791d650b..b3c86533b6 100644
--- a/src/lib/custom-style.html
+++ b/src/lib/custom-style.html
@@ -145,8 +145,18 @@
// Allow all custom-styles defined in this turn to register
// before applying any properties. This helps ensure that all properties
// are defined before any are consumed.
- Polymer.RenderStatus.beforeNextRender(this,
- this._applyCustomProperties, [e]);
+ // Premature application of properties can occur in 2 cases:
+ // (1) A property is consumed in a style created before it is produced.
+ // In general, we require custom properties to be defined before usage
+ // for elements so this case is only to be slightly more like native
+ // custom properties where this construction is supported.
+ // (2) A set of in order styles (A, B) are re-ordered due to a parser
+ // yield A wait for textContent, making B go before A. This case
+ // can occur with native or polyflled webcomponents.
+ var self = this;
+ requestAnimationFrame(function() {
+ self._applyCustomProperties(e);
+ });
}
},
diff --git a/src/lib/render-status.html b/src/lib/render-status.html
index 493c76dd74..c4735260cb 100644
--- a/src/lib/render-status.html
+++ b/src/lib/render-status.html
@@ -50,8 +50,6 @@
},
_afterNextRenderQueue: [],
- _beforeNextRenderQueue: [],
-
_waitingNextRender: false,
afterNextRender: function(element, fn, args) {
@@ -59,11 +57,6 @@
this._afterNextRenderQueue.push([element, fn, args]);
},
- beforeNextRender: function(element, fn, args) {
- this._watchNextRender();
- this._beforeNextRenderQueue.push([element, fn, args]);
- },
-
_watchNextRender: function() {
if (!this._waitingNextRender) {
this._waitingNextRender = true;
@@ -79,14 +72,12 @@
},
_flushNextRender: function() {
- this._waitingNextRender = false;
- this._flushRenderCallbacks(this._beforeNextRenderQueue);
- this._beforeNextRenderQueue = [];
var self = this;
// we want to defer after render until just after the paint.
setTimeout(function() {
self._flushRenderCallbacks(self._afterNextRenderQueue);
self._afterNextRenderQueue = [];
+ self._waitingNextRender = false;
});
},