This source file includes following definitions.
- GetInstance
- CreateJob
- RegisterProtocolFactory
#include "net/socket_stream/socket_stream_job_manager.h"
#include "base/memory/singleton.h"
namespace net {
SocketStreamJobManager::SocketStreamJobManager() {
}
SocketStreamJobManager::~SocketStreamJobManager() {
}
SocketStreamJobManager* SocketStreamJobManager::GetInstance() {
return Singleton<SocketStreamJobManager>::get();
}
SocketStreamJob* SocketStreamJobManager::CreateJob(
const GURL& url, SocketStream::Delegate* delegate,
URLRequestContext* context, CookieStore* cookie_store) const {
if (!url.is_valid()) {
SocketStreamJob* job = new SocketStreamJob();
job->InitSocketStream(new SocketStream(url, delegate, context,
cookie_store));
return job;
}
const std::string& scheme = url.scheme();
base::AutoLock locked(lock_);
FactoryMap::const_iterator found = factories_.find(scheme);
if (found != factories_.end()) {
SocketStreamJob* job = found->second(url, delegate, context, cookie_store);
if (job)
return job;
}
SocketStreamJob* job = new SocketStreamJob();
job->InitSocketStream(new SocketStream(url, delegate, context, cookie_store));
return job;
}
SocketStreamJob::ProtocolFactory*
SocketStreamJobManager::RegisterProtocolFactory(
const std::string& scheme, SocketStreamJob::ProtocolFactory* factory) {
base::AutoLock locked(lock_);
SocketStreamJob::ProtocolFactory* old_factory;
FactoryMap::iterator found = factories_.find(scheme);
if (found != factories_.end()) {
old_factory = found->second;
} else {
old_factory = NULL;
}
if (factory) {
factories_[scheme] = factory;
} else if (found != factories_.end()) {
factories_.erase(found);
}
return old_factory;
}
}