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

Side by Side Diff: content/browser/indexed_db/cursor_impl.cc

Issue 2500263003: Port messages sent by WebIDBCursorImpl to Mojo. (Closed)
Patch Set: Address yzshen@'s comments and fix leak. Created 4 years, 1 month 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
(Empty)
1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "content/browser/indexed_db/cursor_impl.h"
6
7 #include "content/browser/indexed_db/indexed_db_callbacks.h"
8 #include "content/browser/indexed_db/indexed_db_cursor.h"
9 #include "content/browser/indexed_db/indexed_db_dispatcher_host.h"
10
11 namespace content {
12
13 class CursorImpl::IDBThreadHelper {
14 public:
15 explicit IDBThreadHelper(scoped_refptr<IndexedDBCursor> cursor);
16 ~IDBThreadHelper();
17
18 void Advance(uint32_t count, scoped_refptr<IndexedDBCallbacks> callbacks);
19 void Continue(const IndexedDBKey& key,
20 const IndexedDBKey& primary_key,
21 scoped_refptr<IndexedDBCallbacks> callbacks);
22 void Prefetch(int32_t count, scoped_refptr<IndexedDBCallbacks> callbacks);
23 void PrefetchReset(int32_t used_prefetches, int32_t unused_prefetches);
24
25 private:
26 scoped_refptr<IndexedDBDispatcherHost> dispatcher_host_;
27 scoped_refptr<IndexedDBCursor> cursor_;
28 const url::Origin origin_;
29
30 DISALLOW_COPY_AND_ASSIGN(IDBThreadHelper);
31 };
32
33 CursorImpl::CursorImpl(scoped_refptr<IndexedDBCursor> cursor,
34 const url::Origin& origin,
35 scoped_refptr<IndexedDBDispatcherHost> dispatcher_host)
36 : helper_(new IDBThreadHelper(std::move(cursor))),
37 dispatcher_host_(dispatcher_host),
dcheng 2016/11/17 03:46:23 Nit: std::move()
Reilly Grant (use Gerrit) 2016/11/17 20:04:52 Done.
38 origin_(origin),
39 idb_runner_(base::ThreadTaskRunnerHandle::Get()) {}
40
41 CursorImpl::~CursorImpl() {
42 idb_runner_->DeleteSoon(FROM_HERE, helper_);
43 }
44
45 void CursorImpl::Advance(
46 uint32_t count,
47 ::indexed_db::mojom::CallbacksAssociatedPtrInfo callbacks_info) {
48 scoped_refptr<IndexedDBCallbacks> callbacks(new IndexedDBCallbacks(
49 dispatcher_host_.get(), origin_, std::move(callbacks_info)));
50 idb_runner_->PostTask(FROM_HERE, base::Bind(&IDBThreadHelper::Advance,
51 base::Unretained(helper_), count,
52 base::Passed(&callbacks)));
53 }
54
55 void CursorImpl::Continue(
56 const IndexedDBKey& key,
57 const IndexedDBKey& primary_key,
58 ::indexed_db::mojom::CallbacksAssociatedPtrInfo callbacks_info) {
59 scoped_refptr<IndexedDBCallbacks> callbacks(new IndexedDBCallbacks(
60 dispatcher_host_.get(), origin_, std::move(callbacks_info)));
61 idb_runner_->PostTask(
62 FROM_HERE,
63 base::Bind(&IDBThreadHelper::Continue, base::Unretained(helper_), key,
64 primary_key, base::Passed(&callbacks)));
65 }
66
67 void CursorImpl::Prefetch(
68 int32_t count,
69 ::indexed_db::mojom::CallbacksAssociatedPtrInfo callbacks_info) {
70 scoped_refptr<IndexedDBCallbacks> callbacks(new IndexedDBCallbacks(
71 dispatcher_host_.get(), origin_, std::move(callbacks_info)));
72 idb_runner_->PostTask(FROM_HERE, base::Bind(&IDBThreadHelper::Prefetch,
73 base::Unretained(helper_), count,
74 base::Passed(&callbacks)));
75 }
76
77 void CursorImpl::PrefetchReset(
78 int32_t used_prefetches,
79 int32_t unused_prefetches,
80 const std::vector<std::string>& unused_blob_uuids) {
81 for (const auto& uuid : unused_blob_uuids)
82 dispatcher_host_->DropBlobData(uuid);
83
84 idb_runner_->PostTask(
85 FROM_HERE,
86 base::Bind(&IDBThreadHelper::PrefetchReset, base::Unretained(helper_),
87 used_prefetches, unused_prefetches));
88 }
89
90 CursorImpl::IDBThreadHelper::IDBThreadHelper(
91 scoped_refptr<IndexedDBCursor> cursor)
92 : cursor_(std::move(cursor)) {}
93
94 CursorImpl::IDBThreadHelper::~IDBThreadHelper() {}
95
96 void CursorImpl::IDBThreadHelper::Advance(
97 uint32_t count,
98 scoped_refptr<IndexedDBCallbacks> callbacks) {
99 cursor_->Advance(count, callbacks);
dcheng 2016/11/17 03:46:23 Nit: std::move()
Reilly Grant (use Gerrit) 2016/11/17 20:04:51 Done.
100 }
101
102 void CursorImpl::IDBThreadHelper::Continue(
103 const IndexedDBKey& key,
104 const IndexedDBKey& primary_key,
105 scoped_refptr<IndexedDBCallbacks> callbacks) {
106 cursor_->Continue(
107 key.IsValid() ? base::MakeUnique<IndexedDBKey>(key) : nullptr,
108 primary_key.IsValid() ? base::MakeUnique<IndexedDBKey>(primary_key)
109 : nullptr,
110 callbacks);
dcheng 2016/11/17 03:46:23 Nit: std::move()
Reilly Grant (use Gerrit) 2016/11/17 20:04:52 Done.
111 }
112
113 void CursorImpl::IDBThreadHelper::Prefetch(
114 int32_t count,
115 scoped_refptr<IndexedDBCallbacks> callbacks) {
116 cursor_->PrefetchContinue(count, callbacks);
Reilly Grant (use Gerrit) 2016/11/17 20:04:51 Done here too. :)
117 }
118
119 void CursorImpl::IDBThreadHelper::PrefetchReset(int32_t used_prefetches,
120 int32_t unused_prefetches) {
121 leveldb::Status s =
122 cursor_->PrefetchReset(used_prefetches, unused_prefetches);
123 // TODO(cmumford): Handle this error (crbug.com/363397)
124 if (!s.ok())
125 DLOG(ERROR) << "Unable to reset prefetch";
126 }
127
128 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698