profile_auth_data.cc revision 2a99a7e74a7f215066514fe81d2bfa6639d9eddd
12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/chromeos/login/profile_auth_data.h" 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/profiles/profile.h" 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/browser/browser_thread.h" 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "net/cookies/cookie_monster.h" 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "net/cookies/cookie_store.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "net/http/http_auth_cache.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "net/http/http_network_session.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "net/http/http_transaction_factory.h" 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "net/ssl/server_bound_cert_service.h" 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "net/ssl/server_bound_cert_store.h" 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "net/url_request/url_request_context.h" 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "net/url_request/url_request_context_getter.h" 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using content::BrowserThread; 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace chromeos { 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace { 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class ProfileAuthDataTransferer { 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ProfileAuthDataTransferer( 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Profile* from_profile, 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Profile* to_profile, 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool transfer_cookies, 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::Closure& completion_callback); 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void BeginTransfer(); 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void BeginTransferOnIOThread(); 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void MaybeDoCookieAndCertTransfer(); 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void Finish(); 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnTransferCookiesIfEmptyJar(const net::CookieList& cookies_in_jar); 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnGetCookiesToTransfer(const net::CookieList& cookies_to_transfer); 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void RetrieveDefaultCookies(); 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnGetServerBoundCertsToTransfer( 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const net::ServerBoundCertStore::ServerBoundCertList& certs); 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void RetrieveDefaultServerBoundCerts(); 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void TransferDefaultAuthCache(); 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_refptr<net::URLRequestContextGetter> from_context_; 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_refptr<net::URLRequestContextGetter> to_context_; 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool transfer_cookies_; 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::Closure completion_callback_; 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) net::CookieList cookies_to_transfer_; 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) net::ServerBoundCertStore::ServerBoundCertList certs_to_transfer_; 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool got_cookies_; 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool got_server_bound_certs_; 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)ProfileAuthDataTransferer::ProfileAuthDataTransferer( 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Profile* from_profile, 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Profile* to_profile, 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool transfer_cookies, 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::Closure& completion_callback) 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : from_context_(from_profile->GetRequestContext()), 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) to_context_(to_profile->GetRequestContext()), 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) transfer_cookies_(transfer_cookies), 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) completion_callback_(completion_callback), 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) got_cookies_(false), 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) got_server_bound_certs_(false) { 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ProfileAuthDataTransferer::BeginTransfer() { 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // If we aren't transferring cookies, post the completion callback 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // immediately. Otherwise, it will be called when both cookies and channel 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // ids are finished transferring. 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!transfer_cookies_) { 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, completion_callback_); 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Null the callback so that when Finish is called the callback won't be 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // called again. 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) completion_callback_.Reset(); 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BrowserThread::PostTask( 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BrowserThread::IO, FROM_HERE, 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::Bind(&ProfileAuthDataTransferer::BeginTransferOnIOThread, 872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::Unretained(this))); 882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ProfileAuthDataTransferer::BeginTransferOnIOThread() { 912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TransferDefaultAuthCache(); 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (transfer_cookies_) { 952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RetrieveDefaultCookies(); 962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RetrieveDefaultServerBoundCerts(); 972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else { 982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Finish(); 992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// If both cookies and server bound certs have been retrieved, see if we need to 1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// do the actual transfer. 1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ProfileAuthDataTransferer::MaybeDoCookieAndCertTransfer() { 1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!(got_cookies_ && got_server_bound_certs_)) 1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Nothing to transfer over? 1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!cookies_to_transfer_.size()) { 1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Finish(); 1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Now let's see if the target cookie monster's jar is even empty. 1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) net::CookieStore* to_store = 1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) to_context_->GetURLRequestContext()->cookie_store(); 1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) net::CookieMonster* to_monster = to_store->GetCookieMonster(); 1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) to_monster->GetAllCookiesAsync( 1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::Bind(&ProfileAuthDataTransferer::OnTransferCookiesIfEmptyJar, 1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::Unretained(this))); 1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Post the |completion_callback_| and delete ourself. 1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ProfileAuthDataTransferer::Finish() { 1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!completion_callback_.is_null()) 1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, completion_callback_); 1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) delete this; 1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Callback for transferring |cookies_to_transfer_| into |to_context_|'s 1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// CookieMonster if its jar is completely empty. If authentication was 1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// performed by an extension, then the set of cookies that was acquired through 1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// such that process will be automatically transfered into the profile. 1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ProfileAuthDataTransferer::OnTransferCookiesIfEmptyJar( 1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const net::CookieList& cookies_in_jar) { 1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Transfer only if the existing cookie jar is empty. 1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!cookies_in_jar.size()) { 1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) net::CookieStore* to_store = 1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) to_context_->GetURLRequestContext()->cookie_store(); 1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) net::CookieMonster* to_monster = to_store->GetCookieMonster(); 1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) to_monster->InitializeFrom(cookies_to_transfer_); 1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) net::ServerBoundCertService* to_cert_service = 1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) to_context_->GetURLRequestContext()->server_bound_cert_service(); 1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) to_cert_service->GetCertStore()->InitializeFrom(certs_to_transfer_); 1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Finish(); 1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Callback for receiving |cookies_to_transfer| from the authentication profile 1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// cookie jar. 1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ProfileAuthDataTransferer::OnGetCookiesToTransfer( 1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const net::CookieList& cookies_to_transfer) { 1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) got_cookies_ = true; 1612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cookies_to_transfer_ = cookies_to_transfer; 1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MaybeDoCookieAndCertTransfer(); 1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Retrieves initial set of Profile cookies from the |from_context_|. 1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ProfileAuthDataTransferer::RetrieveDefaultCookies() { 1672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 1682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) net::CookieStore* from_store = 1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) from_context_->GetURLRequestContext()->cookie_store(); 1712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) net::CookieMonster* from_monster = from_store->GetCookieMonster(); 1722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) from_monster->SetKeepExpiredCookies(); 1732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) from_monster->GetAllCookiesAsync( 1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::Bind(&ProfileAuthDataTransferer::OnGetCookiesToTransfer, 1752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::Unretained(this))); 1762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Callback for receiving |cookies_to_transfer| from the authentication profile 1792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// cookie jar. 1802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ProfileAuthDataTransferer::OnGetServerBoundCertsToTransfer( 1812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const net::ServerBoundCertStore::ServerBoundCertList& certs) { 1822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 1832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) certs_to_transfer_ = certs; 1842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) got_server_bound_certs_ = true; 1852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MaybeDoCookieAndCertTransfer(); 1862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Retrieves server bound certs of |from_context_|. 1892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ProfileAuthDataTransferer::RetrieveDefaultServerBoundCerts() { 1902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 1912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) net::ServerBoundCertService* from_service = 1922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) from_context_->GetURLRequestContext()->server_bound_cert_service(); 1932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) from_service->GetCertStore()->GetAllServerBoundCerts( 1952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::Bind(&ProfileAuthDataTransferer::OnGetServerBoundCertsToTransfer, 1962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::Unretained(this))); 1972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Transfers HTTP authentication cache from the |from_context_| 2002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// into the |to_context_|. If user was required to authenticate with a proxy 2012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// during the login, this authentication information will be transferred 2022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// into the new session. 2032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ProfileAuthDataTransferer::TransferDefaultAuthCache() { 2042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 2052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) net::HttpAuthCache* new_cache = to_context_->GetURLRequestContext()-> 2062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) http_transaction_factory()->GetSession()->http_auth_cache(); 2072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new_cache->UpdateAllFrom(*from_context_->GetURLRequestContext()-> 2082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) http_transaction_factory()->GetSession()->http_auth_cache()); 2092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace 2122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ProfileAuthData::Transfer( 2142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Profile* from_profile, 2152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Profile* to_profile, 2162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool transfer_cookies, 2172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::Closure& completion_callback) { 2182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 2192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) (new ProfileAuthDataTransferer(from_profile, to_profile, transfer_cookies, 2202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) completion_callback))->BeginTransfer(); 2212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace chromeos 224