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

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

Issue 11348337: Move MTPDeviceDelegateImplLinux worker classes to its own files. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Addressed review comments 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 #include "chrome/browser/media_gallery/linux/mtp_read_directory_worker.h"
6
7 #include "base/bind.h"
8 #include "base/sequenced_task_runner.h"
9 #include "base/synchronization/waitable_event.h"
10 #include "chrome/browser/media_transfer_protocol/media_transfer_protocol_manager .h"
11 #include "content/public/browser/browser_thread.h"
12
13 namespace chrome {
14
15 using content::BrowserThread;
16
17 MTPReadDirectoryWorker::MTPReadDirectoryWorker(
18 const std::string& handle,
19 const std::string& path,
20 base::SequencedTaskRunner* task_runner,
21 base::WaitableEvent* task_completed_event,
22 base::WaitableEvent* shutdown_event)
23 : device_handle_(handle),
24 dir_path_(path),
25 dir_entry_id_(0),
26 media_task_runner_(task_runner),
27 on_task_completed_event_(task_completed_event),
28 on_shutdown_event_(shutdown_event) {
29 DCHECK(!dir_path_.empty());
30 DCHECK(on_task_completed_event_);
31 DCHECK(on_shutdown_event_);
32 }
33
34 MTPReadDirectoryWorker::MTPReadDirectoryWorker(
35 const std::string& storage_name,
36 const uint32_t entry_id,
37 base::SequencedTaskRunner* task_runner,
38 base::WaitableEvent* task_completed_event,
39 base::WaitableEvent* shutdown_event)
40 : device_handle_(storage_name),
41 dir_entry_id_(entry_id),
42 media_task_runner_(task_runner),
43 on_task_completed_event_(task_completed_event),
44 on_shutdown_event_(shutdown_event) {
45 DCHECK(on_task_completed_event_);
46 DCHECK(on_shutdown_event_);
47 }
48
49 void MTPReadDirectoryWorker::Run() {
50 if (on_shutdown_event_->IsSignaled()) {
51 // Process is in shutdown mode.
52 // Do not post any task on |media_task_runner_|.
53 return;
54 }
55
56 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
57 base::Bind(&MTPReadDirectoryWorker::DoWorkOnUIThread,
58 this));
59 on_task_completed_event_->Wait();
60 if (on_shutdown_event_->IsSignaled())
61 cancel_tasks_flag_.Set();
62 }
63
64 MTPReadDirectoryWorker::~MTPReadDirectoryWorker() {
65 // This object must be destructed on |media_task_runner_|.
66 }
67
68 void MTPReadDirectoryWorker::DoWorkOnUIThread() {
69 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
70 if (cancel_tasks_flag_.IsSet())
71 return;
72
73 if (!dir_path_.empty()) {
74 GetMediaTransferProtocolManager()->ReadDirectoryByPath(
75 device_handle_, dir_path_,
76 base::Bind(&MTPReadDirectoryWorker::OnDidWorkOnUIThread, this));
77 } else {
78 GetMediaTransferProtocolManager()->ReadDirectoryById(
79 device_handle_, dir_entry_id_,
80 base::Bind(&MTPReadDirectoryWorker::OnDidWorkOnUIThread, this));
81 }
82 }
83
84 void MTPReadDirectoryWorker::OnDidWorkOnUIThread(
85 const std::vector<MtpFileEntry>& file_entries,
86 bool error) {
87 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
88 if (cancel_tasks_flag_.IsSet())
89 return;
90
91 if (!error)
92 file_entries_ = file_entries;
93 on_task_completed_event_->Signal();
94 }
95
96 } // namespace chrome
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698