Changeset 55485 in webkit


Ignore:
Timestamp:
Mar 3, 2010 4:38:00 PM (14 years ago)
Author:
levin@chromium.org
Message:

2010-03-03 David Levin <levin@chromium.org>

No review, rolling out r55474.
http://trac.webkit.org/changeset/55480

The patch broke fast/frames/sandboxed-iframe-storage.html

  • Android.jscbindings.mk:
  • Android.v8bindings.mk:
  • GNUmakefile.am:
  • WebCore.gypi:
  • WebCore.pro:
  • WebCore.vcproj/WebCore.vcproj:
  • bindings/js/JSDOMWindowCustom.cpp:
  • bindings/v8/custom/V8DOMWindowCustom.cpp:
  • dom/Document.cpp: (WebCore::Document::postTask):
  • page/DOMWindow.cpp: (WebCore::DOMWindow::openDatabase):
  • page/DOMWindow.h:
  • page/DOMWindow.idl:
  • storage/Database.cpp: (WebCore::Database::openDatabase): (WebCore::Database::Database): (WebCore::Database::performOpenAndVerify):
  • storage/Database.h:
  • workers/WorkerContext.cpp: (WebCore::WorkerContext::openDatabase):
  • workers/WorkerContext.h:
Location:
trunk/WebCore
Files:
17 edited

Legend:

Unmodified
Added
Removed
  • trunk/WebCore/Android.jscbindings.mk

    r55474 r55485  
    8181        bindings/js/JSCustomSQLTransactionErrorCallback.cpp \
    8282        bindings/js/JSCustomVoidCallback.cpp \
    83         bindings/js/JSDatabaseCallback.cpp \
    8483        bindings/js/JSDesktopNotificationsCustom.cpp \
    8584        bindings/js/JSDOMApplicationCacheCustom.cpp \
  • trunk/WebCore/Android.v8bindings.mk

    r55474 r55485  
    109109        bindings/v8/custom/V8DOMWindowCustom.cpp \
    110110        bindings/v8/custom/V8DataGridColumnListCustom.cpp \
    111         bindings/v8/custom/V8DatabaseCallback.cpp \
    112111        bindings/v8/custom/V8DatabaseCustom.cpp \
    113112        bindings/v8/custom/V8DedicatedWorkerContextCustom.cpp \
  • trunk/WebCore/ChangeLog

    r55484 r55485  
     12010-03-03  David Levin  <levin@chromium.org>
     2
     3        No review, rolling out r55474.
     4        http://trac.webkit.org/changeset/55480
     5
     6        The patch broke fast/frames/sandboxed-iframe-storage.html
     7
     8        * Android.jscbindings.mk:
     9        * Android.v8bindings.mk:
     10        * GNUmakefile.am:
     11        * WebCore.gypi:
     12        * WebCore.pro:
     13        * WebCore.vcproj/WebCore.vcproj:
     14        * bindings/js/JSDOMWindowCustom.cpp:
     15        * bindings/v8/custom/V8DOMWindowCustom.cpp:
     16        * dom/Document.cpp:
     17        (WebCore::Document::postTask):
     18        * page/DOMWindow.cpp:
     19        (WebCore::DOMWindow::openDatabase):
     20        * page/DOMWindow.h:
     21        * page/DOMWindow.idl:
     22        * storage/Database.cpp:
     23        (WebCore::Database::openDatabase):
     24        (WebCore::Database::Database):
     25        (WebCore::Database::performOpenAndVerify):
     26        * storage/Database.h:
     27        * workers/WorkerContext.cpp:
     28        (WebCore::WorkerContext::openDatabase):
     29        * workers/WorkerContext.h:
     30
    1312010-03-03  David Levin  <levin@chromium.org>
    232
  • trunk/WebCore/GNUmakefile.am

    r55474 r55485  
    22292229        WebCore/bindings/js/JSCustomSQLTransactionErrorCallback.cpp \
    22302230        WebCore/bindings/js/JSCustomSQLTransactionErrorCallback.h \
    2231         WebCore/bindings/js/JSDatabaseCallback.cpp \
    2232         WebCore/bindings/js/JSDatabaseCallback.h \
    22332231        WebCore/bindings/js/JSDatabaseCustom.cpp \
    22342232        WebCore/bindings/js/JSSQLResultSetRowListCustom.cpp \
     
    22512249        WebCore/storage/DatabaseAuthorizer.cpp \
    22522250        WebCore/storage/DatabaseAuthorizer.h \
    2253         WebCore/storage/DatabaseCallback.h \
    22542251        WebCore/storage/DatabaseDetails.h \
    22552252        WebCore/storage/DatabaseTask.cpp \
  • trunk/WebCore/WebCore.gypi

    r55474 r55485  
    704704            'bindings/v8/custom/V8CustomXPathNSResolver.cpp',
    705705            'bindings/v8/custom/V8CustomXPathNSResolver.h',
    706             'bindings/v8/custom/V8DatabaseCallback.cpp',
    707             'bindings/v8/custom/V8DatabaseCallback.h',
    708706            'bindings/v8/custom/V8DatabaseCustom.cpp',
    709707            'bindings/v8/custom/V8DataGridColumnListCustom.cpp',
     
    32213219            'storage/DatabaseAuthorizer.cpp',
    32223220            'storage/DatabaseAuthorizer.h',
    3223             'storage/DatabaseCallback.h',
    32243221            'storage/DatabaseDetails.h',
    32253222            'storage/DatabaseTask.cpp',
  • trunk/WebCore/WebCore.pro

    r55474 r55485  
    10131013    bindings/js/JSCustomVoidCallback.h \
    10141014    bindings/js/JSCustomXPathNSResolver.h \
    1015     bindings/js/JSDatabaseCallback.h \
    10161015    bindings/js/JSDataGridDataSource.h \
    10171016    bindings/js/JSDOMBinding.h \
     
    22222221        bindings/js/JSCustomSQLTransactionCallback.cpp \
    22232222        bindings/js/JSCustomSQLTransactionErrorCallback.cpp \
    2224         bindings/js/JSDatabaseCallback.cpp \
    22252223        bindings/js/JSDatabaseCustom.cpp \
    22262224        bindings/js/JSSQLResultSetRowListCustom.cpp \
     
    22332231        storage/DatabaseAuthorizer.h \
    22342232        storage/Database.h \
    2235         storage/DatabaseCallback.h \
    22362233        storage/DatabaseTask.h \
    22372234        storage/DatabaseThread.h \
  • trunk/WebCore/WebCore.vcproj/WebCore.vcproj

    r55474 r55485  
    3534135341                                </File>
    3534235342                                <File
    35343                                         RelativePath="..\bindings\js\JSDatabaseCallback.cpp"
    35344                                         >
    35345                                 </File>
    35346                                 <File
    35347                                         RelativePath="..\bindings\js\JSDatabaseCallback.h"
    35348                                         >
    35349                                 </File>
    35350                                 <File
    3535135343                                        RelativePath="..\bindings\js\JSDatabaseCustom.cpp"
    3535235344                                        >
     
    4228642278                        </File>
    4228742279                        <File
    42288                                 RelativePath="..\storage\DatabaseCallback.h"
    42289                                 >
    42290                         </File>
    42291                         <File
    4229242280                                RelativePath="..\storage\DatabaseTask.cpp"
    4229342281                                >
  • trunk/WebCore/bindings/js/JSDOMWindowCustom.cpp

    r55474 r55485  
    2424#include "Base64.h"
    2525#include "Chrome.h"
    26 #include "Database.h"
    2726#include "DOMWindow.h"
    2827#include "Document.h"
     
    3837#include "History.h"
    3938#include "JSAudioConstructor.h"
    40 #include "JSDatabase.h"
    41 #include "JSDatabaseCallback.h"
    4239#include "JSDOMWindowShell.h"
    4340#include "JSEvent.h"
     
    10211018}
    10221019
    1023 JSValue JSDOMWindow::openDatabase(ExecState* exec, const ArgList& args)
    1024 {
    1025     if (!allowsAccessFrom(exec) || (args.size() < 4))
    1026         return jsUndefined();
    1027     ExceptionCode ec = 0;
    1028     const UString& name = args.at(0).toString(exec);
    1029     const UString& version = args.at(1).toString(exec);
    1030     const UString& displayName = args.at(2).toString(exec);
    1031     unsigned long estimatedSize = args.at(3).toInt32(exec);
    1032     RefPtr<DatabaseCallback> creationCallback;
    1033     if ((args.size() >= 5) && args.at(4).isObject())
    1034         creationCallback = JSDatabaseCallback::create(asObject(args.at(4)), globalObject());
    1035 
    1036     JSValue result = toJS(exec, globalObject(), WTF::getPtr(impl()->openDatabase(name, version, displayName, estimatedSize, creationCallback.release(), ec)));
    1037     setDOMException(exec, ec);
    1038     return result;
    1039 }
    1040 
    10411020DOMWindow* toDOMWindow(JSValue value)
    10421021{
  • trunk/WebCore/bindings/v8/custom/V8DOMWindowCustom.cpp

    r55474 r55485  
    5656#include "V8BindingState.h"
    5757#include "V8CustomEventListener.h"
    58 #include "V8Database.h"
    59 #include "V8DatabaseCallback.h"
    6058#include "V8GCForContextDispose.h"
    6159#include "V8HTMLCollection.h"
     
    809807}
    810808
    811 v8::Handle<v8::Value> V8DOMWindow::openDatabaseCallback(const v8::Arguments& args)
    812 {
    813     INC_STATS("DOM.DOMWindow.openDatabase");
    814     if (args.Length() < 4)
    815         return v8::Undefined();
    816 
    817     DOMWindow* imp = V8DOMWindow::toNative(args.Holder());
    818     if (!V8BindingSecurity::canAccessFrame(V8BindingState::Only(), imp->frame(), true))
    819         return v8::Undefined();
    820 
    821     ExceptionCode ec = 0;
    822     String name = toWebCoreString(args[0]);
    823     String version = toWebCoreString(args[1]);
    824     String displayName = toWebCoreString(args[2]);
    825     unsigned long estimatedSize = args[3]->IntegerValue();
    826     RefPtr<DatabaseCallback> creationCallback;
    827     if ((args.Length() >= 5) && args[4]->IsObject())
    828         creationCallback = V8DatabaseCallback::create(args[4], imp->frame());
    829 
    830     v8::Handle<v8::Value> result = toV8(imp->openDatabase(name, version, displayName, estimatedSize, creationCallback.release(), ec));
    831     V8Proxy::setDOMException(ec);
    832     return result;
    833 }
    834 
    835809bool V8DOMWindow::namedSecurityCheck(v8::Local<v8::Object> host, v8::Local<v8::Value> key, v8::AccessType type, v8::Local<v8::Value> data)
    836810{
  • trunk/WebCore/dom/Document.cpp

    r55474 r55485  
    47314731void Document::postTask(PassOwnPtr<Task> task)
    47324732{
    4733     callOnMainThread(performTask, new PerformTaskContext(m_weakReference, task));
     4733    if (isMainThread()) {
     4734        ScriptExecutionContextTaskTimer* timer = new ScriptExecutionContextTaskTimer(static_cast<Document*>(this), task);
     4735        timer->startOneShot(0);
     4736    } else {
     4737        callOnMainThread(performTask, new PerformTaskContext(m_weakReference, task));
     4738    }
    47344739}
    47354740
  • trunk/WebCore/page/DOMWindow.cpp

    r55474 r55485  
    3636#include "Console.h"
    3737#include "Database.h"
    38 #include "DatabaseCallback.h"
    3938#include "DOMApplicationCache.h"
    4039#include "DOMSelection.h"
     
    11271126
    11281127#if ENABLE(DATABASE)
    1129 PassRefPtr<Database> DOMWindow::openDatabase(const String& name, const String& version, const String& displayName, unsigned long estimatedSize, PassRefPtr<DatabaseCallback> creationCallback, ExceptionCode& ec)
     1128PassRefPtr<Database> DOMWindow::openDatabase(const String& name, const String& version, const String& displayName, unsigned long estimatedSize, ExceptionCode& ec)
    11301129{
    11311130    if (!m_frame)
     
    11391138        return 0;
    11401139
    1141     return Database::openDatabase(document, name, version, displayName, estimatedSize, creationCallback, ec);
     1140    return Database::openDatabase(document, name, version, displayName, estimatedSize, ec);
    11421141}
    11431142#endif
  • trunk/WebCore/page/DOMWindow.h

    r55474 r55485  
    4646    class DOMSelection;
    4747    class Database;
    48     class DatabaseCallback;
    4948    class Document;
    5049    class Element;
     
    200199#if ENABLE(DATABASE)
    201200        // HTML 5 client-side database
    202         PassRefPtr<Database> openDatabase(const String& name, const String& version, const String& displayName, unsigned long estimatedSize, PassRefPtr<DatabaseCallback> creationCallback, ExceptionCode&);
     201        PassRefPtr<Database> openDatabase(const String& name, const String& version, const String& displayName, unsigned long estimatedSize, ExceptionCode&);
    203202#endif
    204203
  • trunk/WebCore/page/DOMWindow.idl

    r55474 r55485  
    161161#endif   
    162162#if defined(ENABLE_DATABASE) && ENABLE_DATABASE
    163         [EnabledAtRuntime, Custom] Database openDatabase(in DOMString name, in DOMString version, in DOMString displayName, in unsigned long estimatedSize, in DatabaseCallback creationCallback)
     163        [EnabledAtRuntime] Database openDatabase(in DOMString name, in DOMString version, in DOMString displayName, in unsigned long estimatedSize)
    164164            raises(DOMException);
    165165#endif
  • trunk/WebCore/storage/Database.cpp

    r55484 r55485  
    133133static int guidForOriginAndName(const String& origin, const String& name);
    134134
    135 class DatabaseCreationCallbackTask : public ScriptExecutionContext::Task {
    136 public:
    137     static PassOwnPtr<DatabaseCreationCallbackTask> create(PassRefPtr<Database> database)
    138     {
    139         return new DatabaseCreationCallbackTask(database);
    140     }
    141 
    142     virtual void performTask(ScriptExecutionContext*)
    143     {
    144         m_database->performCreationCallback();
    145     }
    146 
    147 private:
    148     DatabaseCreationCallbackTask(PassRefPtr<Database> database)
    149         : m_database(database)
    150     {
    151     }
    152 
    153     RefPtr<Database> m_database;
    154 };
    155 
    156 PassRefPtr<Database> Database::openDatabase(ScriptExecutionContext* context, const String& name,
    157                                             const String& expectedVersion, const String& displayName,
    158                                             unsigned long estimatedSize, PassRefPtr<DatabaseCallback> creationCallback,
    159                                             ExceptionCode& e)
     135PassRefPtr<Database> Database::openDatabase(ScriptExecutionContext* context, const String& name, const String& expectedVersion, const String& displayName, unsigned long estimatedSize, ExceptionCode& e)
    160136{
    161137    if (!DatabaseTracker::tracker().canEstablishDatabase(context, name, displayName, estimatedSize)) {
     
    165141    }
    166142
    167     RefPtr<Database> database = adoptRef(new Database(context, name, expectedVersion, displayName, estimatedSize, creationCallback));
     143    RefPtr<Database> database = adoptRef(new Database(context, name, expectedVersion, displayName, estimatedSize));
    168144
    169145    if (!database->openAndVerifyVersion(e)) {
     
    185161#endif
    186162
    187     // If it's a new database and a creation callback was provided, reset the expected
    188     // version to "" and schedule the creation callback. Because of some subtle String
    189     // implementation issues, we have to reset m_expectedVersion here instead of doing
    190     // it inside performOpenAndVerify() which is run on the DB thread.
    191     if (database->isNew() && database->m_creationCallback.get()) {
    192         database->m_expectedVersion = "";
    193         LOG(StorageAPI, "Scheduling DatabaseCreationCallbackTask for database %p\n", database.get());
    194         database->m_scriptExecutionContext->postTask(DatabaseCreationCallbackTask::create(database));
    195     }
    196 
    197163    return database;
    198164}
    199165
    200 Database::Database(ScriptExecutionContext* context, const String& name, const String& expectedVersion, const String& displayName, unsigned long estimatedSize, PassRefPtr<DatabaseCallback> creationCallback)
     166Database::Database(ScriptExecutionContext* context, const String& name, const String& expectedVersion, const String& displayName, unsigned long estimatedSize)
    201167    : m_transactionInProgress(false)
    202168    , m_isTransactionQueueEnabled(true)
     
    210176    , m_stopped(false)
    211177    , m_opened(false)
    212     , m_new(false)
    213     , m_creationCallback(creationCallback)
    214178{
    215179    ASSERT(m_scriptExecutionContext.get());
     
    557521
    558522            if (!m_sqliteDatabase.tableExists(databaseInfoTableName())) {
    559                 m_new = true;
    560 
    561523                if (!m_sqliteDatabase.executeCommand("CREATE TABLE " + databaseInfoTableName() + " (key TEXT NOT NULL ON CONFLICT FAIL UNIQUE ON CONFLICT REPLACE,value TEXT NOT NULL ON CONFLICT FAIL);")) {
    562524                    LOG_ERROR("Unable to create table %s in database %s", databaseInfoTableName().ascii().data(), databaseDebugName().ascii().data());
     
    577539            if (currentVersion.length()) {
    578540                LOG(StorageAPI, "Retrieved current version %s from database %s", currentVersion.ascii().data(), databaseDebugName().ascii().data());
    579             } else if (!m_new || !m_creationCallback) {
     541            } else {
    580542                LOG(StorageAPI, "Setting version %s in database %s that was just created", m_expectedVersion.ascii().data(), databaseDebugName().ascii().data());
    581543                if (!setVersionInDatabase(m_expectedVersion)) {
     
    600562    // If the expected version isn't the empty string, ensure that the current database version we have matches that version. Otherwise, set an exception.
    601563    // If the expected version is the empty string, then we always return with whatever version of the database we have.
    602     if ((!m_new || !m_creationCallback) && m_expectedVersion.length() && m_expectedVersion != currentVersion) {
     564    if (m_expectedVersion.length() && m_expectedVersion != currentVersion) {
    603565        LOG(StorageAPI, "page expects version %s from database %s, which actually has version name %s - openDatabase() call will fail", m_expectedVersion.ascii().data(),
    604566            databaseDebugName().ascii().data(), currentVersion.ascii().data());
     
    724686}
    725687
    726 void Database::performCreationCallback()
    727 {
    728     m_creationCallback->handleEvent(m_scriptExecutionContext.get(), this);
    729 }
    730 
    731688SQLTransactionClient* Database::transactionClient() const
    732689{
  • trunk/WebCore/storage/Database.h

    r55484 r55485  
    3131
    3232#if ENABLE(DATABASE)
    33 #include "DatabaseCallback.h"
    3433#include "PlatformString.h"
    3534#include "SecurityOrigin.h"
     
    5352
    5453class DatabaseAuthorizer;
    55 class DatabaseCallback;
    5654class DatabaseThread;
    5755class ScriptExecutionContext;
     
    7674
    7775// Direct support for the DOM API
    78     static PassRefPtr<Database> openDatabase(ScriptExecutionContext* context, const String& name,
    79                                              const String& expectedVersion, const String& displayName,
    80                                              unsigned long estimatedSize, PassRefPtr<DatabaseCallback> creationCallback,
    81                                              ExceptionCode&);
     76    static PassRefPtr<Database> openDatabase(ScriptExecutionContext* context, const String& name, const String& expectedVersion, const String& displayName, unsigned long estimatedSize, ExceptionCode&);
    8277    String version() const;
    8378    void changeVersion(const String& oldVersion, const String& newVersion,
     
    117112    bool stopped() const { return m_stopped; }
    118113
    119     bool isNew() const { return m_new; }
    120 
    121114    unsigned long long databaseSize() const;
    122115    unsigned long long maximumSize() const;
     
    129122
    130123    Vector<String> performGetTableNames();
    131     void performCreationCallback();
    132124
    133125    SQLTransactionClient* transactionClient() const;
     
    137129    Database(ScriptExecutionContext* context, const String& name,
    138130             const String& expectedVersion, const String& displayName,
    139              unsigned long estimatedSize, PassRefPtr<DatabaseCallback> creationCallback);
     131             unsigned long estimatedSize);
    140132
    141133    bool openAndVerifyVersion(ExceptionCode&);
     
    168160    bool m_opened;
    169161
    170     bool m_new;
    171 
    172162    SQLiteDatabase m_sqliteDatabase;
    173163    RefPtr<DatabaseAuthorizer> m_databaseAuthorizer;
    174 
    175     RefPtr<DatabaseCallback> m_creationCallback;
    176164
    177165#ifndef NDEBUG
  • trunk/WebCore/workers/WorkerContext.cpp

    r55474 r55485  
    257257
    258258#if ENABLE(DATABASE)
    259 PassRefPtr<Database> WorkerContext::openDatabase(const String& name, const String& version, const String& displayName, unsigned long estimatedSize, PassRefPtr<DatabaseCallback> creationCallback, ExceptionCode& ec)
     259PassRefPtr<Database> WorkerContext::openDatabase(const String& name, const String& version, const String& displayName, unsigned long estimatedSize, ExceptionCode& ec)
    260260{
    261261    if (!securityOrigin()->canAccessDatabase()) {
     
    268268        return 0;
    269269
    270     return Database::openDatabase(this, name, version, displayName, estimatedSize, creationCallback, ec);
     270    return Database::openDatabase(this, name, version, displayName, estimatedSize, ec);
    271271}
    272272#endif
  • trunk/WebCore/workers/WorkerContext.h

    r55474 r55485  
    3232#include "AtomicStringHash.h"
    3333#include "Database.h"
    34 #include "DatabaseCallback.h"
    3534#include "EventListener.h"
    3635#include "EventNames.h"
     
    108107#if ENABLE(DATABASE)
    109108        // HTML 5 client-side database
    110         PassRefPtr<Database> openDatabase(const String& name, const String& version, const String& displayName, unsigned long estimatedSize, PassRefPtr<DatabaseCallback> creationCallback, ExceptionCode&);
     109        PassRefPtr<Database> openDatabase(const String& name, const String& version, const String& displayName, unsigned long estimatedSize, ExceptionCode&);
    111110        // Not implemented yet.
    112111        virtual bool isDatabaseReadOnly() const { return false; }
Note: See TracChangeset for help on using the changeset viewer.