Upstream version 6.34.113.0
[platform/framework/web/crosswalk.git] / src / xwalk / runtime / android / core / src / org / xwalk / core / XWalkContentsClientBridge.java
index 1e136d9..98f4dc7 100644 (file)
@@ -30,7 +30,7 @@ import org.chromium.content.browser.DownloadInfo;
 // Help bridge callback in XWalkContentsClient to XWalkViewClient and
 // WebChromeClient; Also handle the JNI conmmunication logic.
 @JNINamespace("xwalk")
-public class XWalkContentsClientBridge extends XWalkContentsClient
+class XWalkContentsClientBridge extends XWalkContentsClient
         implements ContentViewDownloadDelegate {
 
     private XWalkView mXWalkView;
@@ -157,10 +157,12 @@ public class XWalkContentsClientBridge extends XWalkContentsClient
         if (mXWalkClient != null && mXWalkView != null)
             mXWalkClient.onReceivedHttpAuthRequest(mXWalkView, handler, host, realm);
     }
+
     @Override
-    public void onReceivedSslError(SslErrorHandler handler, SslError error) {
-        if (mXWalkClient != null && mXWalkView != null)
-            mXWalkClient.onReceivedSslError(mXWalkView, handler, error);
+    public void onReceivedSslError(ValueCallback<Boolean> callback, SslError error) {
+        if (mXWalkClient != null && mXWalkView != null) {
+            mXWalkClient.onReceivedSslError(mXWalkView, callback, error);
+        }
     }
 
     @Override
@@ -375,8 +377,20 @@ public class XWalkContentsClientBridge extends XWalkContentsClient
     @CalledByNative
     private boolean allowCertificateError(int certError, byte[] derBytes, final String url,
             final int id) {
-        // TODO(yongsheng): Implement this.
-        return false;
+        final SslCertificate cert = SslUtil.getCertificateFromDerBytes(derBytes);
+        if (cert == null) {
+            // if the certificate or the client is null, cancel the request
+            return false;
+        }
+        final SslError sslError = SslUtil.sslErrorFromNetErrorCode(certError, cert, url);
+        ValueCallback<Boolean> callback = new ValueCallback<Boolean>() {
+            @Override
+            public void onReceiveValue(Boolean value) {
+                proceedSslError(value.booleanValue(), id);
+            }
+        };
+        onReceivedSslError(callback, sslError);
+        return true;
     }
 
     private void proceedSslError(boolean proceed, int id) {