Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(28)

Side by Side Diff: third_party/WebKit/Source/modules/indexeddb/WebIDBDatabaseCallbacksImpl.cpp

Issue 2370643004: Port messages sent by WebIDBFactoryImpl to Mojo. (Closed)
Patch Set: Allow cpp_only to be set by the invoker. Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2011 Google Inc. All rights reserved. 2 * Copyright (C) 2011 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 5 * modification, are permitted provided that the following conditions
6 * are met: 6 * are met:
7 * 7 *
8 * 1. Redistributions of source code must retain the above copyright 8 * 1. 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 * 2. Redistributions in binary form must reproduce the above copyright 10 * 2. Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in the 11 * notice, this list of conditions and the following disclaimer in the
12 * documentation and/or other materials provided with the distribution. 12 * documentation and/or other materials provided with the distribution.
13 * 13 *
14 * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY 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 15 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
16 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 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 17 * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
18 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 18 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
19 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 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 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 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 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. 23 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24 */ 24 */
25 25
26 #include "modules/indexeddb/WebIDBDatabaseCallbacksImpl.h" 26 #include "modules/indexeddb/WebIDBDatabaseCallbacksImpl.h"
27 27
28 #include "core/dom/DOMException.h" 28 #include "core/dom/DOMException.h"
29 #include "wtf/PtrUtil.h" 29 #include "wtf/PtrUtil.h"
30 #include "wtf/ThreadSpecific.h"
30 #include <memory> 31 #include <memory>
31 32
32 namespace blink { 33 namespace blink {
33 34
35 // This thread-specific list keeps track of instances of
36 // WebIDBDatabaseCallbacksImpl created by each thread. If a thread exits
37 // before they are destroyed then they would otherwise be leaked because the IO
38 // thread can no longer post a task to the thread on which they were created.
39 typedef std::vector<std::unique_ptr<WebIDBDatabaseCallbacksImpl>> CallbacksList;
40 static ThreadSpecific<CallbacksList>& outstandingCallbacks()
41 {
42 DEFINE_THREAD_SAFE_STATIC_LOCAL(ThreadSpecific<CallbacksList>, callbacks, ne w ThreadSpecific<CallbacksList>);
43 return callbacks;
44 }
45
34 // static 46 // static
35 std::unique_ptr<WebIDBDatabaseCallbacksImpl> WebIDBDatabaseCallbacksImpl::create (IDBDatabaseCallbacks* callbacks) 47 std::unique_ptr<WebIDBDatabaseCallbacksImpl> WebIDBDatabaseCallbacksImpl::create (IDBDatabaseCallbacks* callbacks)
36 { 48 {
37 return wrapUnique(new WebIDBDatabaseCallbacksImpl(callbacks)); 49 return wrapUnique(new WebIDBDatabaseCallbacksImpl(callbacks));
38 } 50 }
39 51
40 WebIDBDatabaseCallbacksImpl::WebIDBDatabaseCallbacksImpl(IDBDatabaseCallbacks* c allbacks) 52 WebIDBDatabaseCallbacksImpl::WebIDBDatabaseCallbacksImpl(IDBDatabaseCallbacks* c allbacks)
41 : m_callbacks(callbacks) 53 : m_callbacks(callbacks)
42 { 54 {
55 outstandingCallbacks()->push_back(wrapUnique(this));
43 } 56 }
44 57
45 WebIDBDatabaseCallbacksImpl::~WebIDBDatabaseCallbacksImpl() 58 WebIDBDatabaseCallbacksImpl::~WebIDBDatabaseCallbacksImpl()
46 { 59 {
60 if (m_callbacks)
61 m_callbacks->webCallbacksDestroyed();
62
63 CallbacksList& callbacks = *outstandingCallbacks();
64 auto it = std::find_if(
65 callbacks.begin(), callbacks.end(),
66 [this](const std::unique_ptr<WebIDBDatabaseCallbacksImpl>& element)
67 {
68 return element.get() == this;
69 });
70 if (it != callbacks.end()) {
71 it->release();
72 callbacks.erase(it);
73 }
47 } 74 }
48 75
49 void WebIDBDatabaseCallbacksImpl::onForcedClose() 76 void WebIDBDatabaseCallbacksImpl::onForcedClose()
50 { 77 {
51 m_callbacks->onForcedClose(); 78 if (m_callbacks)
79 m_callbacks->onForcedClose();
52 } 80 }
53 81
54 void WebIDBDatabaseCallbacksImpl::onVersionChange(long long oldVersion, long lon g newVersion) 82 void WebIDBDatabaseCallbacksImpl::onVersionChange(long long oldVersion, long lon g newVersion)
55 { 83 {
56 m_callbacks->onVersionChange(oldVersion, newVersion); 84 if (m_callbacks)
85 m_callbacks->onVersionChange(oldVersion, newVersion);
57 } 86 }
58 87
59 void WebIDBDatabaseCallbacksImpl::onAbort(long long transactionId, const WebIDBD atabaseError& error) 88 void WebIDBDatabaseCallbacksImpl::onAbort(long long transactionId, const WebIDBD atabaseError& error)
60 { 89 {
61 m_callbacks->onAbort(transactionId, DOMException::create(error.code(), error .message())); 90 if (m_callbacks)
91 m_callbacks->onAbort(transactionId, DOMException::create(error.code(), e rror.message()));
62 } 92 }
63 93
64 void WebIDBDatabaseCallbacksImpl::onComplete(long long transactionId) 94 void WebIDBDatabaseCallbacksImpl::onComplete(long long transactionId)
65 { 95 {
66 m_callbacks->onComplete(transactionId); 96 if (m_callbacks)
97 m_callbacks->onComplete(transactionId);
98 }
99
100 void WebIDBDatabaseCallbacksImpl::detach()
101 {
102 m_callbacks.clear();
67 } 103 }
68 104
69 } // namespace blink 105 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698