[SCM] WebKit Debian packaging branch, webkit-1.1, updated. upstream/1.1.15.1-1414-gc69ee75
eric at webkit.org
eric at webkit.org
Thu Oct 29 20:32:16 UTC 2009
The following commit has been merged in the webkit-1.1 branch:
commit 28fe011121909e07bc57ac091f73bfa83edb3d16
Author: eric at webkit.org <eric at webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date: Wed Sep 23 00:09:09 2009 +0000
2009-09-22 Yury Semikhatsky <yurys at chromium.org>
Reviewed by Timothy Hatcher.
WebInspector: Migrate Databases tab to InjectedScript /
serialized interaction.
DOMStorage interaction is now serialized into JSON messages
and doesn't require quarantined objects.
https://bugs.webkit.org/show_bug.cgi?id=28873
* dom/EventListener.h:
(WebCore::EventListener::):
* inspector/InspectorBackend.cpp:
(WebCore::InspectorBackend::selectDOMStorage):
(WebCore::InspectorBackend::getDOMStorageEntries):
(WebCore::InspectorBackend::setDOMStorageItem):
(WebCore::InspectorBackend::removeDOMStorageItem):
* inspector/InspectorBackend.h:
* inspector/InspectorBackend.idl:
* inspector/InspectorController.cpp:
(WebCore::InspectorController::didCommitLoad):
(WebCore::InspectorController::selectDOMStorage):
(WebCore::InspectorController::getDOMStorageEntries):
(WebCore::InspectorController::setDOMStorageItem):
(WebCore::InspectorController::removeDOMStorageItem):
(WebCore::InspectorController::getDOMStorageResourceForId):
* inspector/InspectorController.h:
* inspector/InspectorDOMStorageResource.cpp:
(WebCore::InspectorDOMStorageResource::InspectorDOMStorageResource):
(WebCore::InspectorDOMStorageResource::bind):
(WebCore::InspectorDOMStorageResource::unbind):
(WebCore::InspectorDOMStorageResource::startReportingChangesToFrontend):
(WebCore::InspectorDOMStorageResource::handleEvent):
(WebCore::InspectorDOMStorageResource::operator==):
* inspector/InspectorDOMStorageResource.h:
(WebCore::InspectorDOMStorageResource::cast):
(WebCore::InspectorDOMStorageResource::id):
(WebCore::InspectorDOMStorageResource::domStorage):
* inspector/InspectorFrontend.cpp:
(WebCore::InspectorFrontend::selectDOMStorage):
(WebCore::InspectorFrontend::didGetDOMStorageEntries):
(WebCore::InspectorFrontend::didSetDOMStorageItem):
(WebCore::InspectorFrontend::didRemoveDOMStorageItem):
(WebCore::InspectorFrontend::updateDOMStorage):
* inspector/InspectorFrontend.h:
* inspector/front-end/DOMStorage.js:
(WebInspector.DOMStorage):
(WebInspector.DOMStorage.prototype.get id):
(WebInspector.DOMStorage.prototype.get domStorage):
(WebInspector.DOMStorage.prototype.get isLocalStorage):
(WebInspector.DOMStorage.prototype.getEntriesAsync):
(WebInspector.DOMStorage.prototype.setItemAsync):
(WebInspector.DOMStorage.prototype.removeItemAsync):
* inspector/front-end/DOMStorageDataGrid.js:
(WebInspector.DOMStorageDataGrid):
(WebInspector.DOMStorageDataGrid.prototype._startEditingColumnOfDataGridNode):
(WebInspector.DOMStorageDataGrid.prototype._startEditing):
(WebInspector.DOMStorageDataGrid.prototype._editingCommitted):
(WebInspector.DOMStorageDataGrid.prototype._editingCancelled):
(WebInspector.DOMStorageDataGrid.prototype.deleteSelectedRow):
* inspector/front-end/DOMStorageItemsView.js:
(WebInspector.DOMStorageItemsView.prototype.update):
(WebInspector.DOMStorageItemsView.prototype._showDOMStorageEntries):
(WebInspector.DOMStorageItemsView.prototype._dataGridForDOMStorageEntries):
* inspector/front-end/StoragePanel.js:
(WebInspector.StoragePanel.prototype.show):
(WebInspector.StoragePanel.prototype.reset):
(WebInspector.StoragePanel.prototype.selectDOMStorage):
(WebInspector.StoragePanel.prototype.updateDOMStorage):
(WebInspector.StoragePanel.prototype._domStorageForId):
* inspector/front-end/inspector.js:
(WebInspector.addDOMStorage):
(WebInspector.updateDOMStorage):
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@48659 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
index dc405c1..4355458 100644
--- a/WebCore/ChangeLog
+++ b/WebCore/ChangeLog
@@ -1,3 +1,79 @@
+2009-09-22 Yury Semikhatsky <yurys at chromium.org>
+
+ Reviewed by Timothy Hatcher.
+
+ WebInspector: Migrate Databases tab to InjectedScript /
+ serialized interaction.
+
+ DOMStorage interaction is now serialized into JSON messages
+ and doesn't require quarantined objects.
+
+ https://bugs.webkit.org/show_bug.cgi?id=28873
+
+ * dom/EventListener.h:
+ (WebCore::EventListener::):
+ * inspector/InspectorBackend.cpp:
+ (WebCore::InspectorBackend::selectDOMStorage):
+ (WebCore::InspectorBackend::getDOMStorageEntries):
+ (WebCore::InspectorBackend::setDOMStorageItem):
+ (WebCore::InspectorBackend::removeDOMStorageItem):
+ * inspector/InspectorBackend.h:
+ * inspector/InspectorBackend.idl:
+ * inspector/InspectorController.cpp:
+ (WebCore::InspectorController::didCommitLoad):
+ (WebCore::InspectorController::selectDOMStorage):
+ (WebCore::InspectorController::getDOMStorageEntries):
+ (WebCore::InspectorController::setDOMStorageItem):
+ (WebCore::InspectorController::removeDOMStorageItem):
+ (WebCore::InspectorController::getDOMStorageResourceForId):
+ * inspector/InspectorController.h:
+ * inspector/InspectorDOMStorageResource.cpp:
+ (WebCore::InspectorDOMStorageResource::InspectorDOMStorageResource):
+ (WebCore::InspectorDOMStorageResource::bind):
+ (WebCore::InspectorDOMStorageResource::unbind):
+ (WebCore::InspectorDOMStorageResource::startReportingChangesToFrontend):
+ (WebCore::InspectorDOMStorageResource::handleEvent):
+ (WebCore::InspectorDOMStorageResource::operator==):
+ * inspector/InspectorDOMStorageResource.h:
+ (WebCore::InspectorDOMStorageResource::cast):
+ (WebCore::InspectorDOMStorageResource::id):
+ (WebCore::InspectorDOMStorageResource::domStorage):
+ * inspector/InspectorFrontend.cpp:
+ (WebCore::InspectorFrontend::selectDOMStorage):
+ (WebCore::InspectorFrontend::didGetDOMStorageEntries):
+ (WebCore::InspectorFrontend::didSetDOMStorageItem):
+ (WebCore::InspectorFrontend::didRemoveDOMStorageItem):
+ (WebCore::InspectorFrontend::updateDOMStorage):
+ * inspector/InspectorFrontend.h:
+ * inspector/front-end/DOMStorage.js:
+ (WebInspector.DOMStorage):
+ (WebInspector.DOMStorage.prototype.get id):
+ (WebInspector.DOMStorage.prototype.get domStorage):
+ (WebInspector.DOMStorage.prototype.get isLocalStorage):
+ (WebInspector.DOMStorage.prototype.getEntriesAsync):
+ (WebInspector.DOMStorage.prototype.setItemAsync):
+ (WebInspector.DOMStorage.prototype.removeItemAsync):
+ * inspector/front-end/DOMStorageDataGrid.js:
+ (WebInspector.DOMStorageDataGrid):
+ (WebInspector.DOMStorageDataGrid.prototype._startEditingColumnOfDataGridNode):
+ (WebInspector.DOMStorageDataGrid.prototype._startEditing):
+ (WebInspector.DOMStorageDataGrid.prototype._editingCommitted):
+ (WebInspector.DOMStorageDataGrid.prototype._editingCancelled):
+ (WebInspector.DOMStorageDataGrid.prototype.deleteSelectedRow):
+ * inspector/front-end/DOMStorageItemsView.js:
+ (WebInspector.DOMStorageItemsView.prototype.update):
+ (WebInspector.DOMStorageItemsView.prototype._showDOMStorageEntries):
+ (WebInspector.DOMStorageItemsView.prototype._dataGridForDOMStorageEntries):
+ * inspector/front-end/StoragePanel.js:
+ (WebInspector.StoragePanel.prototype.show):
+ (WebInspector.StoragePanel.prototype.reset):
+ (WebInspector.StoragePanel.prototype.selectDOMStorage):
+ (WebInspector.StoragePanel.prototype.updateDOMStorage):
+ (WebInspector.StoragePanel.prototype._domStorageForId):
+ * inspector/front-end/inspector.js:
+ (WebInspector.addDOMStorage):
+ (WebInspector.updateDOMStorage):
+
2009-09-22 Sam Weinig <sam at webkit.org>
Reviewed by Alexey Proskuryakov.
diff --git a/WebCore/dom/EventListener.h b/WebCore/dom/EventListener.h
index 501c61d..7d3ac98 100644
--- a/WebCore/dom/EventListener.h
+++ b/WebCore/dom/EventListener.h
@@ -37,7 +37,8 @@ namespace WebCore {
public:
enum Type { JSEventListenerType,
ImageEventListenerType,
- InspectorDOMAgentType,
+ InspectorDOMAgentType,
+ InspectorDOMStorageResourceType,
ObjCEventListenerType,
ConditionEventListenerType };
diff --git a/WebCore/inspector/InspectorBackend.cpp b/WebCore/inspector/InspectorBackend.cpp
index 25034fa..c140b13 100644
--- a/WebCore/inspector/InspectorBackend.cpp
+++ b/WebCore/inspector/InspectorBackend.cpp
@@ -502,8 +502,26 @@ void InspectorBackend::selectDatabase(Database* database)
#if ENABLE(DOM_STORAGE)
void InspectorBackend::selectDOMStorage(Storage* storage)
{
- if (InspectorFrontend* frontend = inspectorFrontend())
- frontend->selectDOMStorage(storage);
+ if (m_inspectorController)
+ m_inspectorController->selectDOMStorage(storage);
+}
+
+void InspectorBackend::getDOMStorageEntries(long callId, long storageId)
+{
+ if (m_inspectorController)
+ m_inspectorController->getDOMStorageEntries(callId, storageId);
+}
+
+void InspectorBackend::setDOMStorageItem(long callId, long storageId, const String& key, const String& value)
+{
+ if (m_inspectorController)
+ m_inspectorController->setDOMStorageItem(callId, storageId, key, value);
+}
+
+void InspectorBackend::removeDOMStorageItem(long callId, long storageId, const String& key)
+{
+ if (m_inspectorController)
+ m_inspectorController->removeDOMStorageItem(callId, storageId, key);
}
#endif
diff --git a/WebCore/inspector/InspectorBackend.h b/WebCore/inspector/InspectorBackend.h
index 22b46bf..038ae14 100644
--- a/WebCore/inspector/InspectorBackend.h
+++ b/WebCore/inspector/InspectorBackend.h
@@ -151,6 +151,9 @@ public:
#endif
#if ENABLE(DOM_STORAGE)
void selectDOMStorage(Storage* storage);
+ void getDOMStorageEntries(long callId, long storageId);
+ void setDOMStorageItem(long callId, long storageId, const String& key, const String& value);
+ void removeDOMStorageItem(long callId, long storageId, const String& key);
#endif
private:
diff --git a/WebCore/inspector/InspectorBackend.idl b/WebCore/inspector/InspectorBackend.idl
index 4540001..395e7fd 100644
--- a/WebCore/inspector/InspectorBackend.idl
+++ b/WebCore/inspector/InspectorBackend.idl
@@ -121,6 +121,9 @@ module core {
#endif
#if defined(ENABLE_DOM_STORAGE) && ENABLE_DOM_STORAGE
[Custom] void selectDOMStorage(in DOMObject storage);
+ void getDOMStorageEntries(in long callId, in long storageId);
+ void setDOMStorageItem(in long callId, in long storageId, in DOMString key, in DOMString value);
+ void removeDOMStorageItem(in long callId, in long storageId, in DOMString key);
#endif
};
}
diff --git a/WebCore/inspector/InspectorController.cpp b/WebCore/inspector/InspectorController.cpp
index d3509d1..fc75bbb 100644
--- a/WebCore/inspector/InspectorController.cpp
+++ b/WebCore/inspector/InspectorController.cpp
@@ -733,6 +733,9 @@ void InspectorController::didCommitLoad(DocumentLoader* loader)
m_currentUserInitiatedProfileNumber = 1;
m_nextUserInitiatedProfileNumber = 1;
#endif
+ // resetScriptObjects should be called before database and DOM storage
+ // resources are cleared so that it has a chance to unbind them.
+ resetScriptObjects();
#if ENABLE(DATABASE)
m_databaseResources.clear();
#endif
@@ -741,8 +744,6 @@ void InspectorController::didCommitLoad(DocumentLoader* loader)
#endif
if (m_frontend) {
- resetScriptObjects();
-
if (!loader->frameLoader()->isLoadingFromCachedPage()) {
ASSERT(m_mainResource && m_mainResource->isSameLoader(loader));
// We don't add the main resource until its load is committed. This is
@@ -1110,6 +1111,86 @@ void InspectorController::didUseDOMStorage(StorageArea* storageArea, bool isLoca
if (m_frontend)
resource->bind(m_frontend.get());
}
+
+void InspectorController::selectDOMStorage(Storage* storage)
+{
+ ASSERT(storage);
+ if (!m_frontend)
+ return;
+
+ Frame* frame = storage->frame();
+ bool isLocalStorage = (frame->domWindow()->localStorage() == storage);
+ int storageResourceId = 0;
+ DOMStorageResourcesSet::iterator domStorageEnd = m_domStorageResources.end();
+ for (DOMStorageResourcesSet::iterator it = m_domStorageResources.begin(); it != domStorageEnd; ++it) {
+ if ((*it)->isSameHostAndType(frame, isLocalStorage)) {
+ storageResourceId = (*it)->id();
+ break;
+ }
+ }
+ if (storageResourceId)
+ m_frontend->selectDOMStorage(storageResourceId);
+}
+
+void InspectorController::getDOMStorageEntries(int callId, int storageId)
+{
+ if (!m_frontend)
+ return;
+
+ ScriptArray jsonArray = m_frontend->newScriptArray();
+ InspectorDOMStorageResource* storageResource = getDOMStorageResourceForId(storageId);
+ if (storageResource) {
+ storageResource->startReportingChangesToFrontend();
+ Storage* domStorage = storageResource->domStorage();
+ for (unsigned i = 0; i < domStorage->length(); ++i) {
+ String name(domStorage->key(i));
+ String value(domStorage->getItem(name));
+ ScriptArray entry = m_frontend->newScriptArray();
+ entry.set(0, name);
+ entry.set(1, value);
+ jsonArray.set(i, entry);
+ }
+ }
+ m_frontend->didGetDOMStorageEntries(callId, jsonArray);
+}
+
+void InspectorController::setDOMStorageItem(long callId, long storageId, const String& key, const String& value)
+{
+ if (!m_frontend)
+ return;
+
+ bool success = false;
+ InspectorDOMStorageResource* storageResource = getDOMStorageResourceForId(storageId);
+ if (storageResource) {
+ ExceptionCode exception = 0;
+ storageResource->domStorage()->setItem(key, value, exception);
+ success = (exception == 0);
+ }
+ m_frontend->didSetDOMStorageItem(callId, success);
+}
+
+void InspectorController::removeDOMStorageItem(long callId, long storageId, const String& key)
+{
+ if (!m_frontend)
+ return;
+
+ bool success = false;
+ InspectorDOMStorageResource* storageResource = getDOMStorageResourceForId(storageId);
+ if (storageResource) {
+ storageResource->domStorage()->removeItem(key);
+ success = true;
+ }
+ m_frontend->didRemoveDOMStorageItem(callId, success);
+}
+
+InspectorDOMStorageResource* InspectorController::getDOMStorageResourceForId(int storageId)
+{
+ DOMStorageResourcesSet::iterator domStorageEnd = m_domStorageResources.end();
+ for (DOMStorageResourcesSet::iterator it = m_domStorageResources.begin(); it != domStorageEnd; ++it)
+ if ((*it)->id() == storageId)
+ return it->get();
+ return 0;
+}
#endif
void InspectorController::moveWindowBy(float x, float y) const
diff --git a/WebCore/inspector/InspectorController.h b/WebCore/inspector/InspectorController.h
index f3e230e..20295aa 100644
--- a/WebCore/inspector/InspectorController.h
+++ b/WebCore/inspector/InspectorController.h
@@ -74,6 +74,7 @@ class ResourceError;
class ScriptCallStack;
class ScriptString;
class SharedBuffer;
+class Storage;
class StorageArea;
class ConsoleMessage;
@@ -232,6 +233,10 @@ public:
#endif
#if ENABLE(DOM_STORAGE)
void didUseDOMStorage(StorageArea* storageArea, bool isLocalStorage, Frame* frame);
+ void selectDOMStorage(Storage* storage);
+ void getDOMStorageEntries(int callId, int storageId);
+ void setDOMStorageItem(long callId, long storageId, const String& key, const String& value);
+ void removeDOMStorageItem(long callId, long storageId, const String& key);
#endif
const ResourcesMap& resources() const { return m_resources; }
@@ -301,6 +306,9 @@ private:
void toggleRecordButton(bool);
void enableDebuggerFromFrontend(bool always);
#endif
+#if ENABLE(DOM_STORAGE)
+ InspectorDOMStorageResource* getDOMStorageResourceForId(int storageId);
+#endif
void focusNode();
diff --git a/WebCore/inspector/InspectorDOMStorageResource.cpp b/WebCore/inspector/InspectorDOMStorageResource.cpp
index 2f4aa53..a7283a0 100644
--- a/WebCore/inspector/InspectorDOMStorageResource.cpp
+++ b/WebCore/inspector/InspectorDOMStorageResource.cpp
@@ -35,21 +35,27 @@
#include "InspectorDOMStorageResource.h"
#include "Document.h"
+#include "EventNames.h"
#include "Frame.h"
#include "InspectorFrontend.h"
#include "ScriptObject.h"
-#include "ScriptObjectQuarantine.h"
#include "Storage.h"
+#include "StorageEvent.h"
using namespace JSC;
namespace WebCore {
+int InspectorDOMStorageResource::s_nextUnusedId = 1;
+
InspectorDOMStorageResource::InspectorDOMStorageResource(Storage* domStorage, bool isLocalStorage, Frame* frame)
- : m_domStorage(domStorage)
+ : EventListener(InspectorDOMStorageResourceType)
+ , m_domStorage(domStorage)
, m_isLocalStorage(isLocalStorage)
, m_frame(frame)
- , m_scriptObjectCreated(false)
+ , m_frontend(0)
+ , m_id(s_nextUnusedId++)
+ , m_reportingChangesToFrontend(false)
{
}
@@ -60,23 +66,49 @@ bool InspectorDOMStorageResource::isSameHostAndType(Frame* frame, bool isLocalSt
void InspectorDOMStorageResource::bind(InspectorFrontend* frontend)
{
- if (m_scriptObjectCreated)
- return;
+ ASSERT(!m_frontend);
+ m_frontend = frontend;
ScriptObject jsonObject = frontend->newScriptObject();
- ScriptObject domStorage;
- if (!getQuarantinedScriptObject(m_domStorage.get(), domStorage))
- return;
- jsonObject.set("domStorage", domStorage);
jsonObject.set("host", m_frame->document()->securityOrigin()->host());
jsonObject.set("isLocalStorage", m_isLocalStorage);
- if (frontend->addDOMStorage(jsonObject))
- m_scriptObjectCreated = true;
+ jsonObject.set("id", m_id);
+ frontend->addDOMStorage(jsonObject);
}
void InspectorDOMStorageResource::unbind()
{
- m_scriptObjectCreated = false;
+ ASSERT(m_frontend);
+ if (m_reportingChangesToFrontend) {
+ m_frame->domWindow()->removeEventListener(eventNames().storageEvent, this, true);
+ m_reportingChangesToFrontend = false;
+ }
+ m_frontend = 0;
+}
+
+void InspectorDOMStorageResource::startReportingChangesToFrontend()
+{
+ ASSERT(m_frontend);
+ if (!m_reportingChangesToFrontend) {
+ m_frame->domWindow()->addEventListener(eventNames().storageEvent, this, true);
+ m_reportingChangesToFrontend = true;
+ }
+}
+
+void InspectorDOMStorageResource::handleEvent(Event* event, bool)
+{
+ ASSERT(m_frontend);
+ ASSERT(eventNames().storageEvent == event->type());
+ StorageEvent* storageEvent = static_cast<StorageEvent*>(event);
+ Storage* storage = storageEvent->storageArea();
+ bool isLocalStorage = storageEvent->source()->localStorage() == storage;
+ if (isSameHostAndType(storage->frame(), isLocalStorage))
+ m_frontend->updateDOMStorage(m_id);
+}
+
+bool InspectorDOMStorageResource::operator==(const EventListener& listener)
+{
+ return (this == InspectorDOMStorageResource::cast(&listener));
}
} // namespace WebCore
diff --git a/WebCore/inspector/InspectorDOMStorageResource.h b/WebCore/inspector/InspectorDOMStorageResource.h
index 3e05897..483c98e 100644
--- a/WebCore/inspector/InspectorDOMStorageResource.h
+++ b/WebCore/inspector/InspectorDOMStorageResource.h
@@ -33,6 +33,7 @@
#if ENABLE(DOM_STORAGE)
+#include "EventListener.h"
#include "ScriptObject.h"
#include "ScriptState.h"
@@ -46,17 +47,27 @@ namespace WebCore {
class Frame;
class InspectorFrontend;
- class InspectorDOMStorageResource : public RefCounted<InspectorDOMStorageResource> {
+ class InspectorDOMStorageResource : public EventListener {
public:
static PassRefPtr<InspectorDOMStorageResource> create(Storage* domStorage, bool isLocalStorage, Frame* frame)
{
return adoptRef(new InspectorDOMStorageResource(domStorage, isLocalStorage, frame));
}
+ static const InspectorDOMStorageResource* cast(const EventListener* listener)
+ {
+ return listener->type() == InspectorDOMStorageResourceType ? static_cast<const InspectorDOMStorageResource*>(listener) : 0;
+ }
void bind(InspectorFrontend* frontend);
void unbind();
+ void startReportingChangesToFrontend();
+
+ virtual void handleEvent(Event*, bool isWindowEvent);
+ virtual bool operator==(const EventListener& listener);
bool isSameHostAndType(Frame*, bool isLocalStorage) const;
+ long id() const { return m_id; }
+ Storage* domStorage() const { return m_domStorage.get(); }
private:
@@ -65,8 +76,11 @@ namespace WebCore {
RefPtr<Storage> m_domStorage;
bool m_isLocalStorage;
RefPtr<Frame> m_frame;
- bool m_scriptObjectCreated;
+ InspectorFrontend* m_frontend;
+ int m_id;
+ bool m_reportingChangesToFrontend;
+ static int s_nextUnusedId;
};
} // namespace WebCore
diff --git a/WebCore/inspector/InspectorFrontend.cpp b/WebCore/inspector/InspectorFrontend.cpp
index 808abfa..3bdfa97 100644
--- a/WebCore/inspector/InspectorFrontend.cpp
+++ b/WebCore/inspector/InspectorFrontend.cpp
@@ -404,13 +404,41 @@ void InspectorFrontend::selectDatabase(Database* database)
#endif
#if ENABLE(DOM_STORAGE)
-void InspectorFrontend::selectDOMStorage(Storage* storage)
+void InspectorFrontend::selectDOMStorage(int storageId)
{
OwnPtr<ScriptFunctionCall> function(newFunctionCall("selectDOMStorage"));
- ScriptObject quarantinedObject;
- if (!getQuarantinedScriptObject(storage, quarantinedObject))
- return;
- function->appendArgument(quarantinedObject);
+ function->appendArgument(storageId);
+ function->call();
+}
+
+void InspectorFrontend::didGetDOMStorageEntries(int callId, const ScriptArray& entries)
+{
+ OwnPtr<ScriptFunctionCall> function(newFunctionCall("didGetDOMStorageEntries"));
+ function->appendArgument(callId);
+ function->appendArgument(entries);
+ function->call();
+}
+
+void InspectorFrontend::didSetDOMStorageItem(int callId, bool success)
+{
+ OwnPtr<ScriptFunctionCall> function(newFunctionCall("didSetDOMStorageItem"));
+ function->appendArgument(callId);
+ function->appendArgument(success);
+ function->call();
+}
+
+void InspectorFrontend::didRemoveDOMStorageItem(int callId, bool success)
+{
+ OwnPtr<ScriptFunctionCall> function(newFunctionCall("didRemoveDOMStorageItem"));
+ function->appendArgument(callId);
+ function->appendArgument(success);
+ function->call();
+}
+
+void InspectorFrontend::updateDOMStorage(int storageId)
+{
+ OwnPtr<ScriptFunctionCall> function(newFunctionCall("updateDOMStorage"));
+ function->appendArgument(storageId);
function->call();
}
#endif
diff --git a/WebCore/inspector/InspectorFrontend.h b/WebCore/inspector/InspectorFrontend.h
index 42768e6..f9d3ba1 100644
--- a/WebCore/inspector/InspectorFrontend.h
+++ b/WebCore/inspector/InspectorFrontend.h
@@ -99,7 +99,11 @@ namespace WebCore {
#if ENABLE(DOM_STORAGE)
bool addDOMStorage(const ScriptObject& domStorageObj);
- void selectDOMStorage(Storage* storage);
+ void selectDOMStorage(int storageId);
+ void didGetDOMStorageEntries(int callId, const ScriptArray& entries);
+ void didSetDOMStorageItem(int callId, bool success);
+ void didRemoveDOMStorageItem(int callId, bool success);
+ void updateDOMStorage(int storageId);
#endif
void setDocument(const ScriptObject& root);
diff --git a/WebCore/inspector/front-end/DOMStorage.js b/WebCore/inspector/front-end/DOMStorage.js
index 5207b69..03a10bf 100644
--- a/WebCore/inspector/front-end/DOMStorage.js
+++ b/WebCore/inspector/front-end/DOMStorage.js
@@ -26,24 +26,22 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-WebInspector.DOMStorage = function(domStorage, domain, isLocalStorage)
+WebInspector.DOMStorage = function(id, domain, isLocalStorage)
{
- this.domStorage = domStorage;
- this.domain = domain;
- this.isLocalStorage = isLocalStorage;
+ this._id = id;
+ this._domain = domain;
+ this._isLocalStorage = isLocalStorage;
}
WebInspector.DOMStorage.prototype = {
- get domStorage()
+ get id()
{
- return this._domStorage;
+ return this._id;
},
- set domStorage(x)
+ get domStorage()
{
- if (this._domStorage === x)
- return;
- this._domStorage = x;
+ return this._domStorage;
},
get domain()
@@ -51,22 +49,30 @@ WebInspector.DOMStorage.prototype = {
return this._domain;
},
- set domain(x)
+ get isLocalStorage()
+ {
+ return this._isLocalStorage;
+ },
+
+ getEntries: function(callback)
{
- if (this._domain === x)
- return;
- this._domain = x;
+ var callId = WebInspector.Callback.wrap(callback);
+ InspectorController.getDOMStorageEntries(callId, this._id);
},
- get isLocalStorage()
+ setItem: function(key, value, callback)
{
- return this._isLocalStorage;
+ var callId = WebInspector.Callback.wrap(callback);
+ InspectorController.setDOMStorageItem(callId, this._id, key, value);
},
- set isLocalStorage(x)
+ removeItem: function(key, callback)
{
- if (this._isLocalStorage === x)
- return;
- this._isLocalStorage = x;
+ var callId = WebInspector.Callback.wrap(callback);
+ InspectorController.removeDOMStorageItem(callId, this._id, key);
}
}
+
+WebInspector.didGetDOMStorageEntries = WebInspector.Callback.processCallback;
+WebInspector.didSetDOMStorageItem = WebInspector.Callback.processCallback;
+WebInspector.didRemoveDOMStorageItem = WebInspector.Callback.processCallback;
diff --git a/WebCore/inspector/front-end/DOMStorageDataGrid.js b/WebCore/inspector/front-end/DOMStorageDataGrid.js
index efdd090..45a9ba1 100644
--- a/WebCore/inspector/front-end/DOMStorageDataGrid.js
+++ b/WebCore/inspector/front-end/DOMStorageDataGrid.js
@@ -23,10 +23,12 @@
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-WebInspector.DOMStorageDataGrid = function(columns)
+WebInspector.DOMStorageDataGrid = function(columns, domStorage, keys)
{
WebInspector.DataGrid.call(this, columns);
this.dataTableBody.addEventListener("dblclick", this._ondblclick.bind(this), false);
+ this._domStorage = domStorage;
+ this._keys = keys;
}
WebInspector.DOMStorageDataGrid.prototype = {
@@ -44,7 +46,6 @@ WebInspector.DOMStorageDataGrid.prototype = {
this._editing = true;
this._editingNode = node;
this._editingNode.select();
- WebInspector.panels.storage._unregisterStorageEventListener();
var element = this._editingNode._element.children[column];
WebInspector.startEditing(element, this._editingCommitted.bind(this), this._editingCancelled.bind(this), element.textContent);
@@ -69,7 +70,6 @@ WebInspector.DOMStorageDataGrid.prototype = {
return this._startEditingColumnOfDataGridNode(this._editingNode, 0);
this._editing = true;
- WebInspector.panels.storage._unregisterStorageEventListener();
WebInspector.startEditing(element, this._editingCommitted.bind(this), this._editingCancelled.bind(this), element.textContent);
window.getSelection().setBaseAndExtent(element, 0, element, 1);
},
@@ -118,22 +118,20 @@ WebInspector.DOMStorageDataGrid.prototype = {
return;
}
- var domStorage = WebInspector.panels.storage.visibleView.domStorage.domStorage;
- if (domStorage) {
- if (columnIdentifier == 0) {
- if (domStorage.getItem(newText) != null) {
- element.textContent = this._editingNode.data[0];
- this._editingCancelled(element);
- moveToNextIfNeeded.call(this, false);
- return;
- }
- domStorage.removeItem(this._editingNode.data[0]);
- domStorage.setItem(newText, this._editingNode.data[1]);
- this._editingNode.data[0] = newText;
- } else {
- domStorage.setItem(this._editingNode.data[0], newText);
- this._editingNode.data[1] = newText;
+ var domStorage = this._domStorage;
+ if (columnIdentifier === 0) {
+ if (this._keys.indexOf(newText) !== -1) {
+ element.textContent = this._editingNode.data[0];
+ this._editingCancelled(element);
+ moveToNextIfNeeded.call(this, false);
+ return;
}
+ domStorage.removeItem(this._editingNode.data[0]);
+ domStorage.setItem(newText, this._editingNode.data[1]);
+ this._editingNode.data[0] = newText;
+ } else {
+ domStorage.setItem(this._editingNode.data[0], newText);
+ this._editingNode.data[1] = newText;
}
if (this._editingNode.isCreationNode)
@@ -147,18 +145,16 @@ WebInspector.DOMStorageDataGrid.prototype = {
{
delete this._editing;
this._editingNode = null;
- WebInspector.panels.storage._registerStorageEventListener();
},
deleteSelectedRow: function()
{
var node = this.selectedNode;
- if (this.selectedNode.isCreationNode)
+ if (!node || node.isCreationNode)
return;
- var domStorage = WebInspector.panels.storage.visibleView.domStorage.domStorage;
- if (node && domStorage)
- domStorage.removeItem(node.data[0]);
+ if (this._domStorage)
+ this._domStorage.removeItem(node.data[0]);
}
}
diff --git a/WebCore/inspector/front-end/DOMStorageItemsView.js b/WebCore/inspector/front-end/DOMStorageItemsView.js
index 8617d60..a7da370 100644
--- a/WebCore/inspector/front-end/DOMStorageItemsView.js
+++ b/WebCore/inspector/front-end/DOMStorageItemsView.js
@@ -61,39 +61,88 @@ WebInspector.DOMStorageItemsView.prototype = {
update: function()
{
this.element.removeChildren();
- var hasDOMStorage = this.domStorage;
- if (hasDOMStorage)
- hasDOMStorage = this.domStorage.domStorage;
-
- if (hasDOMStorage) {
- var dataGrid = WebInspector.panels.storage.dataGridForDOMStorage(this.domStorage.domStorage);
- if (!dataGrid)
- hasDOMStorage = 0;
- else {
- this._dataGrid = dataGrid;
- this.element.appendChild(dataGrid.element);
- this._dataGrid.updateWidths();
- this.deleteButton.visible = true;
- }
- }
+ var callback = this._showDOMStorageEntries.bind(this);
+ this.domStorage.getEntries(callback);
+ },
- if (!hasDOMStorage) {
+ _showDOMStorageEntries: function(entries)
+ {
+ if (entries.length > 0) {
+ this._dataGrid = this._dataGridForDOMStorageEntries(entries);
+ this.element.appendChild(this._dataGrid.element);
+ this._dataGrid.updateWidths();
+ this.deleteButton.visible = true;
+ } else {
var emptyMsgElement = document.createElement("div");
emptyMsgElement.className = "storage-table-empty";
if (this.domStorage)
- emptyMsgElement.textContent = WebInspector.UIString("This storage is empty.");
+ emptyMsgElement.textContent = WebInspector.UIString("This storage is empty.");
this.element.appendChild(emptyMsgElement);
this._dataGrid = null;
this.deleteButton.visible = false;
}
},
-
+
resize: function()
{
if (this._dataGrid)
this._dataGrid.updateWidths();
},
+ _dataGridForDOMStorageEntries: function(entries)
+ {
+ var columns = {};
+ columns[0] = {};
+ columns[1] = {};
+ columns[0].title = WebInspector.UIString("Key");
+ columns[0].width = columns[0].title.length;
+ columns[1].title = WebInspector.UIString("Value");
+ columns[1].width = columns[1].title.length;
+
+ var nodes = [];
+
+ var keys = [];
+ var length = entries.length;
+ for (var i = 0; i < entries.length; i++) {
+ var data = {};
+
+ var key = entries[i][0];
+ data[0] = key;
+ if (key.length > columns[0].width)
+ columns[0].width = key.length;
+
+ var value = entries[i][1];
+ data[1] = value;
+ if (value.length > columns[1].width)
+ columns[1].width = value.length;
+ var node = new WebInspector.DataGridNode(data, false);
+ node.selectable = true;
+ nodes.push(node);
+ keys.push(key);
+ }
+
+ var totalColumnWidths = columns[0].width + columns[1].width;
+ var width = Math.round((columns[0].width * 100) / totalColumnWidths);
+ const minimumPrecent = 10;
+ if (width < minimumPrecent)
+ width = minimumPrecent;
+ if (width > 100 - minimumPrecent)
+ width = 100 - minimumPrecent;
+ columns[0].width = width;
+ columns[1].width = 100 - width;
+ columns[0].width += "%";
+ columns[1].width += "%";
+
+ var dataGrid = new WebInspector.DOMStorageDataGrid(columns, this.domStorage, keys);
+ var length = nodes.length;
+ for (var i = 0; i < length; ++i)
+ dataGrid.appendChild(nodes[i]);
+ dataGrid.addCreationNode(false);
+ if (length > 0)
+ nodes[0].selected = true;
+ return dataGrid;
+ },
+
_deleteButtonClicked: function(event)
{
if (this._dataGrid) {
diff --git a/WebCore/inspector/front-end/StoragePanel.js b/WebCore/inspector/front-end/StoragePanel.js
index aed0d06..01c657d 100644
--- a/WebCore/inspector/front-end/StoragePanel.js
+++ b/WebCore/inspector/front-end/StoragePanel.js
@@ -93,7 +93,6 @@ WebInspector.StoragePanel.prototype = {
{
WebInspector.Panel.prototype.show.call(this);
this._updateSidebarWidth();
- this._registerStorageEventListener();
},
reset: function()
@@ -110,8 +109,6 @@ WebInspector.StoragePanel.prototype = {
this._databases = [];
- this._unregisterStorageEventListener();
-
if (this._domStorage) {
var domStorageLength = this._domStorage.length;
for (var i = 0; i < domStorageLength; ++i) {
@@ -174,16 +171,12 @@ WebInspector.StoragePanel.prototype = {
}
},
- selectDOMStorage: function(s)
+ selectDOMStorage: function(storageId)
{
- var isLocalStorage = (s === InspectorController.inspectedWindow().localStorage);
- for (var i = 0, len = this._domStorage.length; i < len; ++i) {
- var storage = this._domStorage[i];
- if ( isLocalStorage === storage.isLocalStorage ) {
- this.showDOMStorage(storage);
- storage._domStorageTreeElement.select();
- return;
- }
+ var domStorage = this._domStorageForId(storageId);
+ if (domStorage) {
+ this.showDOMStorage(domStorage);
+ domStorage._domStorageTreeElement.select();
}
},
@@ -383,61 +376,6 @@ WebInspector.StoragePanel.prototype = {
return dataGrid;
},
- dataGridForDOMStorage: function(domStorage)
- {
- if (!domStorage.length)
- return null;
-
- var columns = {};
- columns[0] = {};
- columns[1] = {};
- columns[0].title = WebInspector.UIString("Key");
- columns[0].width = columns[0].title.length;
- columns[1].title = WebInspector.UIString("Value");
- columns[1].width = columns[1].title.length;
-
- var nodes = [];
-
- var length = domStorage.length;
- for (var index = 0; index < domStorage.length; index++) {
- var data = {};
-
- var key = String(domStorage.key(index));
- data[0] = key;
- if (key.length > columns[0].width)
- columns[0].width = key.length;
-
- var value = String(domStorage.getItem(key));
- data[1] = value;
- if (value.length > columns[1].width)
- columns[1].width = value.length;
- var node = new WebInspector.DataGridNode(data, false);
- node.selectable = true;
- nodes.push(node);
- }
-
- var totalColumnWidths = columns[0].width + columns[1].width;
- var width = Math.round((columns[0].width * 100) / totalColumnWidths);
- const minimumPrecent = 10;
- if (width < minimumPrecent)
- width = minimumPrecent;
- if (width > 100 - minimumPrecent)
- width = 100 - minimumPrecent;
- columns[0].width = width;
- columns[1].width = 100 - width;
- columns[0].width += "%";
- columns[1].width += "%";
-
- var dataGrid = new WebInspector.DOMStorageDataGrid(columns);
- var length = nodes.length;
- for (var i = 0; i < length; ++i)
- dataGrid.appendChild(nodes[i]);
- dataGrid.addCreationNode(false);
- if (length > 0)
- nodes[0].selected = true;
- return dataGrid;
- },
-
resize: function()
{
var visibleView = this.visibleView;
@@ -445,44 +383,28 @@ WebInspector.StoragePanel.prototype = {
visibleView.resize();
},
- _registerStorageEventListener: function()
+ updateDOMStorage: function(storageId)
{
- var inspectedWindow = InspectorController.inspectedWindow();
- if (!inspectedWindow || !inspectedWindow.document)
- return;
-
- this._storageEventListener = InspectorController.wrapCallback(this._storageEvent.bind(this));
- inspectedWindow.addEventListener("storage", this._storageEventListener, true);
- },
-
- _unregisterStorageEventListener: function()
- {
- if (!this._storageEventListener)
- return;
-
- var inspectedWindow = InspectorController.inspectedWindow();
- if (!inspectedWindow || !inspectedWindow.document)
+ var domStorage = this._domStorageForId(storageId);
+ if (!domStorage)
return;
- inspectedWindow.removeEventListener("storage", this._storageEventListener, true);
- delete this._storageEventListener;
+ var view = domStorage._domStorageView;
+ if (this.visibleView && view === this.visibleView)
+ domStorage._domStorageView.update();
},
- _storageEvent: function(event)
+ _domStorageForId: function(storageId)
{
if (!this._domStorage)
- return;
-
- var isLocalStorage = (event.storageArea === InspectorController.inspectedWindow().localStorage);
+ return null;
var domStorageLength = this._domStorage.length;
for (var i = 0; i < domStorageLength; ++i) {
var domStorage = this._domStorage[i];
- if (isLocalStorage === domStorage.isLocalStorage) {
- var view = domStorage._domStorageView;
- if (this.visibleView && view === this.visibleView)
- domStorage._domStorageView.update();
- }
+ if (domStorage.id == storageId)
+ return domStorage;
}
+ return null;
},
_startSidebarDragging: function(event)
diff --git a/WebCore/inspector/front-end/inspector.js b/WebCore/inspector/front-end/inspector.js
index ade1d88..921bb7a 100644
--- a/WebCore/inspector/front-end/inspector.js
+++ b/WebCore/inspector/front-end/inspector.js
@@ -1016,12 +1016,17 @@ WebInspector.addDatabase = function(payload)
WebInspector.addDOMStorage = function(payload)
{
var domStorage = new WebInspector.DOMStorage(
- payload.domStorage,
+ payload.id,
payload.host,
payload.isLocalStorage);
this.panels.storage.addDOMStorage(domStorage);
}
+WebInspector.updateDOMStorage = function(storageId)
+{
+ this.panels.storage.updateDOMStorage(storageId);
+}
+
WebInspector.resourceTrackingWasEnabled = function()
{
this.panels.resources.resourceTrackingWasEnabled();
--
WebKit Debian packaging
More information about the Pkg-webkit-commits
mailing list