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

Side by Side Diff: chrome/browser/media_gallery/linux/open_mtp_storage_worker.cc

Issue 11348337: Move MTPDeviceDelegateImplLinux worker classes to its own files. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: '' Created 8 years 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 | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright (c) 2012 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 // OpenMTPStorageWorker implementation.
6
7 #include "chrome/browser/media_gallery/linux/open_mtp_storage_worker.h"
8
9 #include "base/bind.h"
10 #include "base/logging.h"
11 #include "base/sequenced_task_runner.h"
12 #include "base/synchronization/waitable_event.h"
13 #include "chrome/browser/media_transfer_protocol/media_transfer_protocol_manager .h"
14 #include "content/public/browser/browser_thread.h"
15 #include "third_party/cros_system_api/dbus/service_constants.h"
16
17 namespace chrome {
18
19 OpenMTPStorageWorker::OpenMTPStorageWorker(
20 const std::string& name,
21 base::SequencedTaskRunner* task_runner,
22 base::WaitableEvent* task_completed_event,
23 base::WaitableEvent* shutdown_event)
24 : storage_name_(name),
25 media_task_runner_(task_runner),
26 on_task_completed_event_(task_completed_event),
27 on_shutdown_event_(shutdown_event) {
28 DCHECK(on_task_completed_event_);
29 DCHECK(on_shutdown_event_);
30 }
31
32 void OpenMTPStorageWorker::Run() {
33 if (on_shutdown_event_->IsSignaled()) {
34 // Process is in shutdown mode.
35 // Do not post any task on |media_task_runner_|.
36 return;
37 }
38
39 DCHECK(media_task_runner_->RunsTasksOnCurrentThread());
40 content::BrowserThread::PostTask(
41 content::BrowserThread::UI, FROM_HERE,
42 base::Bind(&OpenMTPStorageWorker::DoWorkOnUIThread, this));
43 on_task_completed_event_->Wait();
44
45 if (on_shutdown_event_->IsSignaled())
46 cancel_tasks_flag_.Set();
47 }
48
49 OpenMTPStorageWorker::~OpenMTPStorageWorker() {
50 // This object must be destructed on |media_task_runner_|.
51 }
52
53 void OpenMTPStorageWorker::DoWorkOnUIThread() {
54 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
55 if (cancel_tasks_flag_.IsSet())
56 return;
57
58 GetMediaTransferProtocolManager()->OpenStorage(
59 storage_name_, mtpd::kReadOnlyMode,
60 base::Bind(&OpenMTPStorageWorker::OnDidWorkOnUIThread, this));
61 }
62
63 void OpenMTPStorageWorker::OnDidWorkOnUIThread(const std::string& device_handle,
64 bool error) {
65 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
66 if (cancel_tasks_flag_.IsSet())
67 return;
68
69 if (!error)
70 device_handle_ = device_handle;
71 on_task_completed_event_->Signal();
72 }
73
74 } // namespace chrome
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698