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/ssl/ssl_add_certificate.h" 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "net/android/network_library.h" 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace chrome { 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Special case for Android here for several reasons: 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// - The SSLAddCertHandler implementation currently only supports 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// CERTIFICATE_TYPE_X509_USER_CERT, but not other types, like 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// CERTIFICATE_TYPE_PKCS12_ARCHIVE which are required on this 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// platform. 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// - Besides, SSLAddCertHandler tries to parse the certificate 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// by calling net::CertDatabase::CheckUserCert() which is not 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// implemented on Android, mainly because there is no API 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// provided by the system to do that properly. 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// - The Android CertInstaller activity will check the certificate file 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// and display a toast (small fading dialog) to the user if it is 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// not valid, so the UI performed by SSLAddCertHandler would 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// be redundant. 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void SSLAddCertificate( 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) net::CertificateMimeType cert_type, 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const void* cert_data, 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) size_t cert_size, 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int /* render_process_id */, 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int /* render_view_id */) { 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (cert_size > 0) { 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // This launches a new activity which will run in a different process. 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // It handles all user interaction, so no need to do anything in the 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // browser UI thread here. 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) net::android::StoreCertificate(cert_type, cert_data, cert_size); 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace chrome 42