Commit 580ec8f1 authored by vsevik@chromium.org's avatar vsevik@chromium.org
Browse files

Web Inspector: Breakpoint manager should restore breakpoints when uiSourceCode is added.

https://bugs.webkit.org/show_bug.cgi?id=113381

Reviewed by Pavel Feldman.

Source/WebCore:

Breakpoint manager now restores breakpoints on UISourceCodeAdded event.
Breakpoint manager now only resets breakpoints in debugger when source mapping is changed to/from non identity one.

* inspector/front-end/BreakpointManager.js:
(WebInspector.BreakpointManager.prototype._uiSourceCodeAdded):
(WebInspector.BreakpointManager.prototype._resetBreakpoints):
(WebInspector.BreakpointManager.prototype._uiSourceCodeMappingChanged):
* inspector/front-end/CompilerScriptMapping.js:
(WebInspector.CompilerScriptMapping.prototype.get isIdentity):
* inspector/front-end/DefaultScriptMapping.js:
(WebInspector.DefaultScriptMapping.prototype.isIdentity):
* inspector/front-end/ResourceScriptMapping.js:
(WebInspector.ResourceScriptMapping.prototype.isIdentity):
* inspector/front-end/SASSSourceMapping.js:
(WebInspector.SASSSourceMapping.prototype.isIdentity):
* inspector/front-end/ScriptSnippetModel.js:
(WebInspector.SnippetScriptMapping.prototype.isIdentity):
* inspector/front-end/SourceMapping.js:
(WebInspector.SourceMapping.prototype.isIdentity):
* inspector/front-end/StylesSourceMapping.js:
(WebInspector.StylesSourceMapping.prototype.isIdentity):
* inspector/front-end/UISourceCode.js:
(WebInspector.UISourceCode.prototype.setSourceMapping):

LayoutTests:

* inspector/debugger/breakpoint-manager-expected.txt:
* inspector/debugger/breakpoint-manager.html:

git-svn-id: http://svn.webkit.org/repository/webkit/trunk@146983 268f45cc-cd09-0410-ab3c-d52691b4dbfc
parent 33bad56c
2013-03-27 Vsevolod Vlasov <vsevik@chromium.org>
Web Inspector: Breakpoint manager should restore breakpoints when uiSourceCode is added.
https://bugs.webkit.org/show_bug.cgi?id=113381
Reviewed by Pavel Feldman.
* inspector/debugger/breakpoint-manager-expected.txt:
* inspector/debugger/breakpoint-manager.html:
2013-03-27 Sheriff Bot <webkit.review.bot@gmail.com>
 
Unreviewed, rolling out r146864.
......@@ -68,9 +68,9 @@ Running: testRestoreBreakpoints
b.js:3 enabled:true condition:
Adding UISourceCode: a.js
debuggerModel.setBreakpoint(a.js:10:foo == bar)
breakpointAdded(a.js, 20, , false)
breakpointAdded(a.js, 10, foo == bar, true)
Location created: a.js:10
breakpointAdded(a.js, 20, , false)
Dumping Storage
a.js:10 enabled:true condition:foo == bar
a.js:20 enabled:false condition:
......@@ -89,32 +89,10 @@ Running: testRestoreBreakpointsTwice
b.js:3 enabled:true condition:
Adding UISourceCode: a.js
debuggerModel.setBreakpoint(a.js:10:foo == bar)
breakpointAdded(a.js, 10, foo == bar, true)
Location created: a.js:10
breakpointAdded(a.js, 20, , false)
Adding UISourceCode: a.js
Dumping Storage
a.js:10 enabled:true condition:foo == bar
a.js:20 enabled:false condition:
b.js:3 enabled:true condition:
Resetting breakpoint manager
breakpointRemoved(a.js, 10)
Location disposed: a.js:10
debuggerModel.removeBreakpoint(a.js:10)
breakpointRemoved(a.js, 20)
Running: testRestoreBreakpointsAfterTemporaryUISourceCodeRemoved
Created breakpoints manager
Dumping Storage
a.js:10 enabled:true condition:foo == bar
a.js:20 enabled:false condition:
b.js:3 enabled:true condition:
Adding temporary UISourceCode: a.js
Adding UISourceCode: a.js
debuggerModel.setBreakpoint(a.js:10:foo == bar)
breakpointAdded(a.js, 10, foo == bar, true)
Location created: a.js:10
breakpointAdded(a.js, 20, , false)
Dumping Storage
a.js:10 enabled:true condition:foo == bar
a.js:20 enabled:false condition:
......@@ -133,9 +111,9 @@ Running: testRemoveBreakpoints
b.js:3 enabled:true condition:
Adding UISourceCode: a.js
debuggerModel.setBreakpoint(a.js:10:foo == bar)
breakpointAdded(a.js, 20, , false)
breakpointAdded(a.js, 10, foo == bar, true)
Location created: a.js:10
breakpointAdded(a.js, 20, , false)
Setting breakpoint at a.js:30 enabled:true condition:
debuggerModel.setBreakpoint(a.js:30:)
breakpointAdded(a.js, 30, , true)
......@@ -205,9 +183,9 @@ Running: testNavigation
b.js:3 enabled:true condition:
Adding UISourceCode: a.js
debuggerModel.setBreakpoint(a.js:10:foo == bar)
breakpointAdded(a.js, 20, , false)
breakpointAdded(a.js, 10, foo == bar, true)
Location created: a.js:10
breakpointAdded(a.js, 20, , false)
Navigating to B.
Resetting debugger.
......@@ -234,9 +212,9 @@ Running: testNavigation
Location disposed: a.js:11
debuggerModel.removeBreakpoint(a.js:10)
debuggerModel.setBreakpoint(a.js:10:foo == bar)
breakpointAdded(a.js, 20, , false)
breakpointAdded(a.js, 10, foo == bar, true)
Location created: a.js:10
breakpointAdded(a.js, 20, , false)
Dumping Storage
a.js:10 enabled:true condition:foo == bar
a.js:20 enabled:false condition:
......@@ -255,9 +233,9 @@ Running: testSourceMapping
a.js:20 enabled:true condition:
Adding UISourceCode: a.js
debuggerModel.setBreakpoint(a.js:10:foo == bar)
debuggerModel.setBreakpoint(a.js:20:)
breakpointAdded(a.js, 10, foo == bar, true)
Location created: a.js:10
debuggerModel.setBreakpoint(a.js:20:)
breakpointAdded(a.js, 20, , true)
Location created: a.js:20
......
......@@ -19,6 +19,11 @@ function test()
if (!uiSourceCodes[uiSourceCode.url])
return null;
return new WebInspector.DebuggerModel.Location(uiSourceCode.url, lineNumber, 0);
},
isIdentity: function()
{
return true;
}
};
......@@ -33,6 +38,11 @@ function test()
uiLocationToRawLocation: function(uiSourceCode, lineNumber)
{
return new WebInspector.DebuggerModel.Location(uiSourceCode.url, lineNumber - 10, 0);
},
isIdentity: function()
{
return false;
}
};
......@@ -50,28 +60,74 @@ function test()
this._scripts[scriptId].pushSourceMapping(this._sourceMapping);
},
_scriptForURL: function(url)
{
for (var scriptId in this._scripts) {
var script = this._scripts[scriptId];
if (script.sourceURL === url)
return script;
}
},
_scheduleSetBeakpointCallback: function(callback, breakpointId, locations)
{
setTimeout(innerCallback.bind(this), 0);
function innerCallback()
{
if (callback)
callback(breakpointId, locations);
if (window.setBreakpointCallback) {
var savedCallback = window.setBreakpointCallback;
delete window.setBreakpointCallback;
savedCallback();
}
}
},
setBreakpointByURL: function(url, lineNumber, columnNumber, condition, callback)
{
var breakpointId = url + ":" + lineNumber;
if (this._breakpoints[breakpointId]) {
this._scheduleSetBeakpointCallback(callback, null);
return;
}
this._breakpoints[breakpointId] = true;
InspectorTest.addResult(" debuggerModel.setBreakpoint(" + [url, lineNumber, condition].join(":") + ")");
var locations = [];
var script = this._scriptForURL(url);
if (script) {
var location = new WebInspector.DebuggerModel.Location(script.scriptId, lineNumber, 0);
locations.push(location);
}
this._scheduleSetBeakpointCallback(callback, breakpointId, locations);
},
setBreakpointByScriptLocation: function(location, condition, callback)
{
var breakpointId = location.scriptId + ":" + location.lineNumber;
if (this._breakpoints[breakpointId]) {
callback(null);
this._scheduleSetBeakpointCallback(callback, null);
return;
}
this._breakpoints[breakpointId] = true;
InspectorTest.addResult(" debuggerModel.setBreakpoint(" + [location.scriptId, location.lineNumber, condition].join(":") + ")");
if (!callback)
return;
if (location.lineNumber >= 2000) {
callback(breakpointId, []);
this._scheduleSetBeakpointCallback(callback, breakpointId, []);
return;
}
if (location.lineNumber >= 1000) {
var shiftedLocation = {scriptId: location.scriptId, lineNumber: location.lineNumber + 10, columnNumber: location.columnNumber };
callback(breakpointId, [shiftedLocation]);
this._scheduleSetBeakpointCallback(callback, breakpointId, [shiftedLocation]);
return;
}
callback(breakpointId, [location]);
this._scheduleSetBeakpointCallback(callback, breakpointId, [location]);
},
removeBreakpoint: function(breakpointId, callback)
......@@ -238,7 +294,12 @@ function test()
var breakpointManager = createBreakpointManager();
var uiSourceCode = addUISourceCode(breakpointManager, "a.js");
setBreakpoint(breakpointManager, uiSourceCode, 30, "", true);
resetBreakpointManager(breakpointManager, next);
window.setBreakpointCallback = step2.bind(this);
function step2()
{
resetBreakpointManager(breakpointManager, next);
}
},
function testSetDisabledBreakpoint(next)
......@@ -249,7 +310,12 @@ function test()
dumpBreakpointStorage(breakpointManager);
InspectorTest.addResult(" Enabling breakpoint");
breakpoint.setEnabled(true);
resetBreakpointManager(breakpointManager, next);
window.setBreakpointCallback = step2.bind(this);
function step2()
{
resetBreakpointManager(breakpointManager, next);
}
},
function testSetConditionalBreakpoint(next)
......@@ -257,17 +323,32 @@ function test()
var breakpointManager = createBreakpointManager();
var uiSourceCode = addUISourceCode(breakpointManager, "a.js");
var breakpoint = setBreakpoint(breakpointManager, uiSourceCode, 30, "condition", true);
dumpBreakpointStorage(breakpointManager);
InspectorTest.addResult(" Updating condition");
breakpoint.setCondition("");
resetBreakpointManager(breakpointManager, next);
window.setBreakpointCallback = step2.bind(this);
function step2()
{
dumpBreakpointStorage(breakpointManager);
InspectorTest.addResult(" Updating condition");
breakpoint.setCondition("");
window.setBreakpointCallback = step3.bind(this);
}
function step3()
{
resetBreakpointManager(breakpointManager, next);
}
},
function testRestoreBreakpoints(next)
{
var breakpointManager = createBreakpointManager(serializedBreakpoints);
addUISourceCode(breakpointManager, "a.js");
resetBreakpointManager(breakpointManager, next);
window.setBreakpointCallback = step2.bind(this);
function step2()
{
resetBreakpointManager(breakpointManager, next);
}
},
function testRestoreBreakpointsTwice(next)
......@@ -275,27 +356,33 @@ function test()
var breakpointManager = createBreakpointManager(serializedBreakpoints);
addUISourceCode(breakpointManager, "a.js");
addUISourceCode(breakpointManager, "a.js");
resetBreakpointManager(breakpointManager, next);
},
window.setBreakpointCallback = step2.bind(this);
function testRestoreBreakpointsAfterTemporaryUISourceCodeRemoved(next)
{
var breakpointManager = createBreakpointManager(serializedBreakpoints);
addTemporaryUISourceCode(breakpointManager, "a.js");
addUISourceCode(breakpointManager, "a.js");
resetBreakpointManager(breakpointManager, next);
function step2()
{
resetBreakpointManager(breakpointManager, next);
}
},
function testRemoveBreakpoints(next)
{
var breakpointManager = createBreakpointManager(serializedBreakpoints);
var uiSourceCode = addUISourceCode(breakpointManager, "a.js");
setBreakpoint(breakpointManager, uiSourceCode, 30, "", true);
window.setBreakpointCallback = step2.bind(this);
function step2()
{
setBreakpoint(breakpointManager, uiSourceCode, 30, "", true);
window.setBreakpointCallback = step3.bind(this);
}
removeBreakpoint(breakpointManager, uiSourceCode, 30);
removeBreakpoint(breakpointManager, uiSourceCode, 10);
removeBreakpoint(breakpointManager, uiSourceCode, 20);
resetBreakpointManager(breakpointManager, next);
function step3()
{
removeBreakpoint(breakpointManager, uiSourceCode, 30);
removeBreakpoint(breakpointManager, uiSourceCode, 10);
removeBreakpoint(breakpointManager, uiSourceCode, 20);
resetBreakpointManager(breakpointManager, next);
}
},
function testSetBreakpointThatShifts(next)
......@@ -303,7 +390,12 @@ function test()
var breakpointManager = createBreakpointManager();
var uiSourceCode = addUISourceCode(breakpointManager, "a.js");
setBreakpoint(breakpointManager, uiSourceCode, 1015, "", true);
resetBreakpointManager(breakpointManager, next);
window.setBreakpointCallback = step2.bind(this);
function step2()
{
resetBreakpointManager(breakpointManager, next);
}
},
function testSetBreakpointThatShiftsTwice(next)
......@@ -311,8 +403,18 @@ function test()
var breakpointManager = createBreakpointManager();
var uiSourceCode = addUISourceCode(breakpointManager, "a.js");
setBreakpoint(breakpointManager, uiSourceCode, 1015, "", true);
setBreakpoint(breakpointManager, uiSourceCode, 1015, "", true);
resetBreakpointManager(breakpointManager, next);
window.setBreakpointCallback = step2.bind(this);
function step2()
{
setBreakpoint(breakpointManager, uiSourceCode, 1015, "", true);
window.setBreakpointCallback = step3.bind(this);
}
function step3()
{
resetBreakpointManager(breakpointManager, next);
}
},
function testSetBreakpointOutsideScript(next)
......@@ -320,28 +422,46 @@ function test()
var breakpointManager = createBreakpointManager([]);
var uiSourceCode = addUISourceCode(breakpointManager, "a.js");
breakpointManager.setBreakpoint(uiSourceCode, 2500, "", true);
resetBreakpointManager(breakpointManager, next);
},
window.setBreakpointCallback = step2.bind(this);
function step2()
{
resetBreakpointManager(breakpointManager, next);
}
},
function testNavigation(next)
{
var breakpointManager = createBreakpointManager(serializedBreakpoints);
var uiSourceCodeA = addUISourceCode(breakpointManager, "a.js");
window.setBreakpointCallback = step2.bind(this);
function step2()
{
InspectorTest.addResult("\n Navigating to B.");
breakpointManager._debuggerModel.reset();
resetWorkspace(breakpointManager);
var uiSourceCodeB = addUISourceCode(breakpointManager, "b.js");
window.setBreakpointCallback = step3.bind(this);
}
InspectorTest.addResult("\n Navigating to B.");
breakpointManager._debuggerModel.reset();
resetWorkspace(breakpointManager);
var uiSourceCodeB = addUISourceCode(breakpointManager, "b.js");
InspectorTest.addResult("\n Navigating back to A.");
breakpointManager._debuggerModel.reset();
resetWorkspace(breakpointManager);
InspectorTest.addResult(" Resolving provisional breakpoint.");
addTemporaryUISourceCode(breakpointManager, "a.js")
var eventData = { breakpointId: "a.js:10", location: { scriptId: "a.js", lineNumber: 11, columnNumber: 5 }};
breakpointManager._debuggerModel.dispatchEventToListeners(WebInspector.DebuggerModel.Events.BreakpointResolved, eventData);
addUISourceCode(breakpointManager, "a.js");
resetBreakpointManager(breakpointManager, next);
function step3()
{
InspectorTest.addResult("\n Navigating back to A.");
breakpointManager._debuggerModel.reset();
resetWorkspace(breakpointManager);
InspectorTest.addResult(" Resolving provisional breakpoint.");
addTemporaryUISourceCode(breakpointManager, "a.js")
var eventData = { breakpointId: "a.js:10", location: { scriptId: "a.js", lineNumber: 11, columnNumber: 5 }};
breakpointManager._debuggerModel.dispatchEventToListeners(WebInspector.DebuggerModel.Events.BreakpointResolved, eventData);
addUISourceCode(breakpointManager, "a.js");
window.setBreakpointCallback = step4.bind(this);
}
function step4()
{
resetBreakpointManager(breakpointManager, next);
}
},
function testSourceMapping(next)
......@@ -353,11 +473,21 @@ function test()
var breakpointManager = createBreakpointManager(serializedBreakpoints);
var uiSourceCodeA = addUISourceCode(breakpointManager, "a.js");
InspectorTest.addResult("\n Toggling source mapping.");
breakpointManager._debuggerModel.pushSourceMapping(shiftingMapping);
InspectorTest.addResult("\n Toggling source mapping back.");
breakpointManager._debuggerModel.disableSourceMapping(shiftingMapping);
resetBreakpointManager(breakpointManager, next);
window.setBreakpointCallback = step2.bind(this);
function step2()
{
window.setBreakpointCallback = step3.bind(this);
}
function step3()
{
InspectorTest.addResult("\n Toggling source mapping.");
breakpointManager._debuggerModel.pushSourceMapping(shiftingMapping);
InspectorTest.addResult("\n Toggling source mapping back.");
breakpointManager._debuggerModel.disableSourceMapping(shiftingMapping);
resetBreakpointManager(breakpointManager, next);
}
},
function testProvisionalBreakpointsResolve(next)
......@@ -367,16 +497,21 @@ function test()
var breakpointManager = createBreakpointManager(serializedBreakpoints);
var uiSourceCode = addUISourceCode(breakpointManager, "a.js");
breakpointManager._debuggerModel.reset();
resetWorkspace(breakpointManager);
InspectorTest.addResult(" Resolving provisional breakpoint.");
addTemporaryUISourceCode(breakpointManager, "a.js")
var eventData = { breakpointId: "a.js:10", location: { scriptId: "a.js", lineNumber: 11, columnNumber: 5 }};
breakpointManager._debuggerModel.dispatchEventToListeners(WebInspector.DebuggerModel.Events.BreakpointResolved, eventData);
var breakpoints = breakpointManager._breakpoints.keys();
InspectorTest.assertEquals(breakpoints.length, 1, "Exactly one breakpoint should be registered in breakpoint manager.");
InspectorTest.assertTrue(!breakpoints[0]._primaryUILocation, "_primaryUILocation field should be cleared for provisional breapoint.");
resetBreakpointManager(breakpointManager, next);
window.setBreakpointCallback = step2.bind(this);
function step2()
{
breakpointManager._debuggerModel.reset();
resetWorkspace(breakpointManager);
InspectorTest.addResult(" Resolving provisional breakpoint.");
addTemporaryUISourceCode(breakpointManager, "a.js")
var eventData = { breakpointId: "a.js:10", location: { scriptId: "a.js", lineNumber: 11, columnNumber: 5 }};
breakpointManager._debuggerModel.dispatchEventToListeners(WebInspector.DebuggerModel.Events.BreakpointResolved, eventData);
var breakpoints = breakpointManager._breakpoints.keys();
InspectorTest.assertEquals(breakpoints.length, 1, "Exactly one breakpoint should be registered in breakpoint manager.");
InspectorTest.assertTrue(!breakpoints[0]._primaryUILocation, "_primaryUILocation field should be cleared for provisional breapoint.");
resetBreakpointManager(breakpointManager, next);
}
}
]);
};
......
2013-03-27 Vsevolod Vlasov <vsevik@chromium.org>
Web Inspector: Breakpoint manager should restore breakpoints when uiSourceCode is added.
https://bugs.webkit.org/show_bug.cgi?id=113381
Reviewed by Pavel Feldman.
Breakpoint manager now restores breakpoints on UISourceCodeAdded event.
Breakpoint manager now only resets breakpoints in debugger when source mapping is changed to/from non identity one.
* inspector/front-end/BreakpointManager.js:
(WebInspector.BreakpointManager.prototype._uiSourceCodeAdded):
(WebInspector.BreakpointManager.prototype._resetBreakpoints):
(WebInspector.BreakpointManager.prototype._uiSourceCodeMappingChanged):
* inspector/front-end/CompilerScriptMapping.js:
(WebInspector.CompilerScriptMapping.prototype.get isIdentity):
* inspector/front-end/DefaultScriptMapping.js:
(WebInspector.DefaultScriptMapping.prototype.isIdentity):
* inspector/front-end/ResourceScriptMapping.js:
(WebInspector.ResourceScriptMapping.prototype.isIdentity):
* inspector/front-end/SASSSourceMapping.js:
(WebInspector.SASSSourceMapping.prototype.isIdentity):
* inspector/front-end/ScriptSnippetModel.js:
(WebInspector.SnippetScriptMapping.prototype.isIdentity):
* inspector/front-end/SourceMapping.js:
(WebInspector.SourceMapping.prototype.isIdentity):
* inspector/front-end/StylesSourceMapping.js:
(WebInspector.StylesSourceMapping.prototype.isIdentity):
* inspector/front-end/UISourceCode.js:
(WebInspector.UISourceCode.prototype.setSourceMapping):
2013-03-27 Yury Semikhatsky <yurys@chromium.org>
 
Web Inspector: update Timeline.TimelineEvent definition to include DOM counters and native memory stats
......@@ -91,6 +91,7 @@ WebInspector.BreakpointManager.prototype = {
_uiSourceCodeAdded: function(event)
{
var uiSourceCode = /** @type {WebInspector.UISourceCode} */ (event.data);
this._restoreBreakpoints(uiSourceCode);
if (uiSourceCode.contentType() === WebInspector.resourceTypes.Script || uiSourceCode.contentType() === WebInspector.resourceTypes.Document) {
uiSourceCode.addEventListener(WebInspector.UISourceCode.Events.SourceMappingChanged, this._uiSourceCodeMappingChanged, this);
uiSourceCode.addEventListener(WebInspector.UISourceCode.Events.FormattedChanged, this._uiSourceCodeFormatted, this);
......@@ -106,13 +107,34 @@ WebInspector.BreakpointManager.prototype = {
this._restoreBreakpoints(uiSourceCode);
},
/**
* @param {WebInspector.UISourceCode} uiSourceCode
*/
_resetBreakpoints: function(uiSourceCode)
{
var sourceFileId = WebInspector.BreakpointManager.sourceFileId(uiSourceCode);
var breakpoints = this._breakpoints.keys();
for (var i = 0; i < breakpoints.length; ++i) {
var breakpoint = breakpoints[i];
if (breakpoint._sourceFileId !== sourceFileId)
return;
if (breakpoint.enabled()) {
breakpoint._removeFromDebugger();
breakpoint._setInDebugger();
}
}
},
/**
* @param {WebInspector.Event} event
*/
_uiSourceCodeMappingChanged: function(event)
{
var identityHasChanged = /** @type {boolean} */ (event.data.identityHasChanged);
if (!identityHasChanged)
return;
var uiSourceCode = /** @type {WebInspector.UISourceCode} */ (event.target);
this._restoreBreakpoints(uiSourceCode);
this._resetBreakpoints(uiSourceCode);
},
/**
......@@ -272,7 +294,7 @@ WebInspector.BreakpointManager.prototype = {
}
this._breakpointsForUISourceCode.remove(uiSourceCode);
var breakpoints = this.breakpointsForUISourceCode(uiSourceCode);
breakpoints = this.breakpointsForUISourceCode(uiSourceCode);
for (var j = 0; j < breakpoints.length; ++j) {
var breakpoint = breakpoints[j];
this._breakpoints.remove(breakpoint);
......@@ -482,6 +504,7 @@ WebInspector.BreakpointManager.Breakpoint.prototype = {
_setInDebugger: function()
{
console.assert(!this._debuggerId);
var rawLocation = this._primaryUILocation.uiLocationToRawLocation();
var debuggerModelLocation = /** @type {WebInspector.DebuggerModel.Location} */ (rawLocation);
if (debuggerModelLocation)
......
......@@ -87,6 +87,14 @@ WebInspector.CompilerScriptMapping.prototype = {
return WebInspector.debuggerModel.createRawLocation(this._scriptForSourceMap.get(sourceMap), entry[0], entry[1]);
},
/**
* @return {boolean}
*/
isIdentity: function()
{
return false;
},
/**
* @param {WebInspector.Script} script
*/
......
......@@ -70,6 +70,14 @@ WebInspector.DefaultScriptMapping.prototype = {
return WebInspector.debuggerModel.createRawLocation(script, lineNumber, columnNumber);
},
/**
* @return {boolean}
*/
isIdentity: function()
{