[SCM] WebKit Debian packaging branch, webkit-1.2, updated. upstream/1.1.90-6072-g9a69373

eric at webkit.org eric at webkit.org
Wed Apr 7 23:29:15 UTC 2010


The following commit has been merged in the webkit-1.2 branch:
commit c9430f0cf7269582f84cae24c1eb5d40da6b2be7
Author: eric at webkit.org <eric at webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Tue Nov 10 18:56:36 2009 +0000

    2009-11-10  Yaar Schnitman  <yaar at chromium.org>
    
            Reviewed by Dimitri Glazkov.
    
            Up-streaming Chromium API src files: StorageStreamHandlers...StorageNamespaceProxy
    
            https://bugs.webkit.org/show_bug.cgi?id=31276
    
            * src/SocketStreamHandle.cpp: Added.
            (WebCore::SocketStreamHandleInternal::create):
            (WebCore::SocketStreamHandleInternal::SocketStreamHandleInternal):
            (WebCore::SocketStreamHandleInternal::~SocketStreamHandleInternal):
            (WebCore::SocketStreamHandleInternal::connect):
            (WebCore::SocketStreamHandleInternal::send):
            (WebCore::SocketStreamHandleInternal::close):
            (WebCore::SocketStreamHandleInternal::willOpenStream):
            (WebCore::SocketStreamHandleInternal::didOpenStream):
            (WebCore::SocketStreamHandleInternal::didSendData):
            (WebCore::SocketStreamHandleInternal::didReceiveData):
            (WebCore::SocketStreamHandleInternal::didClose):
            (WebCore::SocketStreamHandleInternal::didFail):
            (WebCore::SocketStreamHandle::SocketStreamHandle):
            (WebCore::SocketStreamHandle::~SocketStreamHandle):
            (WebCore::SocketStreamHandle::platformSend):
            (WebCore::SocketStreamHandle::platformClose):
            (WebCore::SocketStreamHandle::didReceiveAuthenticationChallenge):
            (WebCore::SocketStreamHandle::receivedCredential):
            (WebCore::SocketStreamHandle::receivedRequestToContinueWithoutCredential):
            (WebCore::SocketStreamHandle::receivedCancellation):
            * src/StorageAreaProxy.cpp: Added.
            (WebCore::StorageAreaProxy::StorageAreaProxy):
            (WebCore::StorageAreaProxy::~StorageAreaProxy):
            (WebCore::StorageAreaProxy::length):
            (WebCore::StorageAreaProxy::key):
            (WebCore::StorageAreaProxy::getItem):
            (WebCore::StorageAreaProxy::setItem):
            (WebCore::StorageAreaProxy::removeItem):
            (WebCore::StorageAreaProxy::clear):
            (WebCore::StorageAreaProxy::contains):
            * src/StorageAreaProxy.h: Added.
            * src/StorageEventDispatcherChromium.cpp: Added.
            (WebCore::StorageEventDispatcher::dispatch):
            * src/StorageEventDispatcherImpl.cpp: Added.
            (WebCore::StorageEventDispatcherImpl::StorageEventDispatcherImpl):
            (WebCore::StorageEventDispatcherImpl::dispatchStorageEvent):
            * src/StorageEventDispatcherImpl.h: Added.
            * src/StorageNamespaceProxy.cpp: Added.
            (WebCore::StorageNamespace::localStorageNamespace):
            (WebCore::StorageNamespace::sessionStorageNamespace):
            (WebCore::StorageNamespaceProxy::StorageNamespaceProxy):
            (WebCore::StorageNamespaceProxy::~StorageNamespaceProxy):
            (WebCore::StorageNamespaceProxy::copy):
            (WebCore::StorageNamespaceProxy::storageArea):
            (WebCore::StorageNamespaceProxy::close):
            (WebCore::StorageNamespaceProxy::unlock):
            * src/StorageNamespaceProxy.h: Added.
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@50746 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/WebKit/chromium/ChangeLog b/WebKit/chromium/ChangeLog
index 0b88d29..7843a45 100644
--- a/WebKit/chromium/ChangeLog
+++ b/WebKit/chromium/ChangeLog
@@ -2,6 +2,63 @@
 
         Reviewed by Dimitri Glazkov.
 
+        Up-streaming Chromium API src files: StorageStreamHandlers...StorageNamespaceProxy
+
+        https://bugs.webkit.org/show_bug.cgi?id=31276
+
+        * src/SocketStreamHandle.cpp: Added.
+        (WebCore::SocketStreamHandleInternal::create):
+        (WebCore::SocketStreamHandleInternal::SocketStreamHandleInternal):
+        (WebCore::SocketStreamHandleInternal::~SocketStreamHandleInternal):
+        (WebCore::SocketStreamHandleInternal::connect):
+        (WebCore::SocketStreamHandleInternal::send):
+        (WebCore::SocketStreamHandleInternal::close):
+        (WebCore::SocketStreamHandleInternal::willOpenStream):
+        (WebCore::SocketStreamHandleInternal::didOpenStream):
+        (WebCore::SocketStreamHandleInternal::didSendData):
+        (WebCore::SocketStreamHandleInternal::didReceiveData):
+        (WebCore::SocketStreamHandleInternal::didClose):
+        (WebCore::SocketStreamHandleInternal::didFail):
+        (WebCore::SocketStreamHandle::SocketStreamHandle):
+        (WebCore::SocketStreamHandle::~SocketStreamHandle):
+        (WebCore::SocketStreamHandle::platformSend):
+        (WebCore::SocketStreamHandle::platformClose):
+        (WebCore::SocketStreamHandle::didReceiveAuthenticationChallenge):
+        (WebCore::SocketStreamHandle::receivedCredential):
+        (WebCore::SocketStreamHandle::receivedRequestToContinueWithoutCredential):
+        (WebCore::SocketStreamHandle::receivedCancellation):
+        * src/StorageAreaProxy.cpp: Added.
+        (WebCore::StorageAreaProxy::StorageAreaProxy):
+        (WebCore::StorageAreaProxy::~StorageAreaProxy):
+        (WebCore::StorageAreaProxy::length):
+        (WebCore::StorageAreaProxy::key):
+        (WebCore::StorageAreaProxy::getItem):
+        (WebCore::StorageAreaProxy::setItem):
+        (WebCore::StorageAreaProxy::removeItem):
+        (WebCore::StorageAreaProxy::clear):
+        (WebCore::StorageAreaProxy::contains):
+        * src/StorageAreaProxy.h: Added.
+        * src/StorageEventDispatcherChromium.cpp: Added.
+        (WebCore::StorageEventDispatcher::dispatch):
+        * src/StorageEventDispatcherImpl.cpp: Added.
+        (WebCore::StorageEventDispatcherImpl::StorageEventDispatcherImpl):
+        (WebCore::StorageEventDispatcherImpl::dispatchStorageEvent):
+        * src/StorageEventDispatcherImpl.h: Added.
+        * src/StorageNamespaceProxy.cpp: Added.
+        (WebCore::StorageNamespace::localStorageNamespace):
+        (WebCore::StorageNamespace::sessionStorageNamespace):
+        (WebCore::StorageNamespaceProxy::StorageNamespaceProxy):
+        (WebCore::StorageNamespaceProxy::~StorageNamespaceProxy):
+        (WebCore::StorageNamespaceProxy::copy):
+        (WebCore::StorageNamespaceProxy::storageArea):
+        (WebCore::StorageNamespaceProxy::close):
+        (WebCore::StorageNamespaceProxy::unlock):
+        * src/StorageNamespaceProxy.h: Added.
+
+2009-11-10  Yaar Schnitman  <yaar at chromium.org>
+
+        Reviewed by Dimitri Glazkov.
+
         Up-streaming Chromium API src files: NotificationPresenterImpl...SharedWorkerRepository
 
         https://bugs.webkit.org/show_bug.cgi?id=31276
diff --git a/WebKit/chromium/src/SocketStreamHandle.cpp b/WebKit/chromium/src/SocketStreamHandle.cpp
new file mode 100644
index 0000000..356733c
--- /dev/null
+++ b/WebKit/chromium/src/SocketStreamHandle.cpp
@@ -0,0 +1,256 @@
+/*
+ * Copyright (C) 2009 Google Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ *     * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "SocketStreamHandle.h"
+
+#if ENABLE(WEB_SOCKETS)
+
+#include "Logging.h"
+#include "NotImplemented.h"
+#include "SocketStreamHandleClient.h"
+#include "WebData.h"
+#include "WebKit.h"
+#include "WebKitClient.h"
+#include "WebSocketStreamHandle.h"
+#include "WebSocketStreamHandleClient.h"
+#include "WebURL.h"
+#include <wtf/PassOwnPtr.h>
+
+using namespace WebKit;
+
+namespace WebCore {
+
+class SocketStreamHandleInternal : public WebSocketStreamHandleClient {
+public:
+    static PassOwnPtr<SocketStreamHandleInternal> create(SocketStreamHandle* handle)
+    {
+        return new SocketStreamHandleInternal(handle);
+    }
+    virtual ~SocketStreamHandleInternal();
+
+    void connect(const KURL&);
+    int send(const char*, int);
+    void close();
+
+    virtual void willOpenStream(WebSocketStreamHandle*, const WebURL&);
+
+    virtual void didOpenStream(WebSocketStreamHandle*, int);
+    virtual void didSendData(WebSocketStreamHandle*, int);
+    virtual void didReceiveData(WebSocketStreamHandle*, const WebData&);
+    virtual void didClose(WebSocketStreamHandle*);
+    virtual void didFail(WebSocketStreamHandle*, const WebSocketStreamError&);
+
+private:
+    explicit SocketStreamHandleInternal(SocketStreamHandle*);
+
+    SocketStreamHandle* m_handle;
+    OwnPtr<WebSocketStreamHandle> m_socket;
+    int m_maxPendingSendAllowed;
+    int m_pendingAmountSent;
+};
+
+SocketStreamHandleInternal::SocketStreamHandleInternal(SocketStreamHandle* handle)
+    : m_handle(handle)
+    , m_maxPendingSendAllowed(0)
+    , m_pendingAmountSent(0)
+{
+}
+
+SocketStreamHandleInternal::~SocketStreamHandleInternal()
+{
+    m_handle = 0;
+}
+
+void SocketStreamHandleInternal::connect(const KURL& url)
+{
+    m_socket.set(webKitClient()->createSocketStreamHandle());
+    LOG(Network, "connect");
+    ASSERT(m_socket.get());
+    m_socket->connect(url, this);
+}
+
+int SocketStreamHandleInternal::send(const char* data, int len)
+{
+    LOG(Network, "send len=%d", len);
+    ASSERT(m_socket.get());
+    if (m_pendingAmountSent + len >= m_maxPendingSendAllowed)
+        len = m_maxPendingSendAllowed - m_pendingAmountSent - 1;
+
+    if (len <= 0)
+        return len;
+    WebData webdata(data, len);
+    if (m_socket->send(webdata)) {
+        m_pendingAmountSent += len;
+        LOG(Network, "sent");
+        if (m_handle && m_handle->m_client)
+            m_handle->m_client->willSendData(m_handle, webdata.data(), webdata.size());
+        return len;
+    }
+    LOG(Network, "busy. buffering");
+    return 0;
+}
+
+void SocketStreamHandleInternal::close()
+{
+    LOG(Network, "close");
+    m_socket->close();
+}
+
+void SocketStreamHandleInternal::willOpenStream(WebSocketStreamHandle* socketHandle, const WebURL& url)
+{
+    LOG(Network, "willOpenStream");
+    if (m_handle && m_socket.get()) {
+        ASSERT(socketHandle == m_socket.get());
+        if (m_handle->m_client)
+            m_handle->m_client->willOpenStream(m_handle, url);
+    }
+}
+
+void SocketStreamHandleInternal::didOpenStream(WebSocketStreamHandle* socketHandle, int maxPendingSendAllowed)
+{
+    LOG(Network, "SocketStreamHandleInternal::didOpen %d",
+        maxPendingSendAllowed);
+    ASSERT(maxPendingSendAllowed > 0);
+    if (m_handle && m_socket.get()) {
+        ASSERT(socketHandle == m_socket.get());
+        m_maxPendingSendAllowed = maxPendingSendAllowed;
+        m_handle->m_state = SocketStreamHandleBase::Open;
+        if (m_handle->m_client) {
+            m_handle->m_client->didOpen(m_handle);
+            return;
+        }
+    }
+    LOG(Network, "no m_handle or m_socket?");
+}
+
+void SocketStreamHandleInternal::didSendData(WebSocketStreamHandle* socketHandle, int amountSent)
+{
+    LOG(Network, "SocketStreamHandleInternal::didSendData %d", amountSent);
+    ASSERT(amountSent > 0);
+    if (m_handle && m_socket.get()) {
+        ASSERT(socketHandle == m_socket.get());
+        m_pendingAmountSent -= amountSent;
+        ASSERT(m_pendingAmountSent >= 0);
+        m_handle->sendPendingData();
+    }
+}
+
+void SocketStreamHandleInternal::didReceiveData(WebSocketStreamHandle* socketHandle, const WebData& data)
+{
+    LOG(Network, "didReceiveData");
+    if (m_handle && m_socket.get()) {
+        ASSERT(socketHandle == m_socket.get());
+        if (m_handle->m_client)
+            m_handle->m_client->didReceiveData(m_handle, data.data(), data.size());
+    }
+}
+
+void SocketStreamHandleInternal::didClose(WebSocketStreamHandle* socketHandle)
+{
+    LOG(Network, "didClose");
+    if (m_handle && m_socket.get()) {
+        ASSERT(socketHandle == m_socket.get());
+        m_socket.clear();
+        SocketStreamHandle* h = m_handle;
+        m_handle = 0;
+        if (h->m_client)
+            h->m_client->didClose(h);
+    }
+}
+
+void SocketStreamHandleInternal::didFail(WebSocketStreamHandle* socketHandle, const WebSocketStreamError& err)
+{
+    LOG(Network, "didFail");
+    if (m_handle && m_socket.get()) {
+        ASSERT(socketHandle == m_socket.get());
+        m_socket.clear();
+        SocketStreamHandle* h = m_handle;
+        m_handle = 0;
+        if (h->m_client)
+            h->m_client->didClose(h);  // didFail(h, err);
+    }
+}
+
+// FIXME: auth
+
+// SocketStreamHandle ----------------------------------------------------------
+
+SocketStreamHandle::SocketStreamHandle(const KURL& url, SocketStreamHandleClient* client)
+    : SocketStreamHandleBase(url, client)
+{
+    m_internal = SocketStreamHandleInternal::create(this);
+    m_internal->connect(m_url);
+}
+
+SocketStreamHandle::~SocketStreamHandle()
+{
+    setClient(0);
+    m_internal.clear();
+}
+
+int SocketStreamHandle::platformSend(const char* buf, int len)
+{
+    if (!m_internal.get())
+        return 0;
+    return m_internal->send(buf, len);
+}
+
+void SocketStreamHandle::platformClose()
+{
+    if (m_internal.get())
+        m_internal->close();
+}
+
+void SocketStreamHandle::didReceiveAuthenticationChallenge(const AuthenticationChallenge& challenge)
+{
+    if (m_client)
+        m_client->didReceiveAuthenticationChallenge(this, challenge);
+}
+
+void SocketStreamHandle::receivedCredential(const AuthenticationChallenge& challenge, const Credential& credential)
+{
+    notImplemented();
+}
+
+void SocketStreamHandle::receivedRequestToContinueWithoutCredential(const AuthenticationChallenge& challenge)
+{
+    notImplemented();
+}
+
+void SocketStreamHandle::receivedCancellation(const AuthenticationChallenge& challenge)
+{
+    if (m_client)
+        m_client->receivedCancellation(this, challenge);
+}
+
+}  // namespace WebCore
+
+#endif  // ENABLE(WEB_SOCKETS)
diff --git a/WebKit/chromium/src/StorageAreaProxy.cpp b/WebKit/chromium/src/StorageAreaProxy.cpp
new file mode 100644
index 0000000..551507f
--- /dev/null
+++ b/WebKit/chromium/src/StorageAreaProxy.cpp
@@ -0,0 +1,91 @@
+/*
+ * Copyright (C) 2009 Google Inc. All Rights Reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY GOOGLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL GOOGLE INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "StorageAreaProxy.h"
+
+#if ENABLE(DOM_STORAGE)
+
+#include "Document.h"
+#include "ExceptionCode.h"
+#include "Frame.h"
+#include "SecurityOrigin.h"
+#include "StorageAreaImpl.h"
+
+#include "WebStorageArea.h"
+#include "WebString.h"
+#include "WebURL.h"
+
+namespace WebCore {
+
+StorageAreaProxy::StorageAreaProxy(WebKit::WebStorageArea* storageArea)
+    : m_storageArea(storageArea)
+{
+}
+
+StorageAreaProxy::~StorageAreaProxy()
+{
+}
+
+unsigned StorageAreaProxy::length() const
+{
+    return m_storageArea->length();
+}
+
+String StorageAreaProxy::key(unsigned index) const
+{
+    return m_storageArea->key(index);
+}
+
+String StorageAreaProxy::getItem(const String& key) const
+{
+    return m_storageArea->getItem(key);
+}
+
+void StorageAreaProxy::setItem(const String& key, const String& value, ExceptionCode& ec, Frame* frame)
+{
+    bool quotaException = false;
+    m_storageArea->setItem(key, value, frame->document()->url(), quotaException);
+    ec = quotaException ? QUOTA_EXCEEDED_ERR : 0;
+}
+
+void StorageAreaProxy::removeItem(const String& key, Frame* frame)
+{
+    m_storageArea->removeItem(key, frame->document()->url());
+}
+
+void StorageAreaProxy::clear(Frame* frame)
+{
+    m_storageArea->clear(frame->document()->url());
+}
+
+bool StorageAreaProxy::contains(const String& key) const
+{
+    return !getItem(key).isNull();
+}
+
+} // namespace WebCore
+
+#endif // ENABLE(DOM_STORAGE)
diff --git a/WebKit/chromium/src/StorageAreaProxy.h b/WebKit/chromium/src/StorageAreaProxy.h
new file mode 100644
index 0000000..5d09d82
--- /dev/null
+++ b/WebKit/chromium/src/StorageAreaProxy.h
@@ -0,0 +1,59 @@
+/*
+ * Copyright (C) 2009 Google Inc. All Rights Reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY GOOGLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL GOOGLE INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef StorageAreaProxy_h
+#define StorageAreaProxy_h
+
+#if ENABLE(DOM_STORAGE)
+
+#include "StorageArea.h"
+
+namespace WebKit { class WebStorageArea; }
+
+namespace WebCore {
+
+class StorageAreaProxy : public StorageArea {
+public:
+    StorageAreaProxy(WebKit::WebStorageArea* storageArea);
+    virtual ~StorageAreaProxy();
+
+    // The HTML5 DOM Storage API
+    virtual unsigned length() const;
+    virtual String key(unsigned index) const;
+    virtual String getItem(const String& key) const;
+    virtual void setItem(const String& key, const String& value, ExceptionCode& ec, Frame* sourceFrame);
+    virtual void removeItem(const String& key, Frame* sourceFrame);
+    virtual void clear(Frame* sourceFrame);
+    virtual bool contains(const String& key) const;
+
+private:
+    OwnPtr<WebKit::WebStorageArea> m_storageArea;
+};
+
+} // namespace WebCore
+
+#endif // ENABLE(DOM_STORAGE)
+
+#endif // StorageAreaProxy_h
diff --git a/WebKit/chromium/src/StorageEventDispatcherChromium.cpp b/WebKit/chromium/src/StorageEventDispatcherChromium.cpp
new file mode 100644
index 0000000..3286929
--- /dev/null
+++ b/WebKit/chromium/src/StorageEventDispatcherChromium.cpp
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2009 Google Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ *     * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "StorageEventDispatcher.h"
+
+#if ENABLE(DOM_STORAGE)
+
+#include "SecurityOrigin.h"
+#include "StorageArea.h"
+
+#include "WebKit.h"
+#include "WebKitClient.h"
+#include "WebString.h"
+#include "WebURL.h"
+
+namespace WebCore {
+
+void StorageEventDispatcher::dispatch(const String& key, const String& oldValue,
+                                      const String& newValue, StorageType storageType,
+                                      SecurityOrigin* origin, Frame* sourceFrame)
+{
+    ASSERT(!sourceFrame);  // Sad, but true.
+    WebKit::webKitClient()->dispatchStorageEvent(key, oldValue, newValue, origin->toString(), WebKit::WebURL(), storageType == LocalStorage);
+}
+
+} // namespace WebCore
+
+#endif // ENABLE(DOM_STORAGE)
diff --git a/WebKit/chromium/src/StorageEventDispatcherImpl.cpp b/WebKit/chromium/src/StorageEventDispatcherImpl.cpp
new file mode 100644
index 0000000..3518796
--- /dev/null
+++ b/WebKit/chromium/src/StorageEventDispatcherImpl.cpp
@@ -0,0 +1,83 @@
+/*
+ * Copyright (C) 2009 Google Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ *     * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "StorageEventDispatcherImpl.h"
+
+#if ENABLE(DOM_STORAGE)
+
+#include "DOMWindow.h"
+#include "EventNames.h"
+#include "Frame.h"
+#include "KURL.h"
+#include "Page.h"
+#include "PageGroup.h"
+#include "SecurityOrigin.h"
+#include "StorageEvent.h"
+
+namespace WebCore {
+
+StorageEventDispatcherImpl::StorageEventDispatcherImpl(const String& groupName)
+    : m_pageGroup(PageGroup::pageGroup(groupName))
+{
+    ASSERT(m_pageGroup);
+}
+
+void StorageEventDispatcherImpl::dispatchStorageEvent(const String& key, const String& oldValue,
+                                                      const String& newValue, SecurityOrigin* securityOrigin,
+                                                      const KURL& url, StorageType storageType)
+{
+    // FIXME: Implement
+    if (storageType == SessionStorage)
+        return;
+
+    // We need to copy all relevant frames from every page to a vector since sending the event to one frame might mutate the frame tree
+    // of any given page in the group or mutate the page group itself.
+    Vector<RefPtr<Frame> > frames;
+
+    const HashSet<Page*>& pages = m_pageGroup->pages();
+    HashSet<Page*>::const_iterator end = pages.end();
+    for (HashSet<Page*>::const_iterator it = pages.begin(); it != end; ++it) {
+        for (Frame* frame = (*it)->mainFrame(); frame; frame = frame->tree()->traverseNext()) {
+            if (frame->document()->securityOrigin()->equal(securityOrigin))
+                frames.append(frame);
+        }
+    }
+
+    // FIXME: Figure out how to pass in the document URI.
+    for (unsigned i = 0; i < frames.size(); ++i) {
+        frames[i]->document()->dispatchWindowEvent(StorageEvent::create(eventNames().storageEvent, key, oldValue, newValue,
+                                                                        url, frames[i]->domWindow()->localStorage()));
+    }
+}
+
+} // namespace WebCore
+
+#endif // ENABLE(DOM_STORAGE)
diff --git a/WebKit/chromium/src/StorageEventDispatcherImpl.h b/WebKit/chromium/src/StorageEventDispatcherImpl.h
new file mode 100644
index 0000000..4c2db7c
--- /dev/null
+++ b/WebKit/chromium/src/StorageEventDispatcherImpl.h
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2009 Google Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ *     * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef StorageEventDispatcherImpl_h
+#define StorageEventDispatcherImpl_h
+
+#if ENABLE(DOM_STORAGE)
+
+#include "PlatformString.h"
+#include "StorageArea.h"
+
+namespace WebCore {
+
+class KURL;
+class PageGroup;
+class SecurityOrigin;
+
+class StorageEventDispatcherImpl {
+public:
+    StorageEventDispatcherImpl(const String& groupName);
+
+    void dispatchStorageEvent(const String& key, const String& oldValue,
+                              const String& newValue, SecurityOrigin*,
+                              const KURL&, StorageType);
+
+private:
+    PageGroup* m_pageGroup;
+};
+
+} // namespace WebCore
+
+#endif // ENABLE(DOM_STORAGE)
+
+#endif // StorageEventDispatcherImpl_h
diff --git a/WebKit/chromium/src/StorageNamespaceProxy.cpp b/WebKit/chromium/src/StorageNamespaceProxy.cpp
new file mode 100644
index 0000000..e22bbef
--- /dev/null
+++ b/WebKit/chromium/src/StorageNamespaceProxy.cpp
@@ -0,0 +1,81 @@
+/*
+ * Copyright (C) 2009 Google Inc. All Rights Reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY GOOGLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL GOOGLE INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "StorageNamespaceProxy.h"
+
+#if ENABLE(DOM_STORAGE)
+
+#include "SecurityOrigin.h"
+#include "StorageAreaProxy.h"
+#include "WebKit.h"
+#include "WebKitClient.h"
+#include "WebStorageNamespace.h"
+#include "WebString.h"
+
+namespace WebCore {
+
+PassRefPtr<StorageNamespace> StorageNamespace::localStorageNamespace(const String& path, unsigned quota)
+{
+    return new StorageNamespaceProxy(WebKit::webKitClient()->createLocalStorageNamespace(path, quota));
+}
+
+PassRefPtr<StorageNamespace> StorageNamespace::sessionStorageNamespace()
+{
+    return new StorageNamespaceProxy(WebKit::webKitClient()->createSessionStorageNamespace());
+}
+
+StorageNamespaceProxy::StorageNamespaceProxy(WebKit::WebStorageNamespace* storageNamespace)
+    : m_storageNamespace(storageNamespace)
+{
+}
+
+StorageNamespaceProxy::~StorageNamespaceProxy()
+{
+}
+
+PassRefPtr<StorageNamespace> StorageNamespaceProxy::copy()
+{
+    return adoptRef(new StorageNamespaceProxy(m_storageNamespace->copy()));
+}
+
+PassRefPtr<StorageArea> StorageNamespaceProxy::storageArea(PassRefPtr<SecurityOrigin> origin)
+{
+    return adoptRef(new StorageAreaProxy(m_storageNamespace->createStorageArea(origin->toString())));
+}
+
+void StorageNamespaceProxy::close()
+{
+    m_storageNamespace->close();
+}
+
+void StorageNamespaceProxy::unlock()
+{
+    // FIXME: Implement.
+}
+
+} // namespace WebCore
+
+#endif // ENABLE(DOM_STORAGE)
diff --git a/WebKit/chromium/src/StorageNamespaceProxy.h b/WebKit/chromium/src/StorageNamespaceProxy.h
new file mode 100644
index 0000000..9ff624b
--- /dev/null
+++ b/WebKit/chromium/src/StorageNamespaceProxy.h
@@ -0,0 +1,54 @@
+/*
+ * Copyright (C) 2009 Google Inc. All Rights Reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY GOOGLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL GOOGLE INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef StorageNamespaceProxy_h
+#define StorageNamespaceProxy_h
+
+#if ENABLE(DOM_STORAGE)
+
+#include "StorageNamespace.h"
+
+namespace WebKit { class WebStorageNamespace; }
+
+namespace WebCore {
+
+class StorageNamespaceProxy : public StorageNamespace {
+public:
+    StorageNamespaceProxy(WebKit::WebStorageNamespace* storageNamespace);
+    virtual ~StorageNamespaceProxy();
+    virtual PassRefPtr<StorageArea> storageArea(PassRefPtr<SecurityOrigin>);
+    virtual PassRefPtr<StorageNamespace> copy();
+    virtual void close();
+    virtual void unlock();
+
+private:
+    OwnPtr<WebKit::WebStorageNamespace> m_storageNamespace;
+};
+
+} // namespace WebCore
+
+#endif // ENABLE(DOM_STORAGE)
+
+#endif // StorageNamespaceProxy_h

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list