Changeset 56777 in webkit


Ignore:
Timestamp:
Mar 30, 2010 4:58:06 AM (14 years ago)
Author:
jorlow@chromium.org
Message:

2010-03-29 Jeremy Orlow <jorlow@chromium.org>

Reviewed by Darin Fisher.

More IndexedDB work
https://bugs.webkit.org/show_bug.cgi?id=36770

Add the "singleton" IndexedDatabase object to PageGroup
IndexedDatabase now has a create() method since PageGroup can own the instance (at least for now)
Rip out the IDBRequest stuff (now obsolete).
DOMWindow now can instantiate indexedDatabase objects on demand.

New layout tests starting with the next patch (which should make indexedDB.open() "work").

  • WebCore.gypi:
  • bindings/v8/custom/V8IDBRequestCustom.cpp: Removed.
  • page/DOMWindow.cpp: (WebCore::DOMWindow::indexedDB):
  • page/DOMWindow.h:
  • page/PageGroup.cpp: (WebCore::PageGroup::indexedDatabase):
  • page/PageGroup.h:
  • storage/IDBDatabase.cpp:
  • storage/IDBDatabaseRequest.h: (WebCore::IDBDatabaseRequest::createObjectStore):
  • storage/IDBDatabaseRequest.idl:
  • storage/IDBRequest.cpp: Removed.
  • storage/IDBRequest.h: Removed.
  • storage/IDBRequest.idl: Removed.
  • storage/IndexedDatabase.cpp: (WebCore::IndexedDatabase::create):
  • storage/IndexedDatabase.h:
  • storage/IndexedDatabaseImpl.cpp: (WebCore::IndexedDatabaseImpl::create): (WebCore::IndexedDatabaseImpl::IndexedDatabaseImpl): (WebCore::IndexedDatabaseImpl::~IndexedDatabaseImpl):
  • storage/IndexedDatabaseImpl.h:
  • storage/IndexedDatabaseRequest.cpp: (WebCore::IndexedDatabaseRequest::IndexedDatabaseRequest):
  • storage/IndexedDatabaseRequest.h: (WebCore::IndexedDatabaseRequest::create):
  • storage/IndexedDatabaseRequest.idl:
  • storage/chromium/IndexedDatabase.cpp: (WebCore::IndexedDatabase::create):

2010-03-29 Jeremy Orlow <jorlow@chromium.org>

Reviewed by Darin Fisher.

More IndexedDB work
https://bugs.webkit.org/show_bug.cgi?id=36770

Start the implementation of WebIndexedDatabase (for entrance back into WebKit).

  • WebKit.gyp:
  • public/WebIndexedDatabase.h:
  • src/WebIndexedDatabaseImpl.cpp: Added. (WebKit::WebIndexedDatabase::create): (WebKit::WebIndexedDatabaseImpl::~WebIndexedDatabaseImpl): (WebKit::WebIndexedDatabaseImpl::open):
  • src/WebIndexedDatabaseImpl.h: Added.
Location:
trunk
Files:
3 deleted
20 edited
1 copied
1 moved

Legend:

Unmodified
Added
Removed
  • trunk/WebCore/ChangeLog

    r56776 r56777  
     12010-03-29  Jeremy Orlow  <jorlow@chromium.org>
     2
     3        Reviewed by Darin Fisher.
     4
     5        More IndexedDB work
     6        https://bugs.webkit.org/show_bug.cgi?id=36770
     7
     8        Add the "singleton" IndexedDatabase object to PageGroup
     9        IndexedDatabase now has a create() method since PageGroup can own the instance (at least for now)
     10        Rip out the IDBRequest stuff (now obsolete).
     11        DOMWindow now can instantiate indexedDatabase objects on demand.
     12
     13        New layout tests starting with the next patch (which should make indexedDB.open() "work").
     14
     15        * WebCore.gypi:
     16        * bindings/v8/custom/V8IDBRequestCustom.cpp: Removed.
     17        * page/DOMWindow.cpp:
     18        (WebCore::DOMWindow::indexedDB):
     19        * page/DOMWindow.h:
     20        * page/PageGroup.cpp:
     21        (WebCore::PageGroup::indexedDatabase):
     22        * page/PageGroup.h:
     23        * storage/IDBDatabase.cpp:
     24        * storage/IDBDatabaseRequest.h:
     25        (WebCore::IDBDatabaseRequest::createObjectStore):
     26        * storage/IDBDatabaseRequest.idl:
     27        * storage/IDBRequest.cpp: Removed.
     28        * storage/IDBRequest.h: Removed.
     29        * storage/IDBRequest.idl: Removed.
     30        * storage/IndexedDatabase.cpp:
     31        (WebCore::IndexedDatabase::create):
     32        * storage/IndexedDatabase.h:
     33        * storage/IndexedDatabaseImpl.cpp:
     34        (WebCore::IndexedDatabaseImpl::create):
     35        (WebCore::IndexedDatabaseImpl::IndexedDatabaseImpl):
     36        (WebCore::IndexedDatabaseImpl::~IndexedDatabaseImpl):
     37        * storage/IndexedDatabaseImpl.h:
     38        * storage/IndexedDatabaseRequest.cpp:
     39        (WebCore::IndexedDatabaseRequest::IndexedDatabaseRequest):
     40        * storage/IndexedDatabaseRequest.h:
     41        (WebCore::IndexedDatabaseRequest::create):
     42        * storage/IndexedDatabaseRequest.idl:
     43        * storage/chromium/IndexedDatabase.cpp:
     44        (WebCore::IndexedDatabase::create):
     45
    1462010-03-30  Dirk Schulze  <krit@webkit.org>
    247
  • trunk/WebCore/WebCore.gypi

    r56713 r56777  
    219219            'storage/IDBDatabaseException.idl',
    220220            'storage/IDBDatabaseRequest.idl',
    221             'storage/IDBRequest.idl',
    222221            'storage/IndexedDatabaseRequest.idl',
    223222            'storage/SQLError.idl',
     
    753752            'bindings/v8/custom/V8HTMLSelectElementCustom.cpp',
    754753            'bindings/v8/custom/V8HTMLSelectElementCustom.h',
    755             'bindings/v8/custom/V8IDBRequestCustom.cpp',
    756754            'bindings/v8/custom/V8IndexedDatabaseRequestCustom.cpp',
    757755            'bindings/v8/custom/V8InjectedScriptHostCustom.cpp',
     
    32743272            'storage/IDBDatabaseException.h',
    32753273            'storage/IDBDatabaseRequest.h',
    3276             'storage/IDBRequest.cpp',
    3277             'storage/IDBRequest.h',
    32783274            'storage/IndexedDatabase.cpp',
    32793275            'storage/IndexedDatabase.h',
  • trunk/WebCore/page/DOMWindow.cpp

    r56608 r56777  
    5555#include "HTMLFrameOwnerElement.h"
    5656#include "History.h"
     57#include "IndexedDatabase.h"
     58#include "IndexedDatabaseRequest.h"
    5759#include "InspectorController.h"
    5860#include "InspectorTimelineAgent.h"
     
    469471    m_notifications = 0;
    470472#endif
     473
     474#if ENABLE(INDEXED_DATABASE)
     475    if (m_indexedDatabaseRequest)
     476        m_indexedDatabaseRequest->disconnectFrame();
     477    m_indexedDatabaseRequest = 0;
     478#endif
    471479}
    472480
     
    646654IndexedDatabaseRequest* DOMWindow::indexedDB() const
    647655{
    648     return 0;
     656    if (m_indexedDatabaseRequest)
     657        return m_indexedDatabaseRequest.get();
     658
     659    Document* document = this->document();
     660    if (!document)
     661        return 0;
     662
     663    // FIXME: See if access is allowed.
     664
     665    Page* page = document->page();
     666    if (!page)
     667        return 0;
     668
     669    // FIXME: See if indexedDatabase access is allowed.
     670
     671    m_indexedDatabaseRequest = IndexedDatabaseRequest::create(page->group().indexedDatabase(), m_frame);
     672    return m_indexedDatabaseRequest.get();
    649673}
    650674#endif
  • trunk/WebCore/page/DOMWindow.h

    r56002 r56777  
    402402        mutable RefPtr<NotificationCenter> m_notifications;
    403403#endif
     404#if ENABLE(INDEXED_DATABASE)
     405        mutable RefPtr<IndexedDatabaseRequest> m_indexedDatabaseRequest;
     406#endif
    404407
    405408        EventTargetData m_eventTargetData;
  • trunk/WebCore/page/PageGroup.cpp

    r54316 r56777  
    3131#include "Document.h"
    3232#include "Frame.h"
     33#include "IndexedDatabase.h"
    3334#include "Page.h"
    3435#include "Settings.h"
    35 
    36 #if ENABLE(DOM_STORAGE)
    3736#include "StorageNamespace.h"
    38 #endif
    3937
    4038#if PLATFORM(CHROMIUM)
     
    192190    if (!m_localStorage) {
    193191        // Need a page in this page group to query the settings for the local storage database path.
     192        // Having these parameters attached to the page settings is unfortunate since these settings are
     193        // not per-page (and, in fact, we simply grab the settings from some page at random), but
     194        // at this point we're stuck with it.
    194195        Page* page = *m_pages.begin();
    195196        const String& path = page->settings()->localStorageDatabasePath();
     
    199200
    200201    return m_localStorage.get();
     202}
     203#endif
     204
     205#if ENABLE(INDEXED_DATABASE)
     206IndexedDatabase* PageGroup::indexedDatabase()
     207{
     208    // Do not add page setting based access control here since this object is shared by all pages in
     209    // the group and having per-page controls is misleading.
     210    if (!m_indexedDatabase)
     211        m_indexedDatabase = IndexedDatabase::create();
     212    return m_indexedDatabase.get();
    201213}
    202214#endif
  • trunk/WebCore/page/PageGroup.h

    r50907 r56777  
    3737
    3838    class KURL;
     39    class IndexedDatabase;
    3940    class Page;
    4041    class StorageNamespace;
     
    7071        bool hasLocalStorage() { return m_localStorage; }
    7172#endif
     73#if ENABLE(DOM_STORAGE)
     74        IndexedDatabase* indexedDatabase();
     75#endif
    7276
    7377        void addUserScriptToWorld(DOMWrapperWorld*, const String& source, const KURL&,
     
    102106        RefPtr<StorageNamespace> m_localStorage;
    103107#endif
     108#if ENABLE(INDEXED_DATABASE)
     109        RefPtr<IndexedDatabase> m_indexedDatabase;
     110#endif
    104111
    105112        OwnPtr<UserScriptMap> m_userScripts;
  • trunk/WebCore/storage/IDBDatabase.cpp

    r56713 r56777  
     1/*
     2 * Copyright (C) 2010 Google Inc. All rights reserved.
     3 *
     4 * Redistribution and use in source and binary forms, with or without
     5 * modification, are permitted provided that the following conditions
     6 * are met:
     7 *
     8 * 1.  Redistributions of source code must retain the above copyright
     9 *     notice, this list of conditions and the following disclaimer.
     10 * 2.  Redistributions in binary form must reproduce the above copyright
     11 *     notice, this list of conditions and the following disclaimer in the
     12 *     documentation and/or other materials provided with the distribution.
     13 * 3.  Neither the name of Apple Computer, Inc. ("Apple") nor the names of
     14 *     its contributors may be used to endorse or promote products derived
     15 *     from this software without specific prior written permission.
     16 *
     17 * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
     18 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
     19 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
     20 * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
     21 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
     22 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
     23 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
     24 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
     26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     27 */
     28#include "config.h"
     29#include "IDBDatabase.h"
     30
     31#if ENABLE(INDEXED_DATABASE)
     32
     33namespace WebCore {
     34
     35// FIXME: Write.
     36
     37} // namespace WebCore
     38
     39#endif // ENABLE(INDEXED_DATABASE)
     40
  • trunk/WebCore/storage/IDBDatabaseRequest.h

    r55779 r56777  
    4141    // FIXME: Write.
    4242    IDBRequest* request() const { return 0; }
     43    void createObjectStore(const String& name, const String& keyPath, bool autoIncrement) { }
    4344};
    4445
  • trunk/WebCore/storage/IDBDatabaseRequest.idl

    r55779 r56777  
    3131        Conditional=INDEXED_DATABASE
    3232    ] IDBDatabaseRequest {
    33         readonly attribute IDBRequest request;
    34         // FIXME: Write.
     33        // FIXME: Boolean should be optional and keyPath should take nulls.
     34        void createObjectStore(in DOMString name, in DOMString keyPath, in boolean autoIncrement);
     35
     36        // FIXME: Finish.
    3537    };
    3638
  • trunk/WebCore/storage/IndexedDatabase.cpp

    r55784 r56777  
    3939namespace WebCore {
    4040
    41 PassRefPtr<IndexedDatabase> IndexedDatabase::get()
     41PassRefPtr<IndexedDatabase> IndexedDatabase::create()
    4242{
    43     return IndexedDatabaseImpl::get();
     43    return IndexedDatabaseImpl::create();
    4444}
    4545
  • trunk/WebCore/storage/IndexedDatabase.h

    r56713 r56777  
    4848class IndexedDatabase : public ThreadSafeShared<IndexedDatabase> {
    4949public:
    50     static PassRefPtr<IndexedDatabase> get();
     50    static PassRefPtr<IndexedDatabase> create();
    5151    virtual ~IndexedDatabase() { }
    5252
  • trunk/WebCore/storage/IndexedDatabaseImpl.cpp

    r56713 r56777  
    3737namespace WebCore {
    3838
    39 IndexedDatabaseImpl* IndexedDatabaseImpl::indexedDatabaseImpl = 0;
    40 
    41 PassRefPtr<IndexedDatabaseImpl> IndexedDatabaseImpl::get()
     39PassRefPtr<IndexedDatabaseImpl> IndexedDatabaseImpl::create()
    4240{
    43     if (!indexedDatabaseImpl)
    44         indexedDatabaseImpl = new IndexedDatabaseImpl();
    45     ASSERT(indexedDatabaseImpl);
    46     return indexedDatabaseImpl;
     41    return new IndexedDatabaseImpl();
    4742}
    4843
    4944IndexedDatabaseImpl::IndexedDatabaseImpl()
    5045{
    51     // FIXME: Make this thread safe before implementing a sync interface.
    52     ASSERT(!indexedDatabaseImpl);
    53     indexedDatabaseImpl = this;
    5446}
    5547
    5648IndexedDatabaseImpl::~IndexedDatabaseImpl()
    5749{
    58     // FIXME: Make this thread safe before implementing a sync interface.
    59     ASSERT(indexedDatabaseImpl == this);
    60     indexedDatabaseImpl = 0;
    6150}
    6251
  • trunk/WebCore/storage/IndexedDatabaseImpl.h

    r56713 r56777  
    3737class IndexedDatabaseImpl : public IndexedDatabase {
    3838public:
    39     static PassRefPtr<IndexedDatabaseImpl> get();
     39    static PassRefPtr<IndexedDatabaseImpl> create();
    4040    virtual ~IndexedDatabaseImpl();
    4141
  • trunk/WebCore/storage/IndexedDatabaseRequest.cpp

    r56713 r56777  
    2929#include "IndexedDatabaseRequest.h"
    3030
     31#include "ExceptionCode.h"
     32#include "IndexedDatabase.h"
     33
    3134#if ENABLE(INDEXED_DATABASE)
    32 
    33 #include "ExceptionCode.h"
    34 #include "IDBRequest.h"
    3535
    3636namespace WebCore {
    3737
    38 IndexedDatabaseRequest::IndexedDatabaseRequest()
     38IndexedDatabaseRequest::IndexedDatabaseRequest(IndexedDatabase* indexedDatabase, Frame* frame)
     39    : m_indexedDatabase(indexedDatabase)
     40    , m_frame(frame)
    3941{
    4042}
  • trunk/WebCore/storage/IndexedDatabaseRequest.h

    r54085 r56777  
    3939namespace WebCore {
    4040
    41 class IDBRequest;
     41class IndexedDatabase;
     42class Frame;
    4243
    4344class IndexedDatabaseRequest : public RefCounted<IndexedDatabaseRequest> {
    4445public:
    45     static PassRefPtr<IndexedDatabaseRequest> create()
     46    static PassRefPtr<IndexedDatabaseRequest> create(IndexedDatabase* indexedDatabase, Frame* frame)
    4647    {
    47         return adoptRef(new IndexedDatabaseRequest());
     48        return adoptRef(new IndexedDatabaseRequest(indexedDatabase, frame));
    4849    }
    4950    ~IndexedDatabaseRequest();
    5051
    51     IDBRequest* request() const { return m_request.get(); }
    5252    void open(const String& name, const String& description, bool modifyDatabase, ExceptionCode&);
    5353
     54    void disconnectFrame() { m_frame = 0; }
     55
    5456private:
    55     IndexedDatabaseRequest();
     57    IndexedDatabaseRequest(IndexedDatabase*, Frame*);
    5658
    57     PassRefPtr<IDBRequest> m_request;
     59    PassRefPtr<IndexedDatabase> m_indexedDatabase;
     60    Frame* m_frame;
    5861};
    5962
  • trunk/WebCore/storage/IndexedDatabaseRequest.idl

    r55778 r56777  
    3131        Conditional=INDEXED_DATABASE
    3232    ] IndexedDatabaseRequest {
    33         readonly attribute IDBRequest request;
    3433        [Custom] void open(in DOMString name, in DOMString description, in optional boolean modifyDatabase, IDBDatabaseErrorCallback onerror, IDBDatabaseRequestCallback onsuccess)
    3534            raises(IDBDatabaseException);
  • trunk/WebCore/storage/chromium/IndexedDatabase.cpp

    r55784 r56777  
    3535namespace WebCore {
    3636
    37 PassRefPtr<IndexedDatabase> IndexedDatabase::get()
     37PassRefPtr<IndexedDatabase> IndexedDatabase::create()
    3838{
    3939    return ChromiumBridge::indexedDatabase();
  • trunk/WebKit/chromium/ChangeLog

    r56756 r56777  
     12010-03-29  Jeremy Orlow  <jorlow@chromium.org>
     2
     3        Reviewed by Darin Fisher.
     4
     5        More IndexedDB work
     6        https://bugs.webkit.org/show_bug.cgi?id=36770
     7
     8        Start the implementation of WebIndexedDatabase (for entrance back into WebKit).
     9
     10        * WebKit.gyp:
     11        * public/WebIndexedDatabase.h:
     12        * src/WebIndexedDatabaseImpl.cpp: Added.
     13        (WebKit::WebIndexedDatabase::create):
     14        (WebKit::WebIndexedDatabaseImpl::~WebIndexedDatabaseImpl):
     15        (WebKit::WebIndexedDatabaseImpl::open):
     16        * src/WebIndexedDatabaseImpl.h: Added.
     17
    1182010-03-29  Rafael Weinstein  <rafaelw@chromium.org>
    219
  • trunk/WebKit/chromium/WebKit.gyp

    r56713 r56777  
    334334                'src/WebImageDecoder.cpp',
    335335                'src/WebImageSkia.cpp',
     336                'src/WebIndexedDatabaseImpl.cpp',
     337                'src/WebIndexedDatabaseImpl.h',
    336338                'src/WebInputElement.cpp',
    337339                'src/WebInputEvent.cpp',
  • trunk/WebKit/chromium/public/WebIndexedDatabase.h

    r56713 r56777  
    2626 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    2727 */
     28
    2829#ifndef WebIndexedDatabase_h
    2930#define WebIndexedDatabase_h
     
    4243class WebIndexedDatabase {
    4344public:
    44     // FIXME: Implement entry back into WebKit for this API.
     45    WEBKIT_API static WebIndexedDatabase* create();
    4546
    4647    virtual ~WebIndexedDatabase() { }
  • trunk/WebKit/chromium/src/WebIndexedDatabaseImpl.cpp

    • Property svn:eol-style set to LF
    r56776 r56777  
    3030
    3131#include "config.h"
     32#include "WebIndexedDatabaseImpl.h"
     33
     34#include "WebIDBDatabaseError.h"
     35#include <wtf/OwnPtr.h>
    3236
    3337#if ENABLE(INDEXED_DATABASE)
    34 #include "V8IDBRequest.h"
    3538
    36 #include "SerializedScriptValue.h"
    37 #include "V8Proxy.h"
     39namespace WebKit {
    3840
    39 namespace WebCore {
    40 
    41 v8::Handle<v8::Value> V8IDBRequest::resultAccessorGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info)
     41WebIndexedDatabase* WebIndexedDatabase::create()
    4242{
    43     IDBRequest* request = V8IDBRequest::toNative(info.Holder());
    44     SerializedScriptValue* result = request->result();
    45     if (!result)
    46         return v8::Null();
    47 
    48     return result->deserialize();
     43    return new WebIndexedDatabaseImpl();
    4944}
    5045
    51 } // namespace WebCore
     46WebIndexedDatabaseImpl::~WebIndexedDatabaseImpl()
     47{
     48}
    5249
    53 #endif
     50void WebIndexedDatabaseImpl::open(const WebString& name, const WebString& description, bool modifyDatabase, int& exceptionCode, WebIDBCallbacks<WebIDBDatabase>* callbacksPtr)
     51{
     52    OwnPtr<WebIDBCallbacks<WebIDBDatabase>*> callbacks(callbacksPtr);
     53    callbacks->onError(WebIDBDatabaseError(0, "Not implemented"));
     54    // FIXME: Implement for realz.
     55}
     56
     57} // namespace WebKit
     58
     59#endif // ENABLE(INDEXED_DATABASE)
  • trunk/WebKit/chromium/src/WebIndexedDatabaseImpl.h

    r56776 r56777  
    2626 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    2727 */
    28 #ifndef IDBDatabaseRequest_h
    29 #define IDBDatabaseRequest_h
    3028
    31 #include <wtf/RefCounted.h>
     29#ifndef WebIndexedDatabaseImpl_h
     30#define WebIndexedDatabaseImpl_h
    3231
    33 #if ENABLE(INDEXED_DATABASE)
     32#include "WebIndexedDatabase.h"
    3433
    35 namespace WebCore {
     34namespace WebKit {
    3635
    37 class IDBRequest;
     36class WebIndexedDatabaseImpl : public WebIndexedDatabase {
     37public:
     38    virtual ~WebIndexedDatabaseImpl();
    3839
    39 class IDBDatabaseRequest : public RefCounted<IDBDatabaseRequest> {
    40 public:
    41     // FIXME: Write.
    42     IDBRequest* request() const { return 0; }
     40    virtual void open(const WebString& name, const WebString& description, bool modifyDatabase, int& exceptionCode, WebIDBCallbacks<WebIDBDatabase>* callbacks);
    4341};
    4442
    45 } // namespace WebCore
     43} // namespace WebKit
    4644
    47 #endif
    48 
    49 #endif // IDBDatabaseRequest_h
    50 
     45#endif // WebIndexedDatabaseImpl_h
Note: See TracChangeset for help on using the changeset viewer.