2
* Copyright (C) 2012 Google Inc. All rights reserved.
4
* Redistribution and use in source and binary forms, with or without
5
* modification, are permitted provided that the following conditions
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.
14
* THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
15
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
16
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
17
* DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
18
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
19
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
20
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
21
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
23
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
#include "IDBRequest.h"
30
#include "DOMStringList.h"
33
#include "FrameTestHelpers.h"
34
#include "IDBCursorBackendInterface.h"
35
#include "IDBDatabaseBackendImpl.h"
36
#include "IDBTransactionCoordinator.h"
38
#include "WebFrameImpl.h"
41
#include <gtest/gtest.h>
43
#if ENABLE(INDEXED_DATABASE)
45
using namespace WebCore;
46
using namespace WebKit;
50
class IDBRequestTest : public testing::Test {
59
m_webView = FrameTestHelpers::createWebViewAndLoad("about:blank");
60
m_webView->setFocus(true);
63
void TearDown() OVERRIDE
68
v8::Handle<v8::Context> context()
70
return static_cast<WebFrameImpl*>(m_webView->mainFrame())->frame()->script()->mainWorldContext();
73
ScriptExecutionContext* scriptExecutionContext()
75
return static_cast<WebFrameImpl*>(m_webView->mainFrame())->frame()->document();
82
TEST_F(IDBRequestTest, EventsAfterStopping)
84
v8::HandleScope handleScope;
85
v8::Context::Scope scope(context());
87
IDBTransaction* transaction = 0;
88
RefPtr<IDBRequest> request = IDBRequest::create(scriptExecutionContext(), IDBAny::createInvalid(), transaction);
89
EXPECT_EQ(request->readyState(), "pending");
92
// Ensure none of the following raise assertions in stopped state:
93
request->onError(IDBDatabaseError::create(IDBDatabaseException::IDB_ABORT_ERR, "Description goes here."));
94
request->onSuccess(DOMStringList::create());
95
request->onSuccess(PassRefPtr<IDBCursorBackendInterface>(), IDBKey::createInvalid(), IDBKey::createInvalid(), SerializedScriptValue::nullValue());
96
request->onSuccess(IDBKey::createInvalid());
97
request->onSuccess(SerializedScriptValue::nullValue());
98
request->onSuccess(SerializedScriptValue::nullValue(), IDBKey::createInvalid(), IDBKeyPath());
99
request->onSuccess(IDBKey::createInvalid(), IDBKey::createInvalid(), SerializedScriptValue::nullValue());
102
TEST_F(IDBRequestTest, AbortErrorAfterAbort)
104
v8::HandleScope handleScope;
105
v8::Context::Scope scope(context());
107
IDBTransaction* transaction = 0;
108
RefPtr<IDBRequest> request = IDBRequest::create(scriptExecutionContext(), IDBAny::createInvalid(), transaction);
109
EXPECT_EQ(request->readyState(), "pending");
111
// Simulate the IDBTransaction having received onAbort from back end and aborting the request:
114
// Now simulate the back end having fired an abort error at the request to clear up any intermediaries.
115
// Ensure an assertion is not raised.
116
request->onError(IDBDatabaseError::create(IDBDatabaseException::IDB_ABORT_ERR, "Description goes here."));
121
#endif // ENABLE(INDEXED_DATABASE)