| Index: chrome/browser/chrome_content_browser_client.cc
|
| diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc
|
| index 5bd42719e839884bf46ee5381b43f25889619ec6..003228a8dd627e757c24cd802ec3ab7b82d37321 100644
|
| --- a/chrome/browser/chrome_content_browser_client.cc
|
| +++ b/chrome/browser/chrome_content_browser_client.cc
|
| @@ -100,6 +100,7 @@
|
| #include "content/public/common/content_descriptors.h"
|
| #include "grit/generated_resources.h"
|
| #include "grit/ui_resources.h"
|
| +#include "net/base/mime_util.h"
|
| #include "net/base/ssl_cert_request_info.h"
|
| #include "net/cookies/canonical_cookie.h"
|
| #include "net/cookies/cookie_options.h"
|
| @@ -122,6 +123,7 @@
|
| #elif defined(OS_ANDROID)
|
| #include "chrome/browser/chrome_browser_main_android.h"
|
| #include "chrome/common/descriptors_android.h"
|
| +#include "net/android/network_library.h"
|
| #elif defined(OS_POSIX)
|
| #include "chrome/browser/chrome_browser_main_posix.h"
|
| #endif
|
| @@ -1274,13 +1276,52 @@ void ChromeContentBrowserClient::SelectClientCertificate(
|
| network_session, cert_request_info, callback);
|
| }
|
|
|
| -void ChromeContentBrowserClient::AddNewCertificate(
|
| +void ChromeContentBrowserClient::AddNewCryptoFile(
|
| net::URLRequest* request,
|
| - net::X509Certificate* cert,
|
| + net::CryptoFileType file_type,
|
| + const void* file_data,
|
| + size_t file_size,
|
| int render_process_id,
|
| int render_view_id) {
|
| - // The handler will run the UI and delete itself when it's finished.
|
| - new SSLAddCertHandler(request, cert, render_process_id, render_view_id);
|
| +#ifdef OS_ANDROID
|
| + // Special case for Android here for several reasons:
|
| + //
|
| + // - The SSLAddCertHandler implementation currently only supports
|
| + // CRYPTO_FILE_TYPE_X509_USER_CERT, but not other types, like
|
| + // CRYPTO_FILE_TYPE_PKCS12 which are required on this platform.
|
| + //
|
| + // - Besides, SSLAddCertHandler tries to verify the certificate
|
| + // by calling net::CertDatabase::CheckUserCert() which is not
|
| + // implemented on Android, mainly because there is no API
|
| + // provided by the system to do that properly.
|
| + //
|
| + // - The Android CertInstaller activity will check the crypto files
|
| + // and display a toast (small fading dialog) to the user if it is
|
| + // not valid, so the UI stuff performed by SSLAddCertHandler would
|
| + // be redundant.
|
| + if (file_size > 0) {
|
| + // This launches a new activity which will run in a different process.
|
| + // It handles all user interaction, so no need to do anything in the
|
| + // browser UI thread here.
|
| + net::android::StoreCryptoFile(file_type, file_data, file_size);
|
| + }
|
| +#else
|
| + // Chromium only supports X509 User certificates on other platforms.
|
| + // Note that this method should not be called for other crypto
|
| + // file types. See net::GetCryptoFileTypeFromMimeType().
|
| + if (file_type == net::CRYPTO_FILE_TYPE_X509_USER_CERT) {
|
| + scoped_refptr<net::X509Certificate> cert;
|
| + if (file_data != NULL) {
|
| + cert = net::X509Certificate::CreateFromBytes(
|
| + reinterpret_cast<const char*>(file_data), file_size);
|
| + }
|
| + // NOTE: Passing a NULL cert pointer if file_data was NULL is
|
| + // intentional here.
|
| +
|
| + // The handler will run the UI and delete itself when it's finished.
|
| + new SSLAddCertHandler(request, cert, render_process_id, render_view_id);
|
| + }
|
| +#endif
|
| }
|
|
|
| content::MediaObserver* ChromeContentBrowserClient::GetMediaObserver() {
|
|
|