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

Unified Diff: android_webview/glue/java/src/com/android/webview/chromium/TokenBindingManagerAdapter.java

Issue 2298093008: android webview: Upstream android 7 glue layer (Closed)
Patch Set: Created 4 years, 3 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: android_webview/glue/java/src/com/android/webview/chromium/TokenBindingManagerAdapter.java
diff --git a/android_webview/glue/java/src/com/android/webview/chromium/TokenBindingManagerAdapter.java b/android_webview/glue/java/src/com/android/webview/chromium/TokenBindingManagerAdapter.java
new file mode 100644
index 0000000000000000000000000000000000000000..3bb802808645acf76b7f4ee1f2c5194c2e9b390e
--- /dev/null
+++ b/android_webview/glue/java/src/com/android/webview/chromium/TokenBindingManagerAdapter.java
@@ -0,0 +1,105 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package com.android.webview.chromium;
+
+import android.net.Uri;
+import android.webkit.TokenBindingService;
+import android.webkit.TokenBindingService.TokenBindingKey;
+import android.webkit.ValueCallback;
+
+import org.chromium.android_webview.AwTokenBindingManager;
+
+import java.security.KeyPair;
+
+/**
+ * Chromium implementation of TokenBindingManager. The API requires
+ * all access to TokenBindingManager to be on UI thread, so we start the
+ * chromium engines with this assumption.
+ */
+public class TokenBindingManagerAdapter extends TokenBindingService {
+
+ private AwTokenBindingManager mTokenBindingManager = new AwTokenBindingManager();
+ private WebViewChromiumFactoryProvider mProvider;
+ private boolean mEnabled;
+
+ TokenBindingManagerAdapter(WebViewChromiumFactoryProvider provider) {
+ mProvider = provider;
+ }
+
+ @Override
+ public void enableTokenBinding() {
+ // We cannot start the chromium engine yet, since doing so would
+ // initialize the UrlRequestContextGetter and then it would be too
+ // late to enable token binding.
+ if (mProvider.hasStarted()) {
+ throw new IllegalStateException(
+ "Token binding cannot be enabled after webview creation");
+ }
+ mEnabled = true;
+ mTokenBindingManager.enableTokenBinding();
+ }
+
+ @Override
+ public void getKey(Uri origin,
+ String[] algorithm,
+ final ValueCallback<TokenBindingKey> callback) {
+ startChromiumEngine();
+ if (algorithm != null && algorithm.length == 0) {
+ throw new IllegalArgumentException("algorithms cannot be empty");
+ }
+ if (algorithm != null) {
+ boolean found = false;
+ for (String alg:algorithm) {
+ if (alg.equals(TokenBindingService.KEY_ALGORITHM_ECDSAP256)) {
+ found = true; break;
+ }
+ }
+ if (!found) {
+ throw new IllegalArgumentException("no supported algorithm found");
+ }
+ }
+ // Only return the KeyPair for now. We retrieve the key from Channel Id
+ // store which does not provide a way to set/retrieve the Token
+ // Binding algorithms yet.
+ ValueCallback<KeyPair> newCallback = new ValueCallback<KeyPair>() {
+ @Override
+ public void onReceiveValue(final KeyPair value) {
+ TokenBindingKey key = new TokenBindingKey() {
+ @Override
+ public KeyPair getKeyPair() {
+ return value;
+ }
+ @Override
+ public String getAlgorithm() {
+ return TokenBindingService.KEY_ALGORITHM_ECDSAP256;
+ }
+ };
+ callback.onReceiveValue(key);
+ }
+ };
+ mTokenBindingManager.getKey(origin, null, newCallback);
+ }
+
+ @Override
+ public void deleteKey(Uri origin,
+ ValueCallback<Boolean> callback) {
+ startChromiumEngine();
+ mTokenBindingManager.deleteKey(origin, callback);
+ }
+
+ @Override
+ public void deleteAllKeys(ValueCallback<Boolean> callback) {
+ startChromiumEngine();
+ mTokenBindingManager.deleteAllKeys(callback);
+ }
+
+ private void startChromiumEngine() {
+ if (!mEnabled) {
+ throw new IllegalStateException("Token binding is not enabled");
+ }
+ // Make sure chromium engine is running.
+ mProvider.startYourEngines(false);
+ }
+}

Powered by Google App Engine
This is Rietveld 408576698