WinCairo build fails to link.
[WebKit-https.git] / Source / WebKit / chromium / tests / IDBRequestTest.cpp
1 /*
2  * Copyright (C) 2012 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  *
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.
24  */
25
26 #include "config.h"
27
28 #include "IDBRequest.h"
29
30 #include "DOMStringList.h"
31 #include "Document.h"
32 #include "Frame.h"
33 #include "FrameTestHelpers.h"
34 #include "IDBCursorBackendInterface.h"
35 #include "IDBDatabaseBackendImpl.h"
36 #include "IDBTransactionCoordinator.h"
37 #include "WebFrame.h"
38 #include "WebFrameImpl.h"
39 #include "WebView.h"
40
41 #include <gtest/gtest.h>
42
43 #if ENABLE(INDEXED_DATABASE)
44
45 using namespace WebCore;
46 using namespace WebKit;
47
48 namespace {
49
50 class IDBRequestTest : public testing::Test {
51 public:
52     IDBRequestTest()
53         : m_webView(0)
54     {
55     }
56
57     void SetUp() OVERRIDE
58     {
59         m_webView = FrameTestHelpers::createWebViewAndLoad("about:blank");
60         m_webView->setFocus(true);
61     }
62
63     void TearDown() OVERRIDE
64     {
65         m_webView->close();
66     }
67
68     v8::Handle<v8::Context> context()
69     {
70         return static_cast<WebFrameImpl*>(m_webView->mainFrame())->frame()->script()->mainWorldContext();
71     }
72
73     ScriptExecutionContext* scriptExecutionContext()
74     {
75         return static_cast<WebFrameImpl*>(m_webView->mainFrame())->frame()->document();
76     }
77
78 private:
79     WebView* m_webView;
80 };
81
82 TEST_F(IDBRequestTest, EventsAfterStopping)
83 {
84     v8::HandleScope handleScope;
85     v8::Context::Scope scope(context());
86
87     IDBTransaction* transaction = 0;
88     RefPtr<IDBRequest> request = IDBRequest::create(scriptExecutionContext(), IDBAny::createInvalid(), transaction);
89     EXPECT_EQ(request->readyState(), "pending");
90     request->stop();
91
92     // Ensure none of the following raise assertions in stopped state:
93     request->onError(IDBDatabaseError::create(IDBDatabaseException::AbortError, "Description goes here."));
94     request->onSuccess(DOMStringList::create());
95     request->onSuccess(PassRefPtr<IDBCursorBackendInterface>(), IDBKey::createInvalid(), IDBKey::createInvalid(), 0);
96     request->onSuccess(IDBKey::createInvalid());
97     request->onSuccess(PassRefPtr<SharedBuffer>(0));
98     request->onSuccess(PassRefPtr<SharedBuffer>(0), IDBKey::createInvalid(), IDBKeyPath());
99     request->onSuccess(0LL);
100     request->onSuccess();
101     request->onSuccess(IDBKey::createInvalid(), IDBKey::createInvalid(), 0);
102 }
103
104 TEST_F(IDBRequestTest, AbortErrorAfterAbort)
105 {
106     v8::HandleScope handleScope;
107     v8::Context::Scope scope(context());
108
109     IDBTransaction* transaction = 0;
110     RefPtr<IDBRequest> request = IDBRequest::create(scriptExecutionContext(), IDBAny::createInvalid(), transaction);
111     EXPECT_EQ(request->readyState(), "pending");
112
113     // Simulate the IDBTransaction having received onAbort from back end and aborting the request:
114     request->abort();
115
116     // Now simulate the back end having fired an abort error at the request to clear up any intermediaries.
117     // Ensure an assertion is not raised.
118     request->onError(IDBDatabaseError::create(IDBDatabaseException::AbortError, "Description goes here."));
119 }
120
121 } // namespace
122
123 #endif // ENABLE(INDEXED_DATABASE)