Don't key client auth on HttpNetworkSession.

It's an IO-thread object being maintained (fortunately just as a pointer) on
the UI thread. It's used to tie together SSLClientAuthObserver instances, but
the BrowserContext is a more suitable UI thread key.

This relands part of https://codereview.chromium.org/596873002

BUG=439134

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

Cr-Commit-Position: refs/heads/master@{#307274}
diff --git a/android_webview/browser/aw_content_browser_client.cc b/android_webview/browser/aw_content_browser_client.cc
index f5cb5cf..8af695f 100644
--- a/android_webview/browser/aw_content_browser_client.cc
+++ b/android_webview/browser/aw_content_browser_client.cc
@@ -364,7 +364,6 @@
 void AwContentBrowserClient::SelectClientCertificate(
       int render_process_id,
       int render_frame_id,
-      const net::HttpNetworkSession* network_session,
       net::SSLCertRequestInfo* cert_request_info,
       const base::Callback<void(net::X509Certificate*)>& callback) {
   AwContentsClientBridgeBase* client =
diff --git a/android_webview/browser/aw_content_browser_client.h b/android_webview/browser/aw_content_browser_client.h
index 1d0bcea..f9507a67 100644
--- a/android_webview/browser/aw_content_browser_client.h
+++ b/android_webview/browser/aw_content_browser_client.h
@@ -106,7 +106,6 @@
   virtual void SelectClientCertificate(
       int render_process_id,
       int render_frame_id,
-      const net::HttpNetworkSession* network_session,
       net::SSLCertRequestInfo* cert_request_info,
       const base::Callback<void(net::X509Certificate*)>& callback) override;
   virtual void RequestPermission(
diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc
index 227fc51..94ccf123 100644
--- a/chrome/browser/chrome_content_browser_client.cc
+++ b/chrome/browser/chrome_content_browser_client.cc
@@ -1769,7 +1769,6 @@
 void ChromeContentBrowserClient::SelectClientCertificate(
     int render_process_id,
     int render_frame_id,
-    const net::HttpNetworkSession* network_session,
     net::SSLCertRequestInfo* cert_request_info,
     const base::Callback<void(net::X509Certificate*)>& callback) {
   content::RenderFrameHost* rfh = content::RenderFrameHost::FromID(
@@ -1822,8 +1821,7 @@
     }
   }
 
-  chrome::ShowSSLClientCertificateSelector(tab, network_session,
-                                           cert_request_info, callback);
+  chrome::ShowSSLClientCertificateSelector(tab, cert_request_info, callback);
 }
 
 void ChromeContentBrowserClient::AddCertificate(
diff --git a/chrome/browser/chrome_content_browser_client.h b/chrome/browser/chrome_content_browser_client.h
index aeeabb5..4ea44b3 100644
--- a/chrome/browser/chrome_content_browser_client.h
+++ b/chrome/browser/chrome_content_browser_client.h
@@ -172,7 +172,6 @@
   void SelectClientCertificate(
       int render_process_id,
       int render_frame_id,
-      const net::HttpNetworkSession* network_session,
       net::SSLCertRequestInfo* cert_request_info,
       const base::Callback<void(net::X509Certificate*)>& callback) override;
   void AddCertificate(net::CertificateMimeType cert_type,
diff --git a/chrome/browser/ssl/ssl_client_auth_observer.cc b/chrome/browser/ssl/ssl_client_auth_observer.cc
index 46f580e..edc63bb 100644
--- a/chrome/browser/ssl/ssl_client_auth_observer.cc
+++ b/chrome/browser/ssl/ssl_client_auth_observer.cc
@@ -19,10 +19,10 @@
 typedef std::pair<net::SSLCertRequestInfo*, net::X509Certificate*> CertDetails;
 
 SSLClientAuthObserver::SSLClientAuthObserver(
-    const net::HttpNetworkSession* network_session,
+    const content::BrowserContext* browser_context,
     const scoped_refptr<net::SSLCertRequestInfo>& cert_request_info,
     const base::Callback<void(net::X509Certificate*)>& callback)
-    : network_session_(network_session),
+    : browser_context_(browser_context),
       cert_request_info_(cert_request_info),
       callback_(callback) {
 }
@@ -44,7 +44,7 @@
   content::NotificationService* service =
       content::NotificationService::current();
   service->Notify(chrome::NOTIFICATION_SSL_CLIENT_AUTH_CERT_SELECTED,
-                  content::Source<net::HttpNetworkSession>(network_session_),
+                  content::Source<content::BrowserContext>(browser_context_),
                   content::Details<CertDetails>(&details));
 
   callback_.Run(certificate);
@@ -76,7 +76,7 @@
   DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
   notification_registrar_.Add(
       this, chrome::NOTIFICATION_SSL_CLIENT_AUTH_CERT_SELECTED,
-      content::Source<net::HttpNetworkSession>(network_session_));
+      content::Source<content::BrowserContext>(browser_context_));
 }
 
 void SSLClientAuthObserver::StopObserving() {
diff --git a/chrome/browser/ssl/ssl_client_auth_observer.h b/chrome/browser/ssl/ssl_client_auth_observer.h
index 1fe5f39..62e3fde 100644
--- a/chrome/browser/ssl/ssl_client_auth_observer.h
+++ b/chrome/browser/ssl/ssl_client_auth_observer.h
@@ -11,15 +11,18 @@
 #include "content/public/browser/notification_registrar.h"
 
 namespace net {
-class HttpNetworkSession;
 class SSLCertRequestInfo;
 class X509Certificate;
 }
 
+namespace content {
+class BrowserContext;
+}
+
 class SSLClientAuthObserver : public content::NotificationObserver {
  public:
   SSLClientAuthObserver(
-      const net::HttpNetworkSession* network_session,
+      const content::BrowserContext* browser_context,
       const scoped_refptr<net::SSLCertRequestInfo>& cert_request_info,
       const base::Callback<void(net::X509Certificate*)>& callback);
   ~SSLClientAuthObserver() override;
@@ -52,7 +55,7 @@
                const content::NotificationSource& source,
                const content::NotificationDetails& details) override;
 
-  const net::HttpNetworkSession* network_session_;
+  const content::BrowserContext* browser_context_;
   scoped_refptr<net::SSLCertRequestInfo> cert_request_info_;
   base::Callback<void(net::X509Certificate*)> callback_;
   content::NotificationRegistrar notification_registrar_;
diff --git a/chrome/browser/ssl/ssl_client_auth_requestor_mock.cc b/chrome/browser/ssl/ssl_client_auth_requestor_mock.cc
index 78c2c96..6f63c32 100644
--- a/chrome/browser/ssl/ssl_client_auth_requestor_mock.cc
+++ b/chrome/browser/ssl/ssl_client_auth_requestor_mock.cc
@@ -4,18 +4,13 @@
 
 #include "chrome/browser/ssl/ssl_client_auth_requestor_mock.h"
 
-#include "net/http/http_transaction_factory.h"
 #include "net/ssl/ssl_cert_request_info.h"
 #include "net/url_request/url_request.h"
-#include "net/url_request/url_request_context.h"
 
 SSLClientAuthRequestorMock::SSLClientAuthRequestorMock(
     net::URLRequest* request,
     const scoped_refptr<net::SSLCertRequestInfo>& cert_request_info)
-    : cert_request_info_(cert_request_info),
-      http_network_session_(request->context()
-                                ->http_transaction_factory()
-                                ->GetSession()) {
+    : cert_request_info_(cert_request_info) {
 }
 
 SSLClientAuthRequestorMock::~SSLClientAuthRequestorMock() {}
diff --git a/chrome/browser/ssl/ssl_client_auth_requestor_mock.h b/chrome/browser/ssl/ssl_client_auth_requestor_mock.h
index 69bd729..7d63a7c 100644
--- a/chrome/browser/ssl/ssl_client_auth_requestor_mock.h
+++ b/chrome/browser/ssl/ssl_client_auth_requestor_mock.h
@@ -25,7 +25,6 @@
   MOCK_METHOD1(CertificateSelected, void(net::X509Certificate* cert));
 
   scoped_refptr<net::SSLCertRequestInfo> cert_request_info_;
-  net::HttpNetworkSession* http_network_session_;
 
  protected:
   friend class base::RefCountedThreadSafe<SSLClientAuthRequestorMock>;
diff --git a/chrome/browser/ssl/ssl_client_certificate_selector.h b/chrome/browser/ssl/ssl_client_certificate_selector.h
index afec4ad..1a33c059 100644
--- a/chrome/browser/ssl/ssl_client_certificate_selector.h
+++ b/chrome/browser/ssl/ssl_client_certificate_selector.h
@@ -12,7 +12,6 @@
 }
 
 namespace net {
-class HttpNetworkSession;
 class SSLCertRequestInfo;
 class X509Certificate;
 }
@@ -28,7 +27,6 @@
 // with a NULL certificate.
 void ShowSSLClientCertificateSelector(
     content::WebContents* contents,
-    const net::HttpNetworkSession* network_session,
     net::SSLCertRequestInfo* cert_request_info,
     const SelectCertificateCallback& callback);
 
diff --git a/chrome/browser/ui/android/ssl_client_certificate_request.cc b/chrome/browser/ui/android/ssl_client_certificate_request.cc
index afe2d7e..65c9adaf 100644
--- a/chrome/browser/ui/android/ssl_client_certificate_request.cc
+++ b/chrome/browser/ui/android/ssl_client_certificate_request.cc
@@ -226,7 +226,6 @@
 
 void ShowSSLClientCertificateSelector(
     content::WebContents* contents,
-    const net::HttpNetworkSession* network_session,
     net::SSLCertRequestInfo* cert_request_info,
     const chrome::SelectCertificateCallback& callback) {
   ui::WindowAndroid* window =
diff --git a/chrome/browser/ui/cocoa/ssl_client_certificate_selector_cocoa.h b/chrome/browser/ui/cocoa/ssl_client_certificate_selector_cocoa.h
index 991a23a..aacdafe 100644
--- a/chrome/browser/ui/cocoa/ssl_client_certificate_selector_cocoa.h
+++ b/chrome/browser/ui/cocoa/ssl_client_certificate_selector_cocoa.h
@@ -16,6 +16,10 @@
 #import "chrome/browser/ui/cocoa/constrained_window/constrained_window_custom_sheet.h"
 #import "chrome/browser/ui/cocoa/constrained_window/constrained_window_sheet_controller.h"
 
+namespace content {
+class BrowserContext;
+}
+
 class ConstrainedWindowMac;
 @class SFChooseIdentityPanel;
 class SSLClientAuthObserverCocoaBridge;
@@ -41,7 +45,7 @@
 
 @property (readonly, nonatomic) SFChooseIdentityPanel* panel;
 
-- (id)initWithNetworkSession:(const net::HttpNetworkSession*)networkSession
+- (id)initWithBrowserContext:(const content::BrowserContext*)browserContext
              certRequestInfo:(net::SSLCertRequestInfo*)certRequestInfo
                     callback:(const chrome::SelectCertificateCallback&)callback;
 - (void)displayForWebContents:(content::WebContents*)webContents;
diff --git a/chrome/browser/ui/cocoa/ssl_client_certificate_selector_cocoa.mm b/chrome/browser/ui/cocoa/ssl_client_certificate_selector_cocoa.mm
index 027b896..9d471b9 100644
--- a/chrome/browser/ui/cocoa/ssl_client_certificate_selector_cocoa.mm
+++ b/chrome/browser/ui/cocoa/ssl_client_certificate_selector_cocoa.mm
@@ -40,11 +40,11 @@
                                          public ConstrainedWindowMacDelegate {
  public:
   SSLClientAuthObserverCocoaBridge(
-      const net::HttpNetworkSession* network_session,
+      const content::BrowserContext* browser_context,
       net::SSLCertRequestInfo* cert_request_info,
       const chrome::SelectCertificateCallback& callback,
       SSLClientCertificateSelectorCocoa* controller)
-      : SSLClientAuthObserver(network_session, cert_request_info, callback),
+      : SSLClientAuthObserver(browser_context, cert_request_info, callback),
         controller_(controller) {
   }
 
@@ -71,14 +71,13 @@
 
 void ShowSSLClientCertificateSelector(
     content::WebContents* contents,
-    const net::HttpNetworkSession* network_session,
     net::SSLCertRequestInfo* cert_request_info,
     const SelectCertificateCallback& callback) {
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
   // The dialog manages its own lifetime.
   SSLClientCertificateSelectorCocoa* selector =
       [[SSLClientCertificateSelectorCocoa alloc]
-          initWithNetworkSession:network_session
+          initWithBrowserContext:contents->GetBrowserContext()
                  certRequestInfo:cert_request_info
                         callback:callback];
   [selector displayForWebContents:contents];
@@ -88,14 +87,14 @@
 
 @implementation SSLClientCertificateSelectorCocoa
 
-- (id)initWithNetworkSession:(const net::HttpNetworkSession*)networkSession
+- (id)initWithBrowserContext:(const content::BrowserContext*)browserContext
     certRequestInfo:(net::SSLCertRequestInfo*)certRequestInfo
            callback:(const chrome::SelectCertificateCallback&)callback {
-  DCHECK(networkSession);
+  DCHECK(browserContext);
   DCHECK(certRequestInfo);
   if ((self = [super init])) {
     observer_.reset(new SSLClientAuthObserverCocoaBridge(
-        networkSession, certRequestInfo, callback, self));
+        browserContext, certRequestInfo, callback, self));
   }
   return self;
 }
diff --git a/chrome/browser/ui/cocoa/ssl_client_certificate_selector_cocoa_browsertest.mm b/chrome/browser/ui/cocoa/ssl_client_certificate_selector_cocoa_browsertest.mm
index 37757d62..a0c71106 100644
--- a/chrome/browser/ui/cocoa/ssl_client_certificate_selector_cocoa_browsertest.mm
+++ b/chrome/browser/ui/cocoa/ssl_client_certificate_selector_cocoa_browsertest.mm
@@ -50,7 +50,7 @@
   int count = 0;
   SSLClientCertificateSelectorCocoa* selector =
       [[SSLClientCertificateSelectorCocoa alloc]
-          initWithNetworkSession:auth_requestor_->http_network_session_
+          initWithBrowserContext:web_contents->GetBrowserContext()
                  certRequestInfo:auth_requestor_->cert_request_info_.get()
                         callback:base::Bind(&OnCertificateSelected,
                                             &cert,
@@ -72,13 +72,13 @@
 
 // Test that switching to another tab correctly hides the sheet.
 IN_PROC_BROWSER_TEST_F(SSLClientCertificateSelectorCocoaTest, HideShow) {
-  SSLClientCertificateSelectorCocoa* selector =
-      [[SSLClientCertificateSelectorCocoa alloc]
-          initWithNetworkSession:auth_requestor_->http_network_session_
-                 certRequestInfo:auth_requestor_->cert_request_info_.get()
-                        callback:chrome::SelectCertificateCallback()];
   content::WebContents* web_contents =
       browser()->tab_strip_model()->GetActiveWebContents();
+  SSLClientCertificateSelectorCocoa* selector =
+      [[SSLClientCertificateSelectorCocoa alloc]
+          initWithBrowserContext:web_contents->GetBrowserContext()
+                 certRequestInfo:auth_requestor_->cert_request_info_.get()
+                        callback:chrome::SelectCertificateCallback()];
   [selector displayForWebContents:web_contents];
   content::RunAllPendingInMessageLoop();
 
diff --git a/chrome/browser/ui/views/ssl_client_certificate_selector.cc b/chrome/browser/ui/views/ssl_client_certificate_selector.cc
index 7e84fb0..de31ce8f 100644
--- a/chrome/browser/ui/views/ssl_client_certificate_selector.cc
+++ b/chrome/browser/ui/views/ssl_client_certificate_selector.cc
@@ -82,10 +82,10 @@
 
 SSLClientCertificateSelector::SSLClientCertificateSelector(
     content::WebContents* web_contents,
-    const net::HttpNetworkSession* network_session,
     const scoped_refptr<net::SSLCertRequestInfo>& cert_request_info,
     const chrome::SelectCertificateCallback& callback)
-    : SSLClientAuthObserver(network_session, cert_request_info, callback),
+    : SSLClientAuthObserver(web_contents->GetBrowserContext(),
+                            cert_request_info, callback),
       model_(new CertificateSelectorTableModel(cert_request_info.get())),
       web_contents_(web_contents),
       table_(NULL),
@@ -274,13 +274,12 @@
 
 void ShowSSLClientCertificateSelector(
     content::WebContents* contents,
-    const net::HttpNetworkSession* network_session,
     net::SSLCertRequestInfo* cert_request_info,
     const chrome::SelectCertificateCallback& callback) {
   DVLOG(1) << __FUNCTION__ << " " << contents;
   DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
   (new SSLClientCertificateSelector(
-       contents, network_session, cert_request_info, callback))->Init();
+       contents, cert_request_info, callback))->Init();
 }
 
 }  // namespace chrome
diff --git a/chrome/browser/ui/views/ssl_client_certificate_selector.h b/chrome/browser/ui/views/ssl_client_certificate_selector.h
index 882b4b0..de4fbed4 100644
--- a/chrome/browser/ui/views/ssl_client_certificate_selector.h
+++ b/chrome/browser/ui/views/ssl_client_certificate_selector.h
@@ -40,7 +40,6 @@
  public:
   SSLClientCertificateSelector(
       content::WebContents* web_contents,
-      const net::HttpNetworkSession* network_session,
       const scoped_refptr<net::SSLCertRequestInfo>& cert_request_info,
       const chrome::SelectCertificateCallback& callback);
   ~SSLClientCertificateSelector() override;
diff --git a/chrome/browser/ui/views/ssl_client_certificate_selector_browsertest.cc b/chrome/browser/ui/views/ssl_client_certificate_selector_browsertest.cc
index b5dba23f..390abd4 100644
--- a/chrome/browser/ui/views/ssl_client_certificate_selector_browsertest.cc
+++ b/chrome/browser/ui/views/ssl_client_certificate_selector_browsertest.cc
@@ -73,7 +73,6 @@
         browser()->tab_strip_model()->GetActiveWebContents());
     selector_ = new SSLClientCertificateSelector(
         browser()->tab_strip_model()->GetActiveWebContents(),
-        auth_requestor_->http_network_session_,
         auth_requestor_->cert_request_info_,
         base::Bind(&SSLClientAuthRequestorMock::CertificateSelected,
                    auth_requestor_));
@@ -161,14 +160,12 @@
 
     selector_1_ = new SSLClientCertificateSelector(
         browser()->tab_strip_model()->GetWebContentsAt(1),
-        auth_requestor_1_->http_network_session_,
         auth_requestor_1_->cert_request_info_,
         base::Bind(&SSLClientAuthRequestorMock::CertificateSelected,
                    auth_requestor_1_));
     selector_1_->Init();
     selector_2_ = new SSLClientCertificateSelector(
         browser()->tab_strip_model()->GetWebContentsAt(2),
-        auth_requestor_2_->http_network_session_,
         auth_requestor_2_->cert_request_info_,
         base::Bind(&SSLClientAuthRequestorMock::CertificateSelected,
                    auth_requestor_2_));
@@ -239,7 +236,6 @@
 
     selector_1_ = new SSLClientCertificateSelector(
         browser_1_->tab_strip_model()->GetActiveWebContents(),
-        auth_requestor_1_->http_network_session_,
         auth_requestor_1_->cert_request_info_,
         base::Bind(&SSLClientAuthRequestorMock::CertificateSelected,
                    auth_requestor_1_));
diff --git a/content/browser/loader/resource_loader_unittest.cc b/content/browser/loader/resource_loader_unittest.cc
index 8910deca..2af4ffc5 100644
--- a/content/browser/loader/resource_loader_unittest.cc
+++ b/content/browser/loader/resource_loader_unittest.cc
@@ -231,7 +231,6 @@
   void SelectClientCertificate(
       int render_process_id,
       int render_view_id,
-      const net::HttpNetworkSession* network_session,
       net::SSLCertRequestInfo* cert_request_info,
       const base::Callback<void(net::X509Certificate*)>& callback) override {
     ++call_count_;
diff --git a/content/browser/ssl/ssl_client_auth_handler.cc b/content/browser/ssl/ssl_client_auth_handler.cc
index b063e619..a0bcdcf 100644
--- a/content/browser/ssl/ssl_client_auth_handler.cc
+++ b/content/browser/ssl/ssl_client_auth_handler.cc
@@ -9,11 +9,8 @@
 #include "content/browser/loader/resource_request_info_impl.h"
 #include "content/public/browser/browser_thread.h"
 #include "content/public/browser/content_browser_client.h"
-#include "net/cert/x509_certificate.h"
-#include "net/http/http_transaction_factory.h"
 #include "net/ssl/client_cert_store.h"
 #include "net/url_request/url_request.h"
-#include "net/url_request/url_request_context.h"
 
 namespace content {
 
@@ -22,8 +19,6 @@
     net::URLRequest* request,
     net::SSLCertRequestInfo* cert_request_info)
     : request_(request),
-      http_network_session_(
-          request_->context()->http_transaction_factory()->GetSession()),
       cert_request_info_(cert_request_info),
       client_cert_store_(client_cert_store.Pass()) {
   DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
@@ -117,7 +112,6 @@
   GetContentClient()->browser()->SelectClientCertificate(
       render_process_host_id,
       render_frame_host_id,
-      http_network_session_,
       cert_request_info_.get(),
       base::Bind(&SSLClientAuthHandler::CertificateSelected, this));
 }
diff --git a/content/browser/ssl/ssl_client_auth_handler.h b/content/browser/ssl/ssl_client_auth_handler.h
index b848d54..1f55aac1 100644
--- a/content/browser/ssl/ssl_client_auth_handler.h
+++ b/content/browser/ssl/ssl_client_auth_handler.h
@@ -71,9 +71,6 @@
   // The net::URLRequest that triggered this client auth.
   net::URLRequest* request_;
 
-  // The HttpNetworkSession |request_| is associated with.
-  const net::HttpNetworkSession* http_network_session_;
-
   // The certs to choose from.
   scoped_refptr<net::SSLCertRequestInfo> cert_request_info_;
 
diff --git a/content/public/browser/content_browser_client.h b/content/public/browser/content_browser_client.h
index e68ca1b..3c5e123 100644
--- a/content/public/browser/content_browser_client.h
+++ b/content/public/browser/content_browser_client.h
@@ -58,7 +58,6 @@
 namespace net {
 class CookieOptions;
 class CookieStore;
-class HttpNetworkSession;
 class NetLog;
 class SSLCertRequestInfo;
 class SSLInfo;
@@ -402,7 +401,6 @@
   virtual void SelectClientCertificate(
       int render_process_id,
       int render_frame_id,
-      const net::HttpNetworkSession* network_session,
       net::SSLCertRequestInfo* cert_request_info,
       const base::Callback<void(net::X509Certificate*)>& callback) {}