OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2013 Google Inc. All rights reserved. | 2 * Copyright (C) 2013 Google Inc. All rights reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
6 * met: | 6 * met: |
7 * | 7 * |
8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
44 using namespace WebCore; | 44 using namespace WebCore; |
45 | 45 |
46 using blink::WebIDBDatabase; | 46 using blink::WebIDBDatabase; |
47 | 47 |
48 namespace { | 48 namespace { |
49 | 49 |
50 class IDBTransactionTest : public testing::Test { | 50 class IDBTransactionTest : public testing::Test { |
51 public: | 51 public: |
52 IDBTransactionTest() | 52 IDBTransactionTest() |
53 : m_scope(v8::Isolate::GetCurrent()) | 53 : m_scope(v8::Isolate::GetCurrent()) |
| 54 , m_executionContext(Document::create()) |
54 { | 55 { |
55 m_scope.scriptState()->setExecutionContext(Document::create()); | 56 m_scope.scriptState()->setExecutionContext(m_executionContext.get()); |
| 57 } |
| 58 |
| 59 ~IDBTransactionTest() |
| 60 { |
| 61 m_scope.scriptState()->setExecutionContext(0); |
56 } | 62 } |
57 | 63 |
58 v8::Isolate* isolate() const { return m_scope.isolate(); } | 64 v8::Isolate* isolate() const { return m_scope.isolate(); } |
59 ScriptState* scriptState() const { return m_scope.scriptState(); } | 65 ScriptState* scriptState() const { return m_scope.scriptState(); } |
60 ExecutionContext* executionContext() { return m_scope.scriptState()->executi
onContext(); } | 66 ExecutionContext* executionContext() { return m_scope.scriptState()->executi
onContext(); } |
61 | 67 |
62 private: | 68 private: |
63 V8TestingScope m_scope; | 69 V8TestingScope m_scope; |
| 70 RefPtr<ExecutionContext> m_executionContext; |
64 }; | 71 }; |
65 | 72 |
66 class FakeWebIDBDatabase FINAL : public blink::WebIDBDatabase { | 73 class FakeWebIDBDatabase FINAL : public blink::WebIDBDatabase { |
67 public: | 74 public: |
68 static PassOwnPtr<FakeWebIDBDatabase> create() { return adoptPtr(new FakeWeb
IDBDatabase()); } | 75 static PassOwnPtr<FakeWebIDBDatabase> create() { return adoptPtr(new FakeWeb
IDBDatabase()); } |
69 | 76 |
70 virtual void commit(long long transactionId) OVERRIDE { } | 77 virtual void commit(long long transactionId) OVERRIDE { } |
71 virtual void abort(long long transactionId) OVERRIDE { } | 78 virtual void abort(long long transactionId) OVERRIDE { } |
72 virtual void close() OVERRIDE { } | 79 virtual void close() OVERRIDE { } |
73 | 80 |
74 private: | 81 private: |
75 FakeWebIDBDatabase() { } | 82 FakeWebIDBDatabase() { } |
76 }; | 83 }; |
77 | 84 |
78 class FakeIDBDatabaseCallbacks FINAL : public IDBDatabaseCallbacks { | 85 class FakeIDBDatabaseCallbacks FINAL : public IDBDatabaseCallbacks { |
79 public: | 86 public: |
80 static FakeIDBDatabaseCallbacks* create() { return new FakeIDBDatabaseCallba
cks(); } | 87 static FakeIDBDatabaseCallbacks* create() { return new FakeIDBDatabaseCallba
cks(); } |
81 virtual void onVersionChange(int64_t oldVersion, int64_t newVersion) OVERRID
E { } | 88 virtual void onVersionChange(int64_t oldVersion, int64_t newVersion) OVERRID
E { } |
82 virtual void onForcedClose() OVERRIDE { } | 89 virtual void onForcedClose() OVERRIDE { } |
83 virtual void onAbort(int64_t transactionId, PassRefPtrWillBeRawPtr<DOMError>
error) OVERRIDE { } | 90 virtual void onAbort(int64_t transactionId, PassRefPtrWillBeRawPtr<DOMError>
error) OVERRIDE { } |
84 virtual void onComplete(int64_t transactionId) OVERRIDE { } | 91 virtual void onComplete(int64_t transactionId) OVERRIDE { } |
85 private: | 92 private: |
86 FakeIDBDatabaseCallbacks() { } | 93 FakeIDBDatabaseCallbacks() { } |
87 }; | 94 }; |
88 | 95 |
89 // crbug.com/379616 | 96 TEST_F(IDBTransactionTest, EnsureLifetime) |
90 #if ENABLE(OILPAN) | |
91 #define MAYBE_EnsureLifetime DISABLED_EnsureLifetime | |
92 #else | |
93 #define MAYBE_EnsureLifetime EnsureLifetime | |
94 #endif | |
95 TEST_F(IDBTransactionTest, MAYBE_EnsureLifetime) | |
96 { | 97 { |
97 OwnPtr<FakeWebIDBDatabase> backend = FakeWebIDBDatabase::create(); | 98 OwnPtr<FakeWebIDBDatabase> backend = FakeWebIDBDatabase::create(); |
98 Persistent<IDBDatabase> db = IDBDatabase::create(executionContext(), backend
.release(), FakeIDBDatabaseCallbacks::create()); | 99 Persistent<IDBDatabase> db = IDBDatabase::create(executionContext(), backend
.release(), FakeIDBDatabaseCallbacks::create()); |
99 | 100 |
100 const int64_t transactionId = 1234; | 101 const int64_t transactionId = 1234; |
101 const Vector<String> transactionScope; | 102 const Vector<String> transactionScope; |
102 Persistent<IDBTransaction> transaction = IDBTransaction::create(executionCon
text(), transactionId, transactionScope, blink::WebIDBDatabase::TransactionReadO
nly, db.get()); | 103 Persistent<IDBTransaction> transaction = IDBTransaction::create(executionCon
text(), transactionId, transactionScope, blink::WebIDBDatabase::TransactionReadO
nly, db.get()); |
103 PersistentHeapHashSet<WeakMember<IDBTransaction> > set; | 104 PersistentHeapHashSet<WeakMember<IDBTransaction> > set; |
104 set.add(transaction); | 105 set.add(transaction); |
105 | 106 |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
152 // Fire an abort to make sure this doesn't free the transaction during use.
The test | 153 // Fire an abort to make sure this doesn't free the transaction during use.
The test |
153 // will not fail if it is, but ASAN would notice the error. | 154 // will not fail if it is, but ASAN would notice the error. |
154 db->onAbort(transactionId, DOMError::create(AbortError, "Aborted")); | 155 db->onAbort(transactionId, DOMError::create(AbortError, "Aborted")); |
155 | 156 |
156 // onAbort() should have cleared the transaction's reference to the database
. | 157 // onAbort() should have cleared the transaction's reference to the database
. |
157 Heap::collectAllGarbage(); | 158 Heap::collectAllGarbage(); |
158 EXPECT_EQ(0u, set.size()); | 159 EXPECT_EQ(0u, set.size()); |
159 } | 160 } |
160 | 161 |
161 } // namespace | 162 } // namespace |
OLD | NEW |