1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
|
// Copyright 2013 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/media_galleries/chromeos/mtp_device_task_helper_map_service.h"
#include "base/check_op.h"
#include "base/containers/contains.h"
#include "chrome/browser/media_galleries/chromeos/mtp_device_task_helper.h"
#include "content/public/browser/browser_thread.h"
namespace {
base::LazyInstance<MTPDeviceTaskHelperMapService>::DestructorAtExit
g_mtp_device_task_helper_map_service = LAZY_INSTANCE_INITIALIZER;
} // namespace
// static
MTPDeviceTaskHelperMapService* MTPDeviceTaskHelperMapService::GetInstance() {
return g_mtp_device_task_helper_map_service.Pointer();
}
MTPDeviceTaskHelper* MTPDeviceTaskHelperMapService::CreateDeviceTaskHelper(
const std::string& storage_name,
const bool read_only) {
DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
DCHECK(!storage_name.empty());
const MTPDeviceTaskHelperKey key =
GetMTPDeviceTaskHelperKey(storage_name, read_only);
DCHECK(!base::Contains(task_helper_map_, key));
MTPDeviceTaskHelper* task_helper = new MTPDeviceTaskHelper();
task_helper_map_[key] = task_helper;
return task_helper;
}
void MTPDeviceTaskHelperMapService::DestroyDeviceTaskHelper(
const std::string& storage_name,
const bool read_only) {
DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
const MTPDeviceTaskHelperKey key =
GetMTPDeviceTaskHelperKey(storage_name, read_only);
TaskHelperMap::iterator it = task_helper_map_.find(key);
if (it == task_helper_map_.end()) {
return;
}
delete it->second;
task_helper_map_.erase(it);
}
MTPDeviceTaskHelper* MTPDeviceTaskHelperMapService::GetDeviceTaskHelper(
const std::string& storage_name,
const bool read_only) {
DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
DCHECK(!storage_name.empty());
const MTPDeviceTaskHelperKey key =
GetMTPDeviceTaskHelperKey(storage_name, read_only);
TaskHelperMap::const_iterator it = task_helper_map_.find(key);
return (it != task_helper_map_.end()) ? it->second : NULL;
}
// static
MTPDeviceTaskHelperMapService::MTPDeviceTaskHelperKey
MTPDeviceTaskHelperMapService::GetMTPDeviceTaskHelperKey(
const std::string& storage_name,
const bool read_only) {
return (read_only ? "ReadOnly" : "ReadWrite") + std::string("|") +
storage_name;
}
MTPDeviceTaskHelperMapService::MTPDeviceTaskHelperMapService() = default;
MTPDeviceTaskHelperMapService::~MTPDeviceTaskHelperMapService() = default;
|