Title: [109336] trunk/Source/WebCore
Revision
109336
Author
[email protected]
Date
2012-03-01 04:39:49 -0800 (Thu, 01 Mar 2012)

Log Message

DOMWindow shouldn't have any INDEXED_DATABASE ifdefs
https://bugs.webkit.org/show_bug.cgi?id=80013

Reviewed by Kentaro Hara.

Before this patch, DOMWindow still knew about IDB because of the
database factory.  This patch moves the factory to
DOMWindowIndexedDatabase.

* Modules/indexeddb/DOMWindowIndexedDatabase.cpp:
(WebCore::DOMWindowIndexedDatabase::DOMWindowIndexedDatabase):
(WebCore::DOMWindowIndexedDatabase::from):
(WebCore):
(WebCore::DOMWindowIndexedDatabase::disconnectFrame):
(WebCore::DOMWindowIndexedDatabase::webkitIndexedDB):
* Modules/indexeddb/DOMWindowIndexedDatabase.h:
(DOMWindowIndexedDatabase):
* page/DOMWindow.cpp:
(WebCore::DOMWindow::~DOMWindow):
(WebCore::DOMWindow::clear):
(WebCore):
* page/DOMWindow.h:
(DOMWindow):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (109335 => 109336)


--- trunk/Source/WebCore/ChangeLog	2012-03-01 12:37:50 UTC (rev 109335)
+++ trunk/Source/WebCore/ChangeLog	2012-03-01 12:39:49 UTC (rev 109336)
@@ -1,3 +1,29 @@
+2012-03-01  Adam Barth  <[email protected]>
+
+        DOMWindow shouldn't have any INDEXED_DATABASE ifdefs
+        https://bugs.webkit.org/show_bug.cgi?id=80013
+
+        Reviewed by Kentaro Hara.
+
+        Before this patch, DOMWindow still knew about IDB because of the
+        database factory.  This patch moves the factory to
+        DOMWindowIndexedDatabase.
+
+        * Modules/indexeddb/DOMWindowIndexedDatabase.cpp:
+        (WebCore::DOMWindowIndexedDatabase::DOMWindowIndexedDatabase):
+        (WebCore::DOMWindowIndexedDatabase::from):
+        (WebCore):
+        (WebCore::DOMWindowIndexedDatabase::disconnectFrame):
+        (WebCore::DOMWindowIndexedDatabase::webkitIndexedDB):
+        * Modules/indexeddb/DOMWindowIndexedDatabase.h:
+        (DOMWindowIndexedDatabase):
+        * page/DOMWindow.cpp:
+        (WebCore::DOMWindow::~DOMWindow):
+        (WebCore::DOMWindow::clear):
+        (WebCore):
+        * page/DOMWindow.h:
+        (DOMWindow):
+
 2012-03-01  Nikolas Zimmermann  <[email protected]>
 
         SVG <use> element allows invalid contents

Modified: trunk/Source/WebCore/Modules/indexeddb/DOMWindowIndexedDatabase.cpp (109335 => 109336)


--- trunk/Source/WebCore/Modules/indexeddb/DOMWindowIndexedDatabase.cpp	2012-03-01 12:37:50 UTC (rev 109335)
+++ trunk/Source/WebCore/Modules/indexeddb/DOMWindowIndexedDatabase.cpp	2012-03-01 12:39:49 UTC (rev 109336)
@@ -37,7 +37,9 @@
 
 namespace WebCore {
 
-DOMWindowIndexedDatabase::DOMWindowIndexedDatabase()
+DOMWindowIndexedDatabase::DOMWindowIndexedDatabase(DOMWindow* window)
+    : DOMWindowProperty(window->frame())
+    , m_window(window)
 {
 }
 
@@ -45,9 +47,30 @@
 {
 }
 
+DOMWindowIndexedDatabase* DOMWindowIndexedDatabase::from(DOMWindow* window)
+{
+    DEFINE_STATIC_LOCAL(AtomicString, name, ("DOMWindowIndexedDatabase"));
+    DOMWindowIndexedDatabase* supplement = static_cast<DOMWindowIndexedDatabase*>(Supplement<DOMWindow>::from(window, name));
+    if (!supplement) {
+        supplement = new DOMWindowIndexedDatabase(window);
+        provideTo(window, name, adoptPtr(supplement));
+    }
+    return supplement;
+}
+
+void DOMWindowIndexedDatabase::disconnectFrame()
+{
+    m_idbFactory = 0;
+}
+
 IDBFactory* DOMWindowIndexedDatabase::webkitIndexedDB(DOMWindow* window)
 {
-    Document* document = window->document();
+    return from(window)->webkitIndexedDB();
+}
+
+IDBFactory* DOMWindowIndexedDatabase::webkitIndexedDB()
+{
+    Document* document = m_window->document();
     if (!document)
         return 0;
 
@@ -58,9 +81,9 @@
     if (!document->securityOrigin()->canAccessDatabase())
         return 0;
 
-    if (!window->idbFactory() && window->isCurrentlyDisplayedInFrame())
-        window->setIDBFactory(IDBFactory::create(page->group().idbFactory()));
-    return window->idbFactory();
+    if (!m_idbFactory && m_window->isCurrentlyDisplayedInFrame())
+        m_idbFactory = IDBFactory::create(page->group().idbFactory());
+    return m_idbFactory.get();
 }
 
 } // namespace WebCore

Modified: trunk/Source/WebCore/Modules/indexeddb/DOMWindowIndexedDatabase.h (109335 => 109336)


--- trunk/Source/WebCore/Modules/indexeddb/DOMWindowIndexedDatabase.h	2012-03-01 12:37:50 UTC (rev 109335)
+++ trunk/Source/WebCore/Modules/indexeddb/DOMWindowIndexedDatabase.h	2012-03-01 12:39:49 UTC (rev 109336)
@@ -28,18 +28,30 @@
 
 #if ENABLE(INDEXED_DATABASE)
 
+#include "DOMWindowProperty.h"
+#include "Supplementable.h"
+
 namespace WebCore {
 
 class IDBFactory;
 class DOMWindow;
 
-class DOMWindowIndexedDatabase {
+class DOMWindowIndexedDatabase : public DOMWindowProperty, public Supplement<DOMWindow> {
 public:
+    virtual ~DOMWindowIndexedDatabase();
+    static DOMWindowIndexedDatabase* from(DOMWindow*);
+
     static IDBFactory* webkitIndexedDB(DOMWindow*);
 
+    virtual void disconnectFrame() OVERRIDE;
+
 private:
-    DOMWindowIndexedDatabase();
-    ~DOMWindowIndexedDatabase();
+    explicit DOMWindowIndexedDatabase(DOMWindow*);
+
+    IDBFactory* webkitIndexedDB();
+
+    DOMWindow* m_window;
+    RefPtr<IDBFactory> m_idbFactory;
 };
 
 } // namespace WebCore

Modified: trunk/Source/WebCore/page/DOMWindow.cpp (109335 => 109336)


--- trunk/Source/WebCore/page/DOMWindow.cpp	2012-03-01 12:37:50 UTC (rev 109335)
+++ trunk/Source/WebCore/page/DOMWindow.cpp	2012-03-01 12:39:49 UTC (rev 109336)
@@ -420,9 +420,6 @@
 #if ENABLE(NOTIFICATIONS)
     ASSERT(!m_notifications);
 #endif
-#if ENABLE(INDEXED_DATABASE)
-    ASSERT(!m_idbFactory);
-#endif
 #if ENABLE(BLOB)
     ASSERT(!m_domURL);
 #endif
@@ -531,9 +528,6 @@
     // the rest of the DOMWindowProperties.
     resetNotifications();
 #endif
-#if ENABLE(INDEXED_DATABASE)
-    m_idbFactory = 0;
-#endif
 #if ENABLE(BLOB)
     m_domURL = 0;
 #endif
@@ -740,13 +734,6 @@
 }
 #endif
 
-#if ENABLE(INDEXED_DATABASE)
-void DOMWindow::setIDBFactory(PassRefPtr<IDBFactory> idbFactory)
-{
-    m_idbFactory = idbFactory;
-}
-#endif
-
 void DOMWindow::postMessage(PassRefPtr<SerializedScriptValue> message, MessagePort* port, const String& targetOrigin, DOMWindow* source, ExceptionCode& ec)
 {
     MessagePortArray ports;

Modified: trunk/Source/WebCore/page/DOMWindow.h (109335 => 109336)


--- trunk/Source/WebCore/page/DOMWindow.h	2012-03-01 12:37:50 UTC (rev 109335)
+++ trunk/Source/WebCore/page/DOMWindow.h	2012-03-01 12:39:49 UTC (rev 109336)
@@ -30,6 +30,7 @@
 #include "EventTarget.h"
 #include "FrameDestructionObserver.h"
 #include "KURL.h"
+#include "Supplementable.h"
 
 namespace WebCore {
 
@@ -80,7 +81,7 @@
 
     enum SetLocationLocking { LockHistoryBasedOnGestureState, LockHistoryAndBackForwardList };
 
-    class DOMWindow : public RefCounted<DOMWindow>, public EventTarget, public FrameDestructionObserver {
+    class DOMWindow : public RefCounted<DOMWindow>, public EventTarget, public FrameDestructionObserver, public Supplementable<DOMWindow> {
     public:
         static PassRefPtr<DOMWindow> create(Frame* frame) { return adoptRef(new DOMWindow(frame)); }
         virtual ~DOMWindow();
@@ -393,11 +394,6 @@
         // by the document that is currently active in m_frame.
         bool isCurrentlyDisplayedInFrame() const;
 
-#if ENABLE(INDEXED_DATABASE)
-        IDBFactory* idbFactory() { return m_idbFactory.get(); }
-        void setIDBFactory(PassRefPtr<IDBFactory>);
-#endif
-
     private:
         explicit DOMWindow(Frame*);
 
@@ -445,11 +441,6 @@
 
         mutable RefPtr<Storage> m_sessionStorage;
         mutable RefPtr<Storage> m_localStorage;
-
-#if ENABLE(INDEXED_DATABASE)
-        mutable RefPtr<IDBFactory> m_idbFactory;
-#endif
-
         mutable RefPtr<DOMApplicationCache> m_applicationCache;
 
 #if ENABLE(NOTIFICATIONS)
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to