Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(493)

Unified Diff: chrome/browser/chrome_content_browser_client.cc

Issue 11266008: Fix certificate and keychain installation on Android. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Created 8 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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() {

Powered by Google App Engine
This is Rietveld 408576698