Home | History | Annotate | Download | only in indexeddb
      1 /*
      2  * Copyright (C) 2013 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 are
      6  * met:
      7  *
      8  * 1. Redistributions of source code must retain the above copyright
      9  * notice, this list of conditions and the following disclaimer.
     10  *
     11  * 2. Redistributions in binary form must reproduce the above
     12  * copyright notice, this list of conditions and the following disclaimer
     13  * in the documentation and/or other materials provided with the
     14  * distribution.
     15  *
     16  * THIS SOFTWARE IS PROVIDED BY GOOGLE INC. AND ITS CONTRIBUTORS
     17  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
     18  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
     19  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GOOGLE INC.
     20  * OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     21  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     22  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     23  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     24  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
     26  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     27  */
     28 
     29 #include "config.h"
     30 #include "modules/indexeddb/WebIDBCallbacksImpl.h"
     31 
     32 #include "core/dom/DOMError.h"
     33 #include "core/inspector/InspectorInstrumentation.h"
     34 #include "modules/indexeddb/IDBMetadata.h"
     35 #include "modules/indexeddb/IDBRequest.h"
     36 #include "platform/SharedBuffer.h"
     37 #include "public/platform/WebBlobInfo.h"
     38 #include "public/platform/WebData.h"
     39 #include "public/platform/WebIDBCursor.h"
     40 #include "public/platform/WebIDBDatabase.h"
     41 #include "public/platform/WebIDBDatabaseError.h"
     42 #include "public/platform/WebIDBKey.h"
     43 
     44 using blink::WebBlobInfo;
     45 using blink::WebData;
     46 using blink::WebIDBCursor;
     47 using blink::WebIDBDatabase;
     48 using blink::WebIDBDatabaseError;
     49 using blink::WebIDBIndex;
     50 using blink::WebIDBKey;
     51 using blink::WebIDBKeyPath;
     52 using blink::WebIDBMetadata;
     53 using blink::WebVector;
     54 
     55 namespace blink {
     56 
     57 // static
     58 PassOwnPtr<WebIDBCallbacksImpl> WebIDBCallbacksImpl::create(IDBRequest* request)
     59 {
     60     return adoptPtr(new WebIDBCallbacksImpl(request));
     61 }
     62 
     63 WebIDBCallbacksImpl::WebIDBCallbacksImpl(IDBRequest* request)
     64     : m_request(request)
     65 {
     66     m_asyncOperationId = InspectorInstrumentation::traceAsyncOperationStarting(m_request->executionContext(), "IndexedDB");
     67 }
     68 
     69 WebIDBCallbacksImpl::~WebIDBCallbacksImpl()
     70 {
     71     InspectorInstrumentation::traceAsyncOperationCompleted(m_request->executionContext(), m_asyncOperationId);
     72 }
     73 
     74 static PassOwnPtr<Vector<WebBlobInfo> > ConvertBlobInfo(const WebVector<WebBlobInfo>& webBlobInfo)
     75 {
     76     OwnPtr<Vector<WebBlobInfo> > blobInfo = adoptPtr(new Vector<WebBlobInfo>(webBlobInfo.size()));
     77     for (size_t i = 0; i < webBlobInfo.size(); ++i)
     78         (*blobInfo)[i] = webBlobInfo[i];
     79     return blobInfo.release();
     80 }
     81 
     82 void WebIDBCallbacksImpl::onError(const WebIDBDatabaseError& error)
     83 {
     84     InspectorInstrumentationCookie cookie = InspectorInstrumentation::traceAsyncCallbackStarting(m_request->executionContext(), m_asyncOperationId);
     85     m_request->onError(error);
     86     InspectorInstrumentation::traceAsyncCallbackCompleted(cookie);
     87 }
     88 
     89 void WebIDBCallbacksImpl::onSuccess(const WebVector<blink::WebString>& webStringList)
     90 {
     91     Vector<String> stringList;
     92     for (size_t i = 0; i < webStringList.size(); ++i)
     93         stringList.append(webStringList[i]);
     94     InspectorInstrumentationCookie cookie = InspectorInstrumentation::traceAsyncCallbackStarting(m_request->executionContext(), m_asyncOperationId);
     95     m_request->onSuccess(stringList);
     96     InspectorInstrumentation::traceAsyncCallbackCompleted(cookie);
     97 }
     98 
     99 void WebIDBCallbacksImpl::onSuccess(WebIDBCursor* cursor, const WebIDBKey& key, const WebIDBKey& primaryKey, const WebData& value, const WebVector<WebBlobInfo>& webBlobInfo)
    100 {
    101     InspectorInstrumentationCookie cookie = InspectorInstrumentation::traceAsyncCallbackStarting(m_request->executionContext(), m_asyncOperationId);
    102     m_request->onSuccess(adoptPtr(cursor), key, primaryKey, value, ConvertBlobInfo(webBlobInfo));
    103     InspectorInstrumentation::traceAsyncCallbackCompleted(cookie);
    104 }
    105 
    106 void WebIDBCallbacksImpl::onSuccess(WebIDBDatabase* backend, const WebIDBMetadata& metadata)
    107 {
    108     InspectorInstrumentationCookie cookie = InspectorInstrumentation::traceAsyncCallbackStarting(m_request->executionContext(), m_asyncOperationId);
    109     m_request->onSuccess(adoptPtr(backend), metadata);
    110     InspectorInstrumentation::traceAsyncCallbackCompleted(cookie);
    111 }
    112 
    113 void WebIDBCallbacksImpl::onSuccess(const WebIDBKey& key)
    114 {
    115     InspectorInstrumentationCookie cookie = InspectorInstrumentation::traceAsyncCallbackStarting(m_request->executionContext(), m_asyncOperationId);
    116     m_request->onSuccess(key);
    117     InspectorInstrumentation::traceAsyncCallbackCompleted(cookie);
    118 }
    119 
    120 void WebIDBCallbacksImpl::onSuccess(const WebData& value, const WebVector<WebBlobInfo>& webBlobInfo)
    121 {
    122     InspectorInstrumentationCookie cookie = InspectorInstrumentation::traceAsyncCallbackStarting(m_request->executionContext(), m_asyncOperationId);
    123     m_request->onSuccess(value, ConvertBlobInfo(webBlobInfo));
    124     InspectorInstrumentation::traceAsyncCallbackCompleted(cookie);
    125 }
    126 
    127 void WebIDBCallbacksImpl::onSuccess(const WebData& value, const WebVector<WebBlobInfo>& webBlobInfo, const WebIDBKey& key, const WebIDBKeyPath& keyPath)
    128 {
    129     InspectorInstrumentationCookie cookie = InspectorInstrumentation::traceAsyncCallbackStarting(m_request->executionContext(), m_asyncOperationId);
    130     m_request->onSuccess(value, ConvertBlobInfo(webBlobInfo), key, keyPath);
    131     InspectorInstrumentation::traceAsyncCallbackCompleted(cookie);
    132 }
    133 
    134 void WebIDBCallbacksImpl::onSuccess(long long value)
    135 {
    136     InspectorInstrumentationCookie cookie = InspectorInstrumentation::traceAsyncCallbackStarting(m_request->executionContext(), m_asyncOperationId);
    137     m_request->onSuccess(value);
    138     InspectorInstrumentation::traceAsyncCallbackCompleted(cookie);
    139 }
    140 
    141 void WebIDBCallbacksImpl::onSuccess()
    142 {
    143     InspectorInstrumentationCookie cookie = InspectorInstrumentation::traceAsyncCallbackStarting(m_request->executionContext(), m_asyncOperationId);
    144     m_request->onSuccess();
    145     InspectorInstrumentation::traceAsyncCallbackCompleted(cookie);
    146 }
    147 
    148 void WebIDBCallbacksImpl::onSuccess(const WebIDBKey& key, const WebIDBKey& primaryKey, const WebData& value, const WebVector<WebBlobInfo>& webBlobInfo)
    149 {
    150     InspectorInstrumentationCookie cookie = InspectorInstrumentation::traceAsyncCallbackStarting(m_request->executionContext(), m_asyncOperationId);
    151     m_request->onSuccess(key, primaryKey, value, ConvertBlobInfo(webBlobInfo));
    152     InspectorInstrumentation::traceAsyncCallbackCompleted(cookie);
    153 }
    154 
    155 void WebIDBCallbacksImpl::onBlocked(long long oldVersion)
    156 {
    157     InspectorInstrumentationCookie cookie = InspectorInstrumentation::traceAsyncCallbackStarting(m_request->executionContext(), m_asyncOperationId);
    158     m_request->onBlocked(oldVersion);
    159     InspectorInstrumentation::traceAsyncCallbackCompleted(cookie);
    160 }
    161 
    162 void WebIDBCallbacksImpl::onUpgradeNeeded(long long oldVersion, WebIDBDatabase* database, const WebIDBMetadata& metadata, unsigned short dataLoss, blink::WebString dataLossMessage)
    163 {
    164     InspectorInstrumentationCookie cookie = InspectorInstrumentation::traceAsyncCallbackStarting(m_request->executionContext(), m_asyncOperationId);
    165     m_request->onUpgradeNeeded(oldVersion, adoptPtr(database), metadata, static_cast<blink::WebIDBDataLoss>(dataLoss), dataLossMessage);
    166     InspectorInstrumentation::traceAsyncCallbackCompleted(cookie);
    167 }
    168 
    169 } // namespace blink
    170