[SCM] WebKit Debian packaging branch, webkit-1.1, updated. upstream/1.1.15.1-1414-gc69ee75
pfeldman at chromium.org
pfeldman at chromium.org
Thu Oct 29 20:38:51 UTC 2009
The following commit has been merged in the webkit-1.1 branch:
commit 4c8e1209671572998bdd1331962a444a7ad5a983
Author: pfeldman at chromium.org <pfeldman at chromium.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date: Mon Oct 5 08:56:17 2009 +0000
2009-10-04 Pavel Feldman <pfeldman at chromium.org>
Reviewed by Timothy Hatcher.
Web Inspector: Introduce inspected object groups for console
and watch evaluation results so that they could be released
explicitly.
https://bugs.webkit.org/show_bug.cgi?id=29891
* bindings/js/JSInspectorBackendCustom.cpp:
(WebCore::JSInspectorBackend::wrapObject):
* bindings/v8/custom/V8InspectorBackendCustom.cpp:
(WebCore::CALLBACK_FUNC_DECL):
* inspector/InspectorBackend.cpp:
(WebCore::InspectorBackend::wrapObject):
(WebCore::InspectorBackend::releaseWrapperObjectGroup):
* inspector/InspectorBackend.h:
* inspector/InspectorBackend.idl:
* inspector/InspectorController.cpp:
(WebCore::InspectorController::clearConsoleMessages):
(WebCore::InspectorController::resetScriptObjects):
(WebCore::InspectorController::wrapObject):
(WebCore::InspectorController::unwrapObject):
(WebCore::InspectorController::releaseWrapperObjectGroup):
* inspector/InspectorController.h:
* inspector/InspectorFrontend.cpp:
(WebCore::InspectorFrontend::addMessageToConsole):
* inspector/front-end/ConsoleView.js:
(WebInspector.ConsoleView.prototype.evalInInspectedWindow):
(WebInspector.ConsoleView.prototype.doEvalInWindow):
(WebInspector.ConsoleView.prototype._enterKeyPressed):
* inspector/front-end/InjectedScript.js:
(InjectedScript.evaluate):
(InjectedScript._evaluateAndWrap):
(InjectedScript.evaluateInCallFrame):
* inspector/front-end/ScriptsPanel.js:
(WebInspector.ScriptsPanel.prototype.evaluateInSelectedCallFrame):
(WebInspector.ScriptsPanel.prototype.doEvalInCallFrame):
* inspector/front-end/WatchExpressionsSidebarPane.js:
(WebInspector.WatchExpressionsSidebarPane):
(WebInspector.WatchExpressionsSection.prototype.update):
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@49084 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
index 4f2a679..fabb993 100644
--- a/WebCore/ChangeLog
+++ b/WebCore/ChangeLog
@@ -1,3 +1,46 @@
+2009-10-04 Pavel Feldman <pfeldman at chromium.org>
+
+ Reviewed by Timothy Hatcher.
+
+ Web Inspector: Introduce inspected object groups for console
+ and watch evaluation results so that they could be released
+ explicitly.
+
+ https://bugs.webkit.org/show_bug.cgi?id=29891
+
+ * bindings/js/JSInspectorBackendCustom.cpp:
+ (WebCore::JSInspectorBackend::wrapObject):
+ * bindings/v8/custom/V8InspectorBackendCustom.cpp:
+ (WebCore::CALLBACK_FUNC_DECL):
+ * inspector/InspectorBackend.cpp:
+ (WebCore::InspectorBackend::wrapObject):
+ (WebCore::InspectorBackend::releaseWrapperObjectGroup):
+ * inspector/InspectorBackend.h:
+ * inspector/InspectorBackend.idl:
+ * inspector/InspectorController.cpp:
+ (WebCore::InspectorController::clearConsoleMessages):
+ (WebCore::InspectorController::resetScriptObjects):
+ (WebCore::InspectorController::wrapObject):
+ (WebCore::InspectorController::unwrapObject):
+ (WebCore::InspectorController::releaseWrapperObjectGroup):
+ * inspector/InspectorController.h:
+ * inspector/InspectorFrontend.cpp:
+ (WebCore::InspectorFrontend::addMessageToConsole):
+ * inspector/front-end/ConsoleView.js:
+ (WebInspector.ConsoleView.prototype.evalInInspectedWindow):
+ (WebInspector.ConsoleView.prototype.doEvalInWindow):
+ (WebInspector.ConsoleView.prototype._enterKeyPressed):
+ * inspector/front-end/InjectedScript.js:
+ (InjectedScript.evaluate):
+ (InjectedScript._evaluateAndWrap):
+ (InjectedScript.evaluateInCallFrame):
+ * inspector/front-end/ScriptsPanel.js:
+ (WebInspector.ScriptsPanel.prototype.evaluateInSelectedCallFrame):
+ (WebInspector.ScriptsPanel.prototype.doEvalInCallFrame):
+ * inspector/front-end/WatchExpressionsSidebarPane.js:
+ (WebInspector.WatchExpressionsSidebarPane):
+ (WebInspector.WatchExpressionsSection.prototype.update):
+
2009-10-02 Tor Arne Vestbø <tor.arne.vestbo at nokia.com>
Reviewed by Eric Carlson.
@@ -2503,7 +2546,7 @@
* platform/network/qt/QNetworkReplyHandler.cpp:
(WebCore::QNetworkReplyHandler::finish):
-009-09-29 Pavel Feldman <pfeldman at chromium.org>
+2009-09-29 Pavel Feldman <pfeldman at chromium.org>
Reviewed by Timothy Hatcher.
diff --git a/WebCore/bindings/js/JSInspectorBackendCustom.cpp b/WebCore/bindings/js/JSInspectorBackendCustom.cpp
index 583d971..cb15e3b 100644
--- a/WebCore/bindings/js/JSInspectorBackendCustom.cpp
+++ b/WebCore/bindings/js/JSInspectorBackendCustom.cpp
@@ -295,12 +295,12 @@ JSValue JSInspectorBackend::nodeForId(ExecState* exec, const ArgList& args)
return JSInspectedObjectWrapper::wrap(inspectedWindow->globalExec(), toJS(exec, deprecatedGlobalObjectForPrototype(inspectedWindow->globalExec()), node));
}
-JSValue JSInspectorBackend::wrapObject(ExecState*, const ArgList& args)
+JSValue JSInspectorBackend::wrapObject(ExecState* exec, const ArgList& args)
{
- if (args.size() < 1)
+ if (args.size() < 2)
return jsUndefined();
- return impl()->wrapObject(ScriptValue(args.at(0))).jsValue();
+ return impl()->wrapObject(ScriptValue(args.at(0)), args.at(1).toString(exec)).jsValue();
}
JSValue JSInspectorBackend::unwrapObject(ExecState* exec, const ArgList& args)
diff --git a/WebCore/bindings/v8/custom/V8InspectorBackendCustom.cpp b/WebCore/bindings/v8/custom/V8InspectorBackendCustom.cpp
index c8d6bf2..d48292b 100644
--- a/WebCore/bindings/v8/custom/V8InspectorBackendCustom.cpp
+++ b/WebCore/bindings/v8/custom/V8InspectorBackendCustom.cpp
@@ -232,11 +232,11 @@ CALLBACK_FUNC_DECL(InspectorBackendNodeForId)
CALLBACK_FUNC_DECL(InspectorBackendWrapObject)
{
INC_STATS("InspectorBackend.wrapObject()");
- if (args.Length() < 1)
+ if (args.Length() < 2)
return v8::Undefined();
InspectorBackend* inspectorBackend = V8DOMWrapper::convertToNativeObject<InspectorBackend>(V8ClassIndex::INSPECTORBACKEND, args.Holder());
- return inspectorBackend->wrapObject(ScriptValue(args[0])).v8Value();
+ return inspectorBackend->wrapObject(ScriptValue(args[0]), toWebCoreStringWithNullCheck(args[1])).v8Value();
}
CALLBACK_FUNC_DECL(InspectorBackendUnwrapObject)
diff --git a/WebCore/inspector/InspectorBackend.cpp b/WebCore/inspector/InspectorBackend.cpp
index 06289bc..7b93f45 100644
--- a/WebCore/inspector/InspectorBackend.cpp
+++ b/WebCore/inspector/InspectorBackend.cpp
@@ -477,10 +477,10 @@ Node* InspectorBackend::nodeForId(long nodeId)
return 0;
}
-ScriptValue InspectorBackend::wrapObject(const ScriptValue& object)
+ScriptValue InspectorBackend::wrapObject(const ScriptValue& object, const String& objectGroup)
{
if (m_inspectorController)
- return m_inspectorController->wrapObject(object);
+ return m_inspectorController->wrapObject(object, objectGroup);
return ScriptValue();
}
@@ -491,6 +491,12 @@ ScriptValue InspectorBackend::unwrapObject(const String& objectId)
return ScriptValue();
}
+void InspectorBackend::releaseWrapperObjectGroup(const String& objectGroup)
+{
+ if (m_inspectorController)
+ m_inspectorController->releaseWrapperObjectGroup(objectGroup);
+}
+
long InspectorBackend::pushNodePathToFrontend(Node* node, bool selectInUI)
{
InspectorFrontend* frontend = inspectorFrontend();
diff --git a/WebCore/inspector/InspectorBackend.h b/WebCore/inspector/InspectorBackend.h
index 4a3aa1e..9408673 100644
--- a/WebCore/inspector/InspectorBackend.h
+++ b/WebCore/inspector/InspectorBackend.h
@@ -144,8 +144,9 @@ public:
// Generic code called from custom implementations.
void highlight(long nodeId);
Node* nodeForId(long nodeId);
- ScriptValue wrapObject(const ScriptValue& object);
+ ScriptValue wrapObject(const ScriptValue& object, const String& objectGroup);
ScriptValue unwrapObject(const String& objectId);
+ void releaseWrapperObjectGroup(const String& objectGroup);
long pushNodePathToFrontend(Node* node, bool selectInUI);
void addNodesToSearchResult(const String& nodeIds);
#if ENABLE(DATABASE)
diff --git a/WebCore/inspector/InspectorBackend.idl b/WebCore/inspector/InspectorBackend.idl
index 56f66b9..538f1bc 100644
--- a/WebCore/inspector/InspectorBackend.idl
+++ b/WebCore/inspector/InspectorBackend.idl
@@ -114,8 +114,9 @@ module core {
// Called from InjectedScript.
[Custom] DOMObject nodeForId(in long nodeId);
- [Custom] long wrapObject(in DOMObject object);
+ [Custom] long wrapObject(in DOMObject object, in DOMString objectGroup);
[Custom] DOMObject unwrapObject(in long objectId);
+ void releaseWrapperObjectGroup(in DOMString objectGroup);
[Custom] int pushNodePathToFrontend(in DOMObject node, in boolean selectInUI);
void addNodesToSearchResult(in DOMString nodeIds);
#if defined(ENABLE_DATABASE) && ENABLE_DATABASE
diff --git a/WebCore/inspector/InspectorController.cpp b/WebCore/inspector/InspectorController.cpp
index 29a9e28..15d7325 100644
--- a/WebCore/inspector/InspectorController.cpp
+++ b/WebCore/inspector/InspectorController.cpp
@@ -390,7 +390,7 @@ void InspectorController::clearConsoleMessages(bool clearUI)
m_consoleMessages.clear();
m_previousMessage = 0;
m_groupLevel = 0;
- m_idToConsoleObject.clear();
+ releaseWrapperObjectGroup("console");
if (m_domAgent)
m_domAgent->releaseDanglingNodes();
if (clearUI && m_frontend)
@@ -705,6 +705,8 @@ void InspectorController::resetScriptObjects()
m_frontend->reset();
m_domAgent->setDocument(0);
+ m_objectGroups.clear();
+ m_idToWrappedObject.clear();
}
void InspectorController::pruneResources(ResourcesMap* resourceMap, DocumentLoader* loaderToKeep)
@@ -1665,15 +1667,18 @@ InspectorController::SpecialPanels InspectorController::specialPanelForJSName(co
return ElementsPanel;
}
-ScriptValue InspectorController::wrapObject(const ScriptValue& quarantinedObject)
+ScriptValue InspectorController::wrapObject(const ScriptValue& quarantinedObject, const String& objectGroup)
{
ScriptFunctionCall function(m_scriptState, m_injectedScriptObj, "createProxyObject");
function.appendArgument(quarantinedObject);
if (quarantinedObject.isObject()) {
long id = m_lastBoundObjectId++;
String objectId = String::format("object#%ld", id);
- m_idToConsoleObject.set(objectId, quarantinedObject);
-
+ m_idToWrappedObject.set(objectId, quarantinedObject);
+ ObjectGroupsMap::iterator it = m_objectGroups.find(objectGroup);
+ if (it == m_objectGroups.end())
+ it = m_objectGroups.set(objectGroup, Vector<String>()).first;
+ it->second.append(objectId);
function.appendArgument(objectId);
}
ScriptValue wrapper = function.call();
@@ -1682,12 +1687,24 @@ ScriptValue InspectorController::wrapObject(const ScriptValue& quarantinedObject
ScriptValue InspectorController::unwrapObject(const String& objectId)
{
- HashMap<String, ScriptValue>::iterator it = m_idToConsoleObject.find(objectId);
- if (it != m_idToConsoleObject.end())
+ HashMap<String, ScriptValue>::iterator it = m_idToWrappedObject.find(objectId);
+ if (it != m_idToWrappedObject.end())
return it->second;
return ScriptValue();
}
+void InspectorController::releaseWrapperObjectGroup(const String& objectGroup)
+{
+ ObjectGroupsMap::iterator groupIt = m_objectGroups.find(objectGroup);
+ if (groupIt == m_objectGroups.end())
+ return;
+
+ Vector<String>& groupIds = groupIt->second;
+ for (Vector<String>::iterator it = groupIds.begin(); it != groupIds.end(); ++it)
+ m_idToWrappedObject.remove(*it);
+ m_objectGroups.remove(groupIt);
+}
+
void InspectorController::resetInjectedScript()
{
ScriptFunctionCall function(m_scriptState, m_injectedScriptObj, "reset");
diff --git a/WebCore/inspector/InspectorController.h b/WebCore/inspector/InspectorController.h
index 0c86b1e..04653dd 100644
--- a/WebCore/inspector/InspectorController.h
+++ b/WebCore/inspector/InspectorController.h
@@ -92,6 +92,7 @@ public:
typedef HashMap<RefPtr<Frame>, ResourcesMap*> FrameResourcesMap;
typedef HashSet<RefPtr<InspectorDatabaseResource> > DatabaseResourcesSet;
typedef HashSet<RefPtr<InspectorDOMStorageResource> > DOMStorageResourcesSet;
+ typedef HashMap<String, Vector<String> > ObjectGroupsMap;
typedef enum {
CurrentPanel,
@@ -300,8 +301,9 @@ private:
// Following are used from InspectorFrontend only. We don't want to expose them to the
// rest of the InspectorController clients.
// TODO: extract these into a separate interface.
- ScriptValue wrapObject(const ScriptValue& object);
+ ScriptValue wrapObject(const ScriptValue& object, const String& objectGroup);
ScriptValue unwrapObject(const String& objectId);
+ void releaseWrapperObjectGroup(const String& objectGroup);
void resetInjectedScript();
@@ -367,7 +369,9 @@ private:
bool m_resourceTrackingEnabled;
bool m_resourceTrackingSettingsLoaded;
RefPtr<InspectorBackend> m_inspectorBackend;
- HashMap<String, ScriptValue> m_idToConsoleObject;
+ HashMap<String, ScriptValue> m_idToWrappedObject;
+ ObjectGroupsMap m_objectGroups;
+
long m_lastBoundObjectId;
Vector<pair<long, String> > m_pendingEvaluateTestCommands;
#if ENABLE(JAVASCRIPT_DEBUGGER)
diff --git a/WebCore/inspector/InspectorFrontend.cpp b/WebCore/inspector/InspectorFrontend.cpp
index 9944e3c..25711cb 100644
--- a/WebCore/inspector/InspectorFrontend.cpp
+++ b/WebCore/inspector/InspectorFrontend.cpp
@@ -87,7 +87,7 @@ void InspectorFrontend::addMessageToConsole(const ScriptObject& messageObj, cons
function->appendArgument(frames[i]);
} else if (!wrappedArguments.isEmpty()) {
for (unsigned i = 0; i < wrappedArguments.size(); ++i)
- function->appendArgument(m_inspectorController->wrapObject(wrappedArguments[i]));
+ function->appendArgument(m_inspectorController->wrapObject(wrappedArguments[i], "console"));
} else
function->appendArgument(message);
function->call();
diff --git a/WebCore/inspector/front-end/ConsoleView.js b/WebCore/inspector/front-end/ConsoleView.js
index 4f50ecc..3782d32 100644
--- a/WebCore/inspector/front-end/ConsoleView.js
+++ b/WebCore/inspector/front-end/ConsoleView.js
@@ -391,16 +391,16 @@ WebInspector.ConsoleView.prototype = {
this.prompt.handleKeyEvent(event);
},
- evalInInspectedWindow: function(expression, callback)
+ evalInInspectedWindow: function(expression, objectGroup, callback)
{
if (WebInspector.panels.scripts && WebInspector.panels.scripts.paused) {
- WebInspector.panels.scripts.evaluateInSelectedCallFrame(expression, false, callback);
+ WebInspector.panels.scripts.evaluateInSelectedCallFrame(expression, false, objectGroup, callback);
return;
}
- this.doEvalInWindow(expression, callback);
+ this.doEvalInWindow(expression, objectGroup, callback);
},
- doEvalInWindow: function(expression, callback)
+ doEvalInWindow: function(expression, objectGroup, callback)
{
if (!expression) {
// There is no expression, so the completion should happen against global properties.
@@ -411,7 +411,7 @@ WebInspector.ConsoleView.prototype = {
{
callback(result.value, result.isException);
};
- InjectedScriptAccess.evaluate(expression, evalCallback);
+ InjectedScriptAccess.evaluate(expression, objectGroup, evalCallback);
},
_enterKeyPressed: function(event)
@@ -439,7 +439,7 @@ WebInspector.ConsoleView.prototype = {
self.prompt.text = "";
self.addMessage(new WebInspector.ConsoleCommandResult(result, exception, commandMessage));
}
- this.evalInInspectedWindow(str, printResult);
+ this.evalInInspectedWindow(str, "console", printResult);
},
_format: function(output, forceObjectFormat)
diff --git a/WebCore/inspector/front-end/InjectedScript.js b/WebCore/inspector/front-end/InjectedScript.js
index 87293b8..4055d00 100644
--- a/WebCore/inspector/front-end/InjectedScript.js
+++ b/WebCore/inspector/front-end/InjectedScript.js
@@ -529,16 +529,16 @@ InjectedScript.getCompletions = function(expression, includeInspectorCommandLine
return props;
}
-InjectedScript.evaluate = function(expression)
+InjectedScript.evaluate = function(expression, objectGroup)
{
- return InjectedScript._evaluateAndWrap(InjectedScript._window().eval, InjectedScript._window(), expression);
+ return InjectedScript._evaluateAndWrap(InjectedScript._window().eval, InjectedScript._window(), expression, objectGroup);
}
-InjectedScript._evaluateAndWrap = function(evalFunction, object, expression)
+InjectedScript._evaluateAndWrap = function(evalFunction, object, expression, objectGroup)
{
var result = {};
try {
- result.value = InspectorController.wrapObject(InjectedScript._evaluateOn(evalFunction, object, expression));
+ result.value = InspectorController.wrapObject(InjectedScript._evaluateOn(evalFunction, object, expression), objectGroup);
// Handle error that might have happened while describing result.
if (result.value.errorText) {
result.value = result.value.errorText;
@@ -838,12 +838,12 @@ InjectedScript.getCallFrames = function()
return result;
}
-InjectedScript.evaluateInCallFrame = function(callFrameId, code)
+InjectedScript.evaluateInCallFrame = function(callFrameId, code, objectGroup)
{
var callFrame = InjectedScript._callFrameForId(callFrameId);
if (!callFrame)
return false;
- return InjectedScript._evaluateAndWrap(callFrame.evaluate, callFrame, code);
+ return InjectedScript._evaluateAndWrap(callFrame.evaluate, callFrame, code, objectGroup);
}
InjectedScript._callFrameForId = function(id)
diff --git a/WebCore/inspector/front-end/ScriptsPanel.js b/WebCore/inspector/front-end/ScriptsPanel.js
index ae918d1..05ec197 100644
--- a/WebCore/inspector/front-end/ScriptsPanel.js
+++ b/WebCore/inspector/front-end/ScriptsPanel.js
@@ -359,7 +359,7 @@ WebInspector.ScriptsPanel.prototype = {
return selectedCallFrame.id;
},
- evaluateInSelectedCallFrame: function(code, updateInterface, callback)
+ evaluateInSelectedCallFrame: function(code, updateInterface, objectGroup, callback)
{
var selectedCallFrame = this.sidebarPanes.callstack.selectedCallFrame;
if (!this._paused || !selectedCallFrame)
@@ -375,17 +375,17 @@ WebInspector.ScriptsPanel.prototype = {
if (updateInterface)
self.sidebarPanes.scopechain.update(selectedCallFrame);
}
- this.doEvalInCallFrame(selectedCallFrame, code, updatingCallbackWrapper);
+ this.doEvalInCallFrame(selectedCallFrame, code, objectGroup, updatingCallbackWrapper);
},
- doEvalInCallFrame: function(callFrame, code, callback)
+ doEvalInCallFrame: function(callFrame, code, objectGroup, callback)
{
function evalCallback(result)
{
if (result)
callback(result.value, result.isException);
}
- InjectedScriptAccess.evaluateInCallFrame(callFrame.id, code, evalCallback);
+ InjectedScriptAccess.evaluateInCallFrame(callFrame.id, code, objectGroup, evalCallback);
},
variablesInSelectedCallFrame: function()
diff --git a/WebCore/inspector/front-end/WatchExpressionsSidebarPane.js b/WebCore/inspector/front-end/WatchExpressionsSidebarPane.js
index d6d1d61..96a20ab 100644
--- a/WebCore/inspector/front-end/WatchExpressionsSidebarPane.js
+++ b/WebCore/inspector/front-end/WatchExpressionsSidebarPane.js
@@ -75,6 +75,8 @@ WebInspector.WatchExpressionsSection = function()
this.editable = true;
this.expanded = true;
this.propertiesElement.addStyleClass("watch-expressions");
+
+ this._watchObjectGroupId = "watch-group";
}
WebInspector.WatchExpressionsSection.NewWatchExpression = "\xA0";
@@ -114,6 +116,7 @@ WebInspector.WatchExpressionsSection.prototype = {
this.updateProperties(properties, WebInspector.WatchExpressionTreeElement, WebInspector.WatchExpressionsSection.CompareProperties);
}
+ InspectorController.releaseWrapperObjectGroup(this._watchObjectGroupId)
var properties = [];
// Count the properties, so we known when to call this.updateProperties()
@@ -129,10 +132,10 @@ WebInspector.WatchExpressionsSection.prototype = {
// which is checked in the appendResult inner function.
for (var i = 0; i < this.watchExpressions.length; ++i) {
var expression = this.watchExpressions[i];
- if (!expression)
+ if (!expression)
continue;
- WebInspector.console.evalInInspectedWindow("(" + expression + ")", appendResult.bind(this, expression, i));
+ WebInspector.console.evalInInspectedWindow("(" + expression + ")", this._watchObjectGroupId, appendResult.bind(this, expression, i));
}
// note this is setting the expansion of the tree, not the section;
--
WebKit Debian packaging
More information about the Pkg-webkit-commits
mailing list