Change ownership of |job| objects in ClientSocketPoolBaseHelper

In particular, make RemoveConnectJob() transfer ownership of its job to
Group::RemoveJob(), which will then delete it.

Also assert that the group owns that particular job.

This makes it slightly easier to convert this code to using scoped_ptrs,
which in turn makes it easier to modify ClientSocketPoolBaseHelper to
support reprioritization.

BUG=166689
[email protected]

Review URL: https://codereview.chromium.org/22999009

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@217661 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/net/socket/client_socket_pool_base.cc b/net/socket/client_socket_pool_base.cc
index 3332e04..4a5b1187 100644
--- a/net/socket/client_socket_pool_base.cc
+++ b/net/socket/client_socket_pool_base.cc
@@ -942,16 +942,12 @@
   connecting_socket_count_--;
 
   DCHECK(group);
-  DCHECK(ContainsKey(group->jobs(), job));
   group->RemoveJob(job);
 
   // If we've got no more jobs for this group, then we no longer need a
   // backup job either.
   if (group->jobs().empty())
     group->CleanupBackupJob();
-
-  DCHECK(job);
-  delete job;
 }
 
 void ClientSocketPoolBaseHelper::OnAvailableSocketSlot(
@@ -1192,9 +1188,15 @@
 }
 
 void ClientSocketPoolBaseHelper::Group::RemoveJob(ConnectJob* job) {
+  scoped_ptr<ConnectJob> owned_job(job);
   SanityCheck();
 
-  jobs_.erase(job);
+  std::set<ConnectJob*>::iterator it = jobs_.find(job);
+  if (it != jobs_.end()) {
+    jobs_.erase(it);
+  } else {
+    NOTREACHED();
+  }
   size_t job_count = jobs_.size();
   if (job_count < unassigned_job_count_)
     unassigned_job_count_ = job_count;