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

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

Issue 2370643004: Port messages sent by WebIDBFactoryImpl to Mojo. (Closed)
Patch Set: Require explicit wrapping when discarding map keys. 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 using CallbacksList = std::vector<std::unique_ptr<WebIDBDatabaseCallbacksImpl>>;
40 static ThreadSpecific<CallbacksList>& outstandingCallbacks() {
41 DEFINE_THREAD_SAFE_STATIC_LOCAL(ThreadSpecific<CallbacksList>, callbacks,
42 new ThreadSpecific<CallbacksList>);
43 return callbacks;
44 }
45
34 // static 46 // static
35 std::unique_ptr<WebIDBDatabaseCallbacksImpl> 47 std::unique_ptr<WebIDBDatabaseCallbacksImpl>
36 WebIDBDatabaseCallbacksImpl::create(IDBDatabaseCallbacks* callbacks) { 48 WebIDBDatabaseCallbacksImpl::create(IDBDatabaseCallbacks* callbacks) {
37 return wrapUnique(new WebIDBDatabaseCallbacksImpl(callbacks)); 49 return wrapUnique(new WebIDBDatabaseCallbacksImpl(callbacks));
38 } 50 }
39 51
40 WebIDBDatabaseCallbacksImpl::WebIDBDatabaseCallbacksImpl( 52 WebIDBDatabaseCallbacksImpl::WebIDBDatabaseCallbacksImpl(
41 IDBDatabaseCallbacks* callbacks) 53 IDBDatabaseCallbacks* callbacks)
42 : m_callbacks(callbacks) {} 54 : m_callbacks(callbacks) {
55 outstandingCallbacks()->push_back(wrapUnique(this));
56 }
43 57
44 WebIDBDatabaseCallbacksImpl::~WebIDBDatabaseCallbacksImpl() {} 58 WebIDBDatabaseCallbacksImpl::~WebIDBDatabaseCallbacksImpl() {
haraken 2016/10/18 19:01:29 Maybe we want to share the code with WebIDBCallbac
Reilly Grant (use Gerrit) 2016/10/19 00:36:51 I've moved this logic into IndexedDBDispatcher whe
59 if (m_callbacks)
60 m_callbacks->webCallbacksDestroyed();
61
62 CallbacksList& callbacks = *outstandingCallbacks();
63 auto it = std::find_if(
64 callbacks.begin(), callbacks.end(),
65 [this](const std::unique_ptr<WebIDBDatabaseCallbacksImpl>& element) {
66 return element.get() == this;
67 });
68 if (it != callbacks.end()) {
69 it->release();
70 callbacks.erase(it);
71 }
72 }
45 73
46 void WebIDBDatabaseCallbacksImpl::onForcedClose() { 74 void WebIDBDatabaseCallbacksImpl::onForcedClose() {
47 m_callbacks->onForcedClose(); 75 if (m_callbacks)
76 m_callbacks->onForcedClose();
48 } 77 }
49 78
50 void WebIDBDatabaseCallbacksImpl::onVersionChange(long long oldVersion, 79 void WebIDBDatabaseCallbacksImpl::onVersionChange(long long oldVersion,
51 long long newVersion) { 80 long long newVersion) {
52 m_callbacks->onVersionChange(oldVersion, newVersion); 81 if (m_callbacks)
82 m_callbacks->onVersionChange(oldVersion, newVersion);
53 } 83 }
54 84
55 void WebIDBDatabaseCallbacksImpl::onAbort(long long transactionId, 85 void WebIDBDatabaseCallbacksImpl::onAbort(long long transactionId,
56 const WebIDBDatabaseError& error) { 86 const WebIDBDatabaseError& error) {
57 m_callbacks->onAbort(transactionId, 87 if (m_callbacks) {
58 DOMException::create(error.code(), error.message())); 88 m_callbacks->onAbort(transactionId,
89 DOMException::create(error.code(), error.message()));
90 }
59 } 91 }
60 92
61 void WebIDBDatabaseCallbacksImpl::onComplete(long long transactionId) { 93 void WebIDBDatabaseCallbacksImpl::onComplete(long long transactionId) {
62 m_callbacks->onComplete(transactionId); 94 if (m_callbacks)
95 m_callbacks->onComplete(transactionId);
96 }
97
98 void WebIDBDatabaseCallbacksImpl::detach() {
99 m_callbacks.clear();
63 } 100 }
64 101
65 } // namespace blink 102 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698