Changeset 59095 in webkit


Ignore:
Timestamp:
May 10, 2010 1:46:34 PM (14 years ago)
Author:
dumi@chromium.org
Message:

Clean up and fix the existing V8 DB bindings.
https://bugs.webkit.org/show_bug.cgi?id=34994

Reviewed by Adam Barth.

  • bindings/v8/custom/V8DOMWindowCustom.cpp:

(WebCore::V8DOMWindow::openDatabaseCallback):

  • bindings/v8/custom/V8DatabaseCustom.cpp:

(WebCore::V8Database::changeVersionCallback):
(WebCore::createTransaction):

  • bindings/v8/custom/V8SQLTransactionCustom.cpp:

(WebCore::V8SQLTransaction::executeSqlCallback):

Location:
trunk/WebCore
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/WebCore/ChangeLog

    r59094 r59095  
     12010-05-10  Dumitru Daniliuc  <dumi@chromium.org>
     2
     3        Reviewed by Adam Barth.
     4
     5        Clean up and fix the existing V8 DB bindings.
     6        https://bugs.webkit.org/show_bug.cgi?id=34994
     7
     8        * bindings/v8/custom/V8DOMWindowCustom.cpp:
     9        (WebCore::V8DOMWindow::openDatabaseCallback):
     10        * bindings/v8/custom/V8DatabaseCustom.cpp:
     11        (WebCore::V8Database::changeVersionCallback):
     12        (WebCore::createTransaction):
     13        * bindings/v8/custom/V8SQLTransactionCustom.cpp:
     14        (WebCore::V8SQLTransaction::executeSqlCallback):
     15
    1162010-05-10  Kevin Ollivier  <kevino@theolliviers.com>
    217
  • trunk/WebCore/bindings/v8/custom/V8DOMWindowCustom.cpp

    r57865 r59095  
    5353#include "V8Binding.h"
    5454#include "V8BindingDOMWindow.h"
     55#include "V8BindingMacros.h"
    5556#include "V8BindingState.h"
    5657#include "V8CustomEventListener.h"
     
    720721    INC_STATS("DOM.DOMWindow.openDatabase");
    721722    if (args.Length() < 4)
    722         return v8::Undefined();
     723        return throwError(SYNTAX_ERR);
     724
     725    EXCEPTION_BLOCK(String, name, toWebCoreString(args[0]));
     726    EXCEPTION_BLOCK(String, version, toWebCoreString(args[1]));
     727    EXCEPTION_BLOCK(String, displayName, toWebCoreString(args[2]));
     728    EXCEPTION_BLOCK(unsigned long, estimatedSize, args[3]->Uint32Value());
    723729
    724730    DOMWindow* imp = V8DOMWindow::toNative(args.Holder());
     
    726732        return v8::Undefined();
    727733
     734    RefPtr<DatabaseCallback> creationCallback;
     735    if (args.Length() >= 5) {
     736        if (!args[4]->IsObject())
     737            return throwError(TYPE_MISMATCH_ERR);
     738
     739        creationCallback = V8DatabaseCallback::create(args[4], imp->frame());
     740    }
     741
    728742    ExceptionCode ec = 0;
    729     String name = toWebCoreString(args[0]);
    730     String version = toWebCoreString(args[1]);
    731     String displayName = toWebCoreString(args[2]);
    732     unsigned long estimatedSize = args[3]->IntegerValue();
    733     RefPtr<DatabaseCallback> creationCallback;
    734     if ((args.Length() >= 5) && args[4]->IsObject())
    735         creationCallback = V8DatabaseCallback::create(args[4], imp->frame());
    736 
    737743    v8::Handle<v8::Value> result = toV8(imp->openDatabase(name, version, displayName, estimatedSize, creationCallback.release(), ec));
    738744
  • trunk/WebCore/bindings/v8/custom/V8DatabaseCustom.cpp

    r58801 r59095  
    11/*
    22 * Copyright (C) 2009 Google Inc. All rights reserved.
    3  * 
     3 *
    44 * Redistribution and use in source and binary forms, with or without
    55 * modification, are permitted provided that the following conditions are
    66 * met:
    7  * 
     7 *
    88 *     * Redistributions of source code must retain the above copyright
    99 * notice, this list of conditions and the following disclaimer.
     
    1515 * contributors may be used to endorse or promote products derived from
    1616 * this software without specific prior written permission.
    17  * 
     17 *
    1818 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    1919 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
     
    3636#include "Database.h"
    3737#include "V8Binding.h"
     38#include "V8BindingMacros.h"
    3839#include "V8SQLTransactionCallback.h"
    3940#include "V8SQLTransactionErrorCallback.h"
     
    4849
    4950    if (args.Length() < 2)
    50         return throwError("The old and new version strings are required.", V8Proxy::SyntaxError);
     51        return throwError(SYNTAX_ERR);
    5152
    52     if (!(args[0]->IsString() && args[1]->IsString()))
    53         return throwError("The old and new versions must be strings.");
     53    EXCEPTION_BLOCK(String, oldVersion, toWebCoreString(args[0]));
     54    EXCEPTION_BLOCK(String, newVersion, toWebCoreString(args[1]));
    5455
    5556    Database* database = V8Database::toNative(args.Holder());
     
    6263    if (args.Length() > 2) {
    6364        if (!args[2]->IsObject())
    64             return throwError("changeVersion transaction callback must be of valid type.");
     65            return throwError(TYPE_MISMATCH_ERR);
    6566
    6667        callback = V8SQLTransactionCallback::create(args[2], frame);
     
    7071    if (args.Length() > 3) {
    7172        if (!args[3]->IsObject())
    72             return throwError("changeVersion error callback must be of valid type.");
     73            return throwError(TYPE_MISMATCH_ERR);
    7374
    7475        errorCallback = V8SQLTransactionErrorCallback::create(args[3], frame);
     
    7879    if (args.Length() > 4) {
    7980        if (!args[4]->IsObject())
    80             return throwError("changeVersion success callback must be of valid type.");
     81            return throwError(TYPE_MISMATCH_ERR);
    8182
    8283        successCallback = V8CustomVoidCallback::create(args[4], frame);
    8384    }
    8485
    85     database->changeVersion(toWebCoreString(args[0]), toWebCoreString(args[1]), callback.release(), errorCallback.release(), successCallback.release());
     86    database->changeVersion(oldVersion, newVersion, callback.release(), errorCallback.release(), successCallback.release());
    8687
    8788    return v8::Undefined();
     
    9192{
    9293    if (!args.Length())
    93         return throwError("Transaction callback is required.", V8Proxy::SyntaxError);
     94        return throwError(SYNTAX_ERR);
    9495
    9596    if (!args[0]->IsObject())
    96         return throwError("Transaction callback must be of valid type.");
     97        return throwError(TYPE_MISMATCH_ERR);
    9798
    9899    Database* database = V8Database::toNative(args.Holder());
     
    107108    if (args.Length() > 1 && !isUndefinedOrNull(args[1])) {
    108109        if (!args[1]->IsObject())
    109             return throwError("Transaction error callback must be of valid type.");
     110            return throwError(TYPE_MISMATCH_ERR);
    110111
    111112        errorCallback = V8SQLTransactionErrorCallback::create(args[1], frame);
     
    115116    if (args.Length() > 2 && !isUndefinedOrNull(args[2])) {
    116117        if (!args[2]->IsObject())
    117             return throwError("Transaction success callback must be of valid type.");
     118            return throwError(TYPE_MISMATCH_ERR);
    118119
    119120        successCallback = V8CustomVoidCallback::create(args[2], frame);
  • trunk/WebCore/bindings/v8/custom/V8SQLTransactionCustom.cpp

    r58801 r59095  
    11/*
    22 * Copyright (C) 2009 Google Inc. All rights reserved.
    3  * 
     3 *
    44 * Redistribution and use in source and binary forms, with or without
    55 * modification, are permitted provided that the following conditions are
    66 * met:
    7  * 
     7 *
    88 *     * Redistributions of source code must retain the above copyright
    99 * notice, this list of conditions and the following disclaimer.
     
    1515 * contributors may be used to endorse or promote products derived from
    1616 * this software without specific prior written permission.
    17  * 
     17 *
    1818 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    1919 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
     
    3838#include "SQLValue.h"
    3939#include "V8Binding.h"
     40#include "V8BindingMacros.h"
    4041#include "V8SQLStatementCallback.h"
    4142#include "V8SQLStatementErrorCallback.h"
     
    5253
    5354    if (args.Length() == 0)
    54         return throwError("SQL statement is required.", V8Proxy::SyntaxError);
     55        return throwError(SYNTAX_ERR);
    5556
    56     String statement = toWebCoreString(args[0]);
     57    EXCEPTION_BLOCK(String, statement, toWebCoreString(args[0]));
    5758
    5859    Vector<SQLValue> sqlValues;
    5960
    6061    if (args.Length() > 1 && !isUndefinedOrNull(args[1])) {
    61         if (args[1]->IsObject()) {
    62             uint32_t sqlArgsLength = 0;
    63             v8::Local<v8::Object> sqlArgsObject = args[1]->ToObject();
    64             v8::Local<v8::Value> lengthGetter;
    65             {
    66                 v8::TryCatch block;
    67                 lengthGetter = sqlArgsObject->Get(v8::String::New("length"));
    68                 if (block.HasCaught())
    69                     return throwError(block.Exception());
     62        if (!args[1]->IsObject())
     63            return throwError(TYPE_MISMATCH_ERR);
     64
     65        uint32_t sqlArgsLength = 0;
     66        v8::Local<v8::Object> sqlArgsObject = args[1]->ToObject();
     67        EXCEPTION_BLOCK(v8::Local<v8::Value>, length, sqlArgsObject->Get(v8::String::New("length")));
     68
     69        if (isUndefinedOrNull(length))
     70            sqlArgsLength = sqlArgsObject->GetPropertyNames()->Length();
     71        else
     72            sqlArgsLength = length->Uint32Value();
     73
     74        for (unsigned int i = 0; i < sqlArgsLength; ++i) {
     75            v8::Local<v8::Integer> key = v8::Integer::New(i);
     76            EXCEPTION_BLOCK(v8::Local<v8::Value>, value, sqlArgsObject->Get(key));
     77
     78            if (value.IsEmpty() || value->IsNull())
     79                sqlValues.append(SQLValue());
     80            else if (value->IsNumber()) {
     81                EXCEPTION_BLOCK(double, sqlValue, value->NumberValue());
     82                sqlValues.append(SQLValue(sqlValue));
     83            } else {
     84                EXCEPTION_BLOCK(String, sqlValue, toWebCoreString(value));
     85                sqlValues.append(SQLValue(sqlValue));
    7086            }
    71 
    72             if (isUndefinedOrNull(lengthGetter))
    73                 sqlArgsLength = sqlArgsObject->GetPropertyNames()->Length();
    74             else
    75                 sqlArgsLength = lengthGetter->Uint32Value();
    76 
    77             for (unsigned int i = 0; i < sqlArgsLength; ++i) {
    78                 v8::Local<v8::Integer> key = v8::Integer::New(i);
    79                 v8::Local<v8::Value> value;
    80                 {
    81                     v8::TryCatch block;
    82                     value = sqlArgsObject->Get(key);
    83                     if (block.HasCaught())
    84                         return throwError(block.Exception());
    85                 }
    86 
    87                 if (value.IsEmpty() || value->IsNull())
    88                     sqlValues.append(SQLValue());
    89                 else if (value->IsNumber())
    90                     sqlValues.append(SQLValue(value->NumberValue()));
    91                 else
    92                     sqlValues.append(SQLValue(toWebCoreString(value)));
    93             }
    94         } else
    95             return throwError("sqlArgs should be array or object!", V8Proxy::TypeError);
     87        }
    9688    }
    9789
     
    10395    if (args.Length() > 2 && !isUndefinedOrNull(args[2])) {
    10496        if (!args[2]->IsObject())
    105             return throwError("Statement callback must be of valid type.", V8Proxy::TypeError);
     97            return throwError(TYPE_MISMATCH_ERR);
    10698
    10799        if (frame)
     
    112104    if (args.Length() > 3 && !isUndefinedOrNull(args[3])) {
    113105        if (!args[3]->IsObject())
    114             return throwError("Statement error callback must be of valid type.", V8Proxy::TypeError);
     106            return throwError(TYPE_MISMATCH_ERR);
    115107
    116108        if (frame)
Note: See TracChangeset for help on using the changeset viewer.