update customElementsTakeRecords
Revert "Revert "update platform.js to get memory leak fixes"" R=jmesserly@google.com Review URL: https://codereview.chromium.org//617413002 git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@40854 260f80e4-7a28-3924-810f-c04153c831b5
This commit is contained in:
@@ -1,3 +1,14 @@
|
||||
#### Pub version 0.8.0
|
||||
* Re-apply changes from 0.7.1+1 and also cherry pick
|
||||
[efdbbc](https://github.com/polymer/CustomElements/commit/efdbbc) to fix
|
||||
the customElementsTakeRecords function.
|
||||
* **Breaking Change** The customElementsTakeRecords function now has an
|
||||
an optional argument `node`. There is no longer a single global observer,
|
||||
but one for each ShadowRoot and one for the main document. The observer that
|
||||
is actually used defaults to the main document, but if `node` is supplied
|
||||
then it will walk up the document tree and use the first observer that it
|
||||
finds.
|
||||
|
||||
#### Pub version 0.7.1+2
|
||||
* Revert the change from 0.7.1+1 due to redness in FF/Safari/IE.
|
||||
|
||||
|
||||
@@ -1,28 +1,28 @@
|
||||
BUILD LOG
|
||||
---------
|
||||
Build Time: 2014-09-22T10:39:00
|
||||
Build Time: 2014-10-01T13:14:41
|
||||
|
||||
NODEJS INFORMATION
|
||||
==================
|
||||
nodejs: v0.10.29
|
||||
chai: 1.9.1
|
||||
grunt: 0.4.5
|
||||
grunt-concat-sourcemap: 0.4.3
|
||||
grunt-audit: 0.0.3
|
||||
grunt-concat-sourcemap: 0.4.3
|
||||
grunt-contrib-concat: 0.4.0
|
||||
grunt-contrib-uglify: 0.5.1
|
||||
grunt-karma: 0.8.3
|
||||
karma: 0.12.22
|
||||
karma-crbot-reporter: 0.0.4
|
||||
karma-firefox-launcher: 0.1.3
|
||||
karma-ie-launcher: 0.1.5
|
||||
karma-mocha: 0.1.9
|
||||
karma-safari-launcher: 0.1.1
|
||||
mocha: 1.21.4
|
||||
karma-crbot-reporter: 0.0.4
|
||||
karma: 0.12.22
|
||||
karma-mocha: 0.1.9
|
||||
|
||||
REPO REVISIONS
|
||||
==============
|
||||
CustomElements: 85981b0986799744f452bd71ee6170f9d05851ac
|
||||
CustomElements: a9abaa0c9fd8c8faa86b77f1f7353dd91c164df0
|
||||
HTMLImports: 77efd89e04ae63a3ee7c88cb7e1d2784cf60dcb1
|
||||
ShadowDOM: bb82f0b0d361e90ca5efb1c59dd44c976ffeffb4
|
||||
URL: 35e0e6aaab5979d277afa4822a2776a7fb7562ba
|
||||
@@ -30,4 +30,4 @@ platform-dev: d214582dd9537aa4cf0d6034d33c071be2970a66
|
||||
|
||||
BUILD HASHES
|
||||
============
|
||||
build/platform.js: fe9dc71d22c46bb23f01014e77cdda430227b114
|
||||
build/platform.js: 52a8bcc635d3db0f494ae6ad4c8303c99a045855
|
||||
@@ -2317,7 +2317,13 @@ window.ShadowDOMPolyfill = {};
|
||||
var globalMutationObservers = [];
|
||||
var isScheduled = false;
|
||||
|
||||
function scheduleCallback() {
|
||||
function scheduleCallback(observer) {
|
||||
if (observer.scheduled_)
|
||||
return;
|
||||
|
||||
observer.scheduled_ = true;
|
||||
globalMutationObservers.push(observer);
|
||||
|
||||
if (isScheduled)
|
||||
return;
|
||||
setEndOfMicrotask(notifyObservers);
|
||||
@@ -2337,6 +2343,7 @@ window.ShadowDOMPolyfill = {};
|
||||
|
||||
for (var i = 0; i < notifyList.length; i++) {
|
||||
var mo = notifyList[i];
|
||||
mo.scheduled_ = false;
|
||||
var queue = mo.takeRecords();
|
||||
removeTransientObserversFor(mo);
|
||||
if (queue.length) {
|
||||
@@ -2452,8 +2459,6 @@ window.ShadowDOMPolyfill = {};
|
||||
}
|
||||
}
|
||||
|
||||
var anyObserversEnqueued = false;
|
||||
|
||||
// 4.
|
||||
for (var uid in interestedObservers) {
|
||||
var observer = interestedObservers[uid];
|
||||
@@ -2486,15 +2491,9 @@ window.ShadowDOMPolyfill = {};
|
||||
record.oldValue = associatedStrings[uid];
|
||||
|
||||
// 8.
|
||||
if (!observer.records_.length) {
|
||||
globalMutationObservers.push(observer);
|
||||
anyObserversEnqueued = true;
|
||||
}
|
||||
scheduleCallback(observer);
|
||||
observer.records_.push(record);
|
||||
}
|
||||
|
||||
if (anyObserversEnqueued)
|
||||
scheduleCallback();
|
||||
}
|
||||
|
||||
var slice = Array.prototype.slice;
|
||||
@@ -2557,6 +2556,7 @@ window.ShadowDOMPolyfill = {};
|
||||
this.nodes_ = [];
|
||||
this.records_ = [];
|
||||
this.uid_ = ++uidCounter;
|
||||
this.scheduled_ = false;
|
||||
}
|
||||
|
||||
MutationObserver.prototype = {
|
||||
@@ -2642,6 +2642,10 @@ window.ShadowDOMPolyfill = {};
|
||||
if (node === this.target)
|
||||
return;
|
||||
|
||||
// Make sure we remove transient observers at the end of microtask, even
|
||||
// if we didn't get any change records.
|
||||
scheduleCallback(this.observer);
|
||||
|
||||
this.transientObservedNodes.push(node);
|
||||
var registrations = registrationsTable.get(node);
|
||||
if (!registrations)
|
||||
@@ -11373,10 +11377,7 @@ function watchShadow(node) {
|
||||
}
|
||||
|
||||
function watchRoot(root) {
|
||||
if (!root.__watched) {
|
||||
observe(root);
|
||||
root.__watched = true;
|
||||
}
|
||||
observe(root);
|
||||
}
|
||||
|
||||
function handler(mutations) {
|
||||
@@ -11421,18 +11422,32 @@ function handler(mutations) {
|
||||
logFlags.dom && console.groupEnd();
|
||||
};
|
||||
|
||||
var observer = new MutationObserver(handler);
|
||||
function takeRecords(node) {
|
||||
// If the optional node is not supplied, assume we mean the whole document.
|
||||
if (!node) node = wrapIfNeeded(document);
|
||||
|
||||
function takeRecords() {
|
||||
// TODO(sjmiles): ask Raf why we have to call handler ourselves
|
||||
handler(observer.takeRecords());
|
||||
takeMutations();
|
||||
// Find the root of the tree, which will be an Document or ShadowRoot.
|
||||
while (node.parentNode) {
|
||||
node = node.parentNode;
|
||||
}
|
||||
|
||||
var observer = node.__observer;
|
||||
if (observer) {
|
||||
handler(observer.takeRecords());
|
||||
takeMutations();
|
||||
}
|
||||
}
|
||||
|
||||
var forEach = Array.prototype.forEach.call.bind(Array.prototype.forEach);
|
||||
|
||||
function observe(inRoot) {
|
||||
if (inRoot.__observer) return;
|
||||
|
||||
// For each ShadowRoot, we create a new MutationObserver, so the root can be
|
||||
// garbage collected once all references to the `inRoot` node are gone.
|
||||
var observer = new MutationObserver(handler);
|
||||
observer.observe(inRoot, {childList: true, subtree: true});
|
||||
inRoot.__observer = observer;
|
||||
}
|
||||
|
||||
function observeDocument(doc) {
|
||||
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -54,9 +54,8 @@ bool get _isReady {
|
||||
* This method can be used to resolve differences in timing between native and
|
||||
* polyfilled custom elements.
|
||||
*/
|
||||
void customElementsTakeRecords() {
|
||||
void customElementsTakeRecords([Node node]) {
|
||||
var customElements = js.context['CustomElements'];
|
||||
if (customElements != null) {
|
||||
customElements.callMethod('takeRecords');
|
||||
}
|
||||
if (customElements == null) return;
|
||||
customElements.callMethod('takeRecords', [node]);
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
name: web_components
|
||||
version: 0.7.1+2
|
||||
version: 0.8.0
|
||||
author: Polymer.dart Authors <web-ui-dev@dartlang.org>
|
||||
homepage: https://www.dartlang.org/polymer-dart/
|
||||
description: >
|
||||
|
||||
Reference in New Issue
Block a user