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

Side by Side Diff: components/profile_service/leveldb_thread.cc

Issue 1737933002: mojo leveldb: Get profile and leveldb connected to DOMStorageContext. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Remove stale todo comment Created 4 years, 9 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
(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 "components/profile_service/leveldb_thread.h"
6
7 #include "base/bind.h"
8 #include "base/message_loop/message_loop.h"
9 #include "components/leveldb/leveldb_service_impl.h"
10 #include "mojo/message_pump/message_pump_mojo.h"
11
12 namespace profile {
13
14 LevelDBThread::LevelDBThread(
15 scoped_ptr<mojo::MessageLoopRef> message_loop_ref,
16 leveldb::LevelDBServiceRequest request)
17 : base::Thread("profile/LevelDBThread"),
18 profile_service_message_loop_ref_(std::move(message_loop_ref)),
19 initial_leveldb_request_(std::move(request)) {
20 base::Thread::Options options;
21 options.message_pump_factory =
22 base::Bind(&mojo::common::MessagePumpMojo::Create);
23 StartWithOptions(options);
24 }
25
26 LevelDBThread::~LevelDBThread() {}
27
28 void LevelDBThread::OnServiceError() {
29 if (leveldb_bindings_->empty()) {
30 // We have released the last leveldb service holding on to our reference;
31 // release our service and bindings. We need to do this on connection error
32 // so that it happens on our db thread and not our parent thread.
33 leveldb_service_.reset();
34 leveldb_bindings_.reset();
35 }
36 }
37
38 void LevelDBThread::BindNewRequest(leveldb::LevelDBServiceRequest request) {
39 DCHECK_NE(GetThreadId(), base::PlatformThread::CurrentId());
40 task_runner()->PostTask(
41 FROM_HERE, base::Bind(&LevelDBThread::BindNewRequestImpl, this,
42 base::Passed(&request)));
43 }
44
45 void LevelDBThread::BindNewRequestImpl(leveldb::LevelDBServiceRequest request) {
46 DCHECK_EQ(GetThreadId(), base::PlatformThread::CurrentId());
47 DCHECK(leveldb_service_);
48 leveldb_bindings_->AddBinding(leveldb_service_.get(), std::move(request));
49 }
50
51 void LevelDBThread::Init() {
52 leveldb_service_.reset(new leveldb::LevelDBServiceImpl(
53 thread_message_loop_ref_.CreateRef()));
54 leveldb_bindings_.reset(new mojo::BindingSet<leveldb::LevelDBService>);
55 leveldb_bindings_->set_connection_error_handler(
56 base::Bind(&LevelDBThread::OnServiceError, base::Unretained(this)));
57 leveldb_bindings_->AddBinding(leveldb_service_.get(),
58 std::move(initial_leveldb_request_));
59 }
60
61 void LevelDBThread::CleanUp() {
62 profile_service_message_loop_ref_.reset();
63 }
64
65 } // namespace profile
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698