summaryrefslogtreecommitdiffstats
path: root/device/media_transfer_protocol
diff options
context:
space:
mode:
authorkmadhusu@chromium.org <kmadhusu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-02-01 03:53:57 +0000
committerkmadhusu@chromium.org <kmadhusu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-02-01 03:53:57 +0000
commit184a2643cf0b7111cab9f602dde92ffa3d899e4b (patch)
tree9f2d943ee82f32b2a78e657ba8e4959e1516e38b /device/media_transfer_protocol
parent535a5cfc99aa98b005ae6357123024c5d73feda8 (diff)
downloadchromium_src-184a2643cf0b7111cab9f602dde92ffa3d899e4b.zip
chromium_src-184a2643cf0b7111cab9f602dde92ffa3d899e4b.tar.gz
chromium_src-184a2643cf0b7111cab9f602dde92ffa3d899e4b.tar.bz2
Remove 'content' dependency from device/media_transfer_protocol.
BUG=171742 TEST=none Review URL: https://chromiumcodereview.appspot.com/12092074 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@180065 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'device/media_transfer_protocol')
-rw-r--r--device/media_transfer_protocol/DEPS1
-rw-r--r--device/media_transfer_protocol/media_transfer_protocol_manager.cc56
-rw-r--r--device/media_transfer_protocol/media_transfer_protocol_manager.h11
3 files changed, 46 insertions, 22 deletions
diff --git a/device/media_transfer_protocol/DEPS b/device/media_transfer_protocol/DEPS
index 2708b71..b9845a3 100644
--- a/device/media_transfer_protocol/DEPS
+++ b/device/media_transfer_protocol/DEPS
@@ -2,6 +2,5 @@ include_rules = [
# The media transfer protocol daemon uses D-Bus.
"+dbus",
"+chromeos/dbus",
- "+content/public/browser/browser_thread.h",
"+third_party/cros_system_api/dbus",
]
diff --git a/device/media_transfer_protocol/media_transfer_protocol_manager.cc b/device/media_transfer_protocol/media_transfer_protocol_manager.cc
index 6b87b2e..5ca58f6 100644
--- a/device/media_transfer_protocol/media_transfer_protocol_manager.cc
+++ b/device/media_transfer_protocol/media_transfer_protocol_manager.cc
@@ -12,9 +12,10 @@
#include "base/bind.h"
#include "base/command_line.h"
#include "base/memory/weak_ptr.h"
+#include "base/message_loop_proxy.h"
#include "base/observer_list.h"
#include "base/stl_util.h"
-#include "content/public/browser/browser_thread.h"
+#include "base/threading/thread_checker.h"
#include "device/media_transfer_protocol/media_transfer_protocol_daemon_client.h"
#include "device/media_transfer_protocol/mtp_file_entry.pb.h"
#include "device/media_transfer_protocol/mtp_storage_info.pb.h"
@@ -25,8 +26,6 @@
#include "dbus/bus.h"
#endif
-using content::BrowserThread;
-
namespace device {
namespace {
@@ -36,20 +35,23 @@ MediaTransferProtocolManager* g_media_transfer_protocol_manager = NULL;
// The MediaTransferProtocolManager implementation.
class MediaTransferProtocolManagerImpl : public MediaTransferProtocolManager {
public:
- MediaTransferProtocolManagerImpl() : weak_ptr_factory_(this) {
+ MediaTransferProtocolManagerImpl(
+ scoped_refptr<base::MessageLoopProxy> loop_proxy)
+ : weak_ptr_factory_(this) {
dbus::Bus* bus = NULL;
#if defined(OS_CHROMEOS)
+ DCHECK(!loop_proxy.get());
chromeos::DBusThreadManager* dbus_thread_manager =
chromeos::DBusThreadManager::Get();
bus = dbus_thread_manager->GetSystemBus();
if (!bus)
return;
#else
+ DCHECK(loop_proxy.get());
dbus::Bus::Options options;
options.bus_type = dbus::Bus::SYSTEM;
options.connection_type = dbus::Bus::PRIVATE;
- options.dbus_thread_message_loop_proxy =
- BrowserThread::GetMessageLoopProxyForThread(BrowserThread::FILE);
+ options.dbus_thread_message_loop_proxy = loop_proxy;
session_bus_ = new dbus::Bus(options);
bus = session_bus_.get();
#endif
@@ -83,7 +85,7 @@ class MediaTransferProtocolManagerImpl : public MediaTransferProtocolManager {
// MediaTransferProtocolManager override.
const std::vector<std::string> GetStorages() const OVERRIDE {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+ DCHECK(thread_checker_.CalledOnValidThread());
std::vector<std::string> storages;
for (StorageInfoMap::const_iterator it = storage_info_map_.begin();
it != storage_info_map_.end();
@@ -96,7 +98,7 @@ class MediaTransferProtocolManagerImpl : public MediaTransferProtocolManager {
// MediaTransferProtocolManager override.
virtual const MtpStorageInfo* GetStorageInfo(
const std::string& storage_name) const OVERRIDE {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+ DCHECK(thread_checker_.CalledOnValidThread());
StorageInfoMap::const_iterator it = storage_info_map_.find(storage_name);
if (it == storage_info_map_.end())
return NULL;
@@ -107,7 +109,7 @@ class MediaTransferProtocolManagerImpl : public MediaTransferProtocolManager {
virtual void OpenStorage(const std::string& storage_name,
const std::string& mode,
const OpenStorageCallback& callback) OVERRIDE {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+ DCHECK(thread_checker_.CalledOnValidThread());
if (!ContainsKey(storage_info_map_, storage_name)) {
callback.Run("", true);
return;
@@ -125,7 +127,7 @@ class MediaTransferProtocolManagerImpl : public MediaTransferProtocolManager {
// MediaTransferProtocolManager override.
virtual void CloseStorage(const std::string& storage_handle,
const CloseStorageCallback& callback) OVERRIDE {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+ DCHECK(thread_checker_.CalledOnValidThread());
if (!ContainsKey(handles_, storage_handle)) {
callback.Run(true);
return;
@@ -144,7 +146,7 @@ class MediaTransferProtocolManagerImpl : public MediaTransferProtocolManager {
const std::string& storage_handle,
const std::string& path,
const ReadDirectoryCallback& callback) OVERRIDE {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+ DCHECK(thread_checker_.CalledOnValidThread());
if (!ContainsKey(handles_, storage_handle)) {
callback.Run(std::vector<MtpFileEntry>(), true);
return;
@@ -164,7 +166,7 @@ class MediaTransferProtocolManagerImpl : public MediaTransferProtocolManager {
const std::string& storage_handle,
uint32 file_id,
const ReadDirectoryCallback& callback) OVERRIDE {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+ DCHECK(thread_checker_.CalledOnValidThread());
if (!ContainsKey(handles_, storage_handle)) {
callback.Run(std::vector<MtpFileEntry>(), true);
return;
@@ -185,7 +187,7 @@ class MediaTransferProtocolManagerImpl : public MediaTransferProtocolManager {
uint32 offset,
uint32 count,
const ReadFileCallback& callback) OVERRIDE {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+ DCHECK(thread_checker_.CalledOnValidThread());
if (!ContainsKey(handles_, storage_handle)) {
callback.Run(std::string(), true);
return;
@@ -205,7 +207,7 @@ class MediaTransferProtocolManagerImpl : public MediaTransferProtocolManager {
uint32 offset,
uint32 count,
const ReadFileCallback& callback) OVERRIDE {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+ DCHECK(thread_checker_.CalledOnValidThread());
if (!ContainsKey(handles_, storage_handle)) {
callback.Run(std::string(), true);
return;
@@ -222,7 +224,7 @@ class MediaTransferProtocolManagerImpl : public MediaTransferProtocolManager {
virtual void GetFileInfoByPath(const std::string& storage_handle,
const std::string& path,
const GetFileInfoCallback& callback) OVERRIDE {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+ DCHECK(thread_checker_.CalledOnValidThread());
if (!ContainsKey(handles_, storage_handle)) {
callback.Run(MtpFileEntry(), true);
return;
@@ -240,7 +242,7 @@ class MediaTransferProtocolManagerImpl : public MediaTransferProtocolManager {
virtual void GetFileInfoById(const std::string& storage_handle,
uint32 file_id,
const GetFileInfoCallback& callback) OVERRIDE {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+ DCHECK(thread_checker_.CalledOnValidThread());
if (!ContainsKey(handles_, storage_handle)) {
callback.Run(MtpFileEntry(), true);
return;
@@ -269,7 +271,7 @@ class MediaTransferProtocolManagerImpl : public MediaTransferProtocolManager {
typedef std::queue<GetFileInfoCallback> GetFileInfoCallbackQueue;
void OnStorageChanged(bool is_attach, const std::string& storage_name) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+ DCHECK(thread_checker_.CalledOnValidThread());
if (is_attach) {
mtp_client_->GetStorageInfo(
storage_name,
@@ -293,6 +295,7 @@ class MediaTransferProtocolManagerImpl : public MediaTransferProtocolManager {
}
void OnEnumerateStorages(const std::vector<std::string>& storage_names) {
+ DCHECK(thread_checker_.CalledOnValidThread());
for (size_t i = 0; i < storage_names.size(); ++i) {
mtp_client_->GetStorageInfo(
storage_names[i],
@@ -303,7 +306,7 @@ class MediaTransferProtocolManagerImpl : public MediaTransferProtocolManager {
}
void OnGetStorageInfo(const MtpStorageInfo& storage_info) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+ DCHECK(thread_checker_.CalledOnValidThread());
const std::string& storage_name = storage_info.storage_name();
if (ContainsKey(storage_info_map_, storage_name)) {
// This should not happen, since MediaTransferProtocolManagerImpl should
@@ -324,6 +327,7 @@ class MediaTransferProtocolManagerImpl : public MediaTransferProtocolManager {
}
void OnOpenStorage(const std::string& handle) {
+ DCHECK(thread_checker_.CalledOnValidThread());
if (!ContainsKey(handles_, handle)) {
handles_.insert(handle);
open_storage_callbacks_.front().Run(handle, false);
@@ -340,6 +344,7 @@ class MediaTransferProtocolManagerImpl : public MediaTransferProtocolManager {
}
void OnCloseStorage() {
+ DCHECK(thread_checker_.CalledOnValidThread());
const std::string& handle = close_storage_callbacks_.front().second;
if (ContainsKey(handles_, handle)) {
handles_.erase(handle);
@@ -352,36 +357,43 @@ class MediaTransferProtocolManagerImpl : public MediaTransferProtocolManager {
}
void OnCloseStorageError() {
+ DCHECK(thread_checker_.CalledOnValidThread());
close_storage_callbacks_.front().first.Run(true);
close_storage_callbacks_.pop();
}
void OnReadDirectory(const std::vector<MtpFileEntry>& file_entries) {
+ DCHECK(thread_checker_.CalledOnValidThread());
read_directory_callbacks_.front().Run(file_entries, false);
read_directory_callbacks_.pop();
}
void OnReadDirectoryError() {
+ DCHECK(thread_checker_.CalledOnValidThread());
read_directory_callbacks_.front().Run(std::vector<MtpFileEntry>(), true);
read_directory_callbacks_.pop();
}
void OnReadFile(const std::string& data) {
+ DCHECK(thread_checker_.CalledOnValidThread());
read_file_callbacks_.front().Run(data, false);
read_file_callbacks_.pop();
}
void OnReadFileError() {
+ DCHECK(thread_checker_.CalledOnValidThread());
read_file_callbacks_.front().Run(std::string(), true);
read_file_callbacks_.pop();
}
void OnGetFileInfo(const MtpFileEntry& entry) {
+ DCHECK(thread_checker_.CalledOnValidThread());
get_file_info_callbacks_.front().Run(entry, false);
get_file_info_callbacks_.pop();
}
void OnGetFileInfoError() {
+ DCHECK(thread_checker_.CalledOnValidThread());
get_file_info_callbacks_.front().Run(MtpFileEntry(), true);
get_file_info_callbacks_.pop();
}
@@ -414,18 +426,22 @@ class MediaTransferProtocolManagerImpl : public MediaTransferProtocolManager {
ReadFileCallbackQueue read_file_callbacks_;
GetFileInfoCallbackQueue get_file_info_callbacks_;
+ base::ThreadChecker thread_checker_;
+
DISALLOW_COPY_AND_ASSIGN(MediaTransferProtocolManagerImpl);
};
} // namespace
// static
-void MediaTransferProtocolManager::Initialize() {
+void MediaTransferProtocolManager::Initialize(
+ scoped_refptr<base::MessageLoopProxy> loop_proxy) {
if (g_media_transfer_protocol_manager) {
LOG(WARNING) << "MediaTransferProtocolManager was already initialized";
return;
}
- g_media_transfer_protocol_manager = new MediaTransferProtocolManagerImpl();
+ g_media_transfer_protocol_manager =
+ new MediaTransferProtocolManagerImpl(loop_proxy);
VLOG(1) << "MediaTransferProtocolManager initialized";
}
diff --git a/device/media_transfer_protocol/media_transfer_protocol_manager.h b/device/media_transfer_protocol/media_transfer_protocol_manager.h
index 5c416b5..8751325 100644
--- a/device/media_transfer_protocol/media_transfer_protocol_manager.h
+++ b/device/media_transfer_protocol/media_transfer_protocol_manager.h
@@ -9,6 +9,7 @@
#include <vector>
#include "base/callback.h"
+#include "base/memory/ref_counted.h"
#include "build/build_config.h"
#if !defined(OS_LINUX)
@@ -18,6 +19,10 @@
class MtpFileEntry;
class MtpStorageInfo;
+namespace base {
+class MessageLoopProxy;
+}
+
namespace device {
// This class handles the interaction with mtpd.
@@ -128,7 +133,11 @@ class MediaTransferProtocolManager {
const GetFileInfoCallback& callback) = 0;
// Creates the global MediaTransferProtocolManager instance.
- static void Initialize();
+ // On Linux, |loop_proxy| specifies the message loop proxy to process
+ // asynchronous operations.
+ // On ChromeOS, |loop_proxy| is set to NULL because ChromeOS already has a
+ // dedicated message loop proxy.
+ static void Initialize(scoped_refptr<base::MessageLoopProxy> loop_proxy);
// Destroys the global MediaTransferProtocolManager instance if it exists.
static void Shutdown();