summaryrefslogtreecommitdiffstats
path: root/src/3rdparty/webkit/WebCore/inspector/InspectorDOMStorageResource.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/3rdparty/webkit/WebCore/inspector/InspectorDOMStorageResource.cpp')
-rw-r--r--src/3rdparty/webkit/WebCore/inspector/InspectorDOMStorageResource.cpp57
1 files changed, 45 insertions, 12 deletions
diff --git a/src/3rdparty/webkit/WebCore/inspector/InspectorDOMStorageResource.cpp b/src/3rdparty/webkit/WebCore/inspector/InspectorDOMStorageResource.cpp
index 2f4aa53..99a2dba 100644
--- a/src/3rdparty/webkit/WebCore/inspector/InspectorDOMStorageResource.cpp
+++ b/src/3rdparty/webkit/WebCore/inspector/InspectorDOMStorageResource.cpp
@@ -35,21 +35,28 @@
#include "InspectorDOMStorageResource.h"
#include "Document.h"
+#include "DOMWindow.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 +67,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)
+{
+ 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