Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1697)

Unified Diff: dart/pkg/shadow_dom/lib/shadow_dom.debug.js

Issue 56933002: Version 0.8.10.1 (Closed) Base URL: http://dart.googlecode.com/svn/trunk/
Patch Set: Created 7 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: dart/pkg/shadow_dom/lib/shadow_dom.debug.js
===================================================================
--- dart/pkg/shadow_dom/lib/shadow_dom.debug.js (revision 29785)
+++ dart/pkg/shadow_dom/lib/shadow_dom.debug.js (working copy)
@@ -32,24 +32,66 @@
(function(global) {
'use strict';
+ var PROP_ADD_TYPE = 'add';
+ var PROP_UPDATE_TYPE = 'update';
+ var PROP_RECONFIGURE_TYPE = 'reconfigure';
+ var PROP_DELETE_TYPE = 'delete';
+ var ARRAY_SPLICE_TYPE = 'splice';
+
+ // Detect and do basic sanity checking on Object/Array.observe.
function detectObjectObserve() {
if (typeof Object.observe !== 'function' ||
typeof Array.observe !== 'function') {
return false;
}
- var gotSplice = false;
- function callback(records) {
- if (records[0].type === 'splice' && records[1].type === 'splice')
- gotSplice = true;
+ var records = [];
+
+ function callback(recs) {
+ records = recs;
}
- var test = [0];
+ var test = {};
+ Object.observe(test, callback);
+ test.id = 1;
+ test.id = 2;
+ delete test.id;
+ Object.deliverChangeRecords(callback);
+ if (records.length !== 3)
+ return false;
+
+ // TODO(rafaelw): Remove this when new change record type names make it to
+ // chrome release.
+ if (records[0].type == 'new' &&
+ records[1].type == 'updated' &&
+ records[2].type == 'deleted') {
+ PROP_ADD_TYPE = 'new';
+ PROP_UPDATE_TYPE = 'updated';
+ PROP_RECONFIGURE_TYPE = 'reconfigured';
+ PROP_DELETE_TYPE = 'deleted';
+ } else if (records[0].type != 'add' ||
+ records[1].type != 'update' ||
+ records[2].type != 'delete') {
+ console.error('Unexpected change record names for Object.observe. ' +
+ 'Using dirty-checking instead');
+ return false;
+ }
+ Object.unobserve(test, callback);
+
+ test = [0];
Array.observe(test, callback);
test[1] = 1;
test.length = 0;
Object.deliverChangeRecords(callback);
- return gotSplice;
+ if (records.length != 2)
+ return false;
+ if (records[0].type != ARRAY_SPLICE_TYPE ||
+ records[1].type != ARRAY_SPLICE_TYPE) {
+ return false;
+ }
+ Array.unobserve(test, callback);
+
+ return true;
}
var hasObserve = detectObjectObserve();
@@ -836,11 +878,10 @@
}
});
- var knownRecordTypes = {
- 'new': true,
- 'updated': true,
- 'deleted': true
- };
+ var expectedRecordTypes = {};
+ expectedRecordTypes[PROP_ADD_TYPE] = true;
+ expectedRecordTypes[PROP_UPDATE_TYPE] = true;
+ expectedRecordTypes[PROP_DELETE_TYPE] = true;
function notifyFunction(object, name) {
if (typeof Object.observe !== 'function')
@@ -872,7 +913,7 @@
var observer = new PathObserver(obj, descriptor.path,
function(newValue, oldValue) {
if (notify)
- notify('updated', oldValue);
+ notify(PROP_UPDATE_TYPE, oldValue);
}
);
@@ -907,7 +948,7 @@
for (var i = 0; i < changeRecords.length; i++) {
var record = changeRecords[i];
- if (!knownRecordTypes[record.type]) {
+ if (!expectedRecordTypes[record.type]) {
console.error('Unknown changeRecord type: ' + record.type);
console.error(record);
continue;
@@ -916,10 +957,10 @@
if (!(record.name in oldValues))
oldValues[record.name] = record.oldValue;
- if (record.type == 'updated')
+ if (record.type == PROP_UPDATE_TYPE)
continue;
- if (record.type == 'new') {
+ if (record.type == PROP_ADD_TYPE) {
if (record.name in removed)
delete removed[record.name];
else
@@ -928,7 +969,7 @@
continue;
}
- // type = 'deleted'
+ // type = 'delete'
if (record.name in added) {
delete added[record.name];
delete oldValues[record.name];
@@ -1316,12 +1357,12 @@
for (var i = 0; i < changeRecords.length; i++) {
var record = changeRecords[i];
switch(record.type) {
- case 'splice':
+ case ARRAY_SPLICE_TYPE:
mergeSplice(splices, record.index, record.removed.slice(), record.addedCount);
break;
- case 'new':
- case 'updated':
- case 'deleted':
+ case PROP_ADD_TYPE:
+ case PROP_UPDATE_TYPE:
+ case PROP_DELETE_TYPE:
if (!isIndex(record.name))
continue;
var index = toNumber(record.name);
@@ -1368,6 +1409,16 @@
global.PathObserver = PathObserver;
global.CompoundPathObserver = CompoundPathObserver;
global.Path = Path;
+
+ // TODO(rafaelw): Only needed for testing until new change record names
+ // make it to release.
+ global.Observer.changeRecordTypes = {
+ add: PROP_ADD_TYPE,
+ update: PROP_UPDATE_TYPE,
+ reconfigure: PROP_RECONFIGURE_TYPE,
+ 'delete': PROP_DELETE_TYPE,
+ splice: ARRAY_SPLICE_TYPE
+ };
})(typeof global !== 'undefined' && global ? global : this);
/*
@@ -1430,6 +1481,7 @@
var f = new Function('', 'return true;');
hasEval = f();
} catch (ex) {
+ hasEval = false;
}
}
@@ -1780,6 +1832,7 @@
scope.wrappers = wrappers;
})(this.ShadowDOMPolyfill);
+
// Copyright 2013 The Polymer Authors. All rights reserved.
// Use of this source code is goverened by a BSD-style
// license that can be found in the LICENSE file.
@@ -4872,6 +4925,7 @@
});
var nativeConstructor = originalRegister.call(unwrap(this), tagName,
+ object.extends ? {prototype: newPrototype, extends: object.extends} :
{prototype: newPrototype});
function GeneratedWrapper(node) {
« no previous file with comments | « dart/pkg/polymer_expressions/lib/polymer_expressions.dart ('k') | dart/pkg/shadow_dom/lib/shadow_dom.min.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698