// Copyright (c) 2017 GitHub, Inc. // Use of this source code is governed by the MIT license that can be // found in the LICENSE file. #include "atom/browser/api/atom_api_certificate_trust.h" #import #import #import #include "atom/browser/native_window.h" #include "base/files/file_util.h" #include "base/mac/foundation_util.h" #include "base/mac/mac_util.h" #include "base/mac/scoped_cftyperef.h" #include "base/strings/sys_string_conversions.h" #include "net/cert/x509_certificate.h" #include "net/cert/cert_database.h" namespace atom { namespace api { void ShowCertificateTrustUI(atom::NativeWindow* parent_window, const scoped_refptr& cert, std::string message, const ShowTrustCallback& callback) { auto sec_policy = SecPolicyCreateBasicX509(); SecTrustRef trust = nullptr; SecTrustCreateWithCertificates(cert->CreateOSCertChainForCert(), sec_policy, &trust); // CFRelease(sec_policy); // NSWindow* window = parent_window ? // parent_window->GetNativeWindow() : // NULL; auto msg = base::SysUTF8ToNSString(message); SFCertificateTrustPanel *panel = [[SFCertificateTrustPanel alloc] init]; [panel runModalForTrust:trust message:msg]; // [panel beginSheetForWindow:window modalDelegate:nil didEndSelector:NULL contextInfo:NULL trust:trust message:msg]; auto cert_db = net::CertDatabase::GetInstance(); // This forces Chromium to reload the certificate since it might be trusted // now. cert_db->NotifyObserversCertDBChanged(cert.get()); callback.Run(true); // CFRelease(trust); // [panel release]; } } // namespace api } // namespace atom