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

Side by Side Diff: content/public/android/java/src/org/chromium/content/browser/ContentViewCore.java

Issue 353163002: [Android] Switch to Gin Java Bridge implementation (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fixed AwSettingsTest#testBlockNetworkLoadsWithAudio Created 6 years, 5 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2012 The Chromium Authors. All rights reserved. 1 // Copyright 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 package org.chromium.content.browser; 5 package org.chromium.content.browser;
6 6
7 import android.annotation.SuppressLint; 7 import android.annotation.SuppressLint;
8 import android.app.Activity; 8 import android.app.Activity;
9 import android.app.SearchManager; 9 import android.app.SearchManager;
10 import android.content.ContentResolver; 10 import android.content.ContentResolver;
(...skipping 11 matching lines...) Expand all
22 import android.os.Bundle; 22 import android.os.Bundle;
23 import android.os.Handler; 23 import android.os.Handler;
24 import android.os.ResultReceiver; 24 import android.os.ResultReceiver;
25 import android.os.SystemClock; 25 import android.os.SystemClock;
26 import android.provider.Browser; 26 import android.provider.Browser;
27 import android.provider.Settings; 27 import android.provider.Settings;
28 import android.text.Editable; 28 import android.text.Editable;
29 import android.text.Selection; 29 import android.text.Selection;
30 import android.text.TextUtils; 30 import android.text.TextUtils;
31 import android.util.Log; 31 import android.util.Log;
32 import android.util.Pair;
32 import android.view.ActionMode; 33 import android.view.ActionMode;
33 import android.view.HapticFeedbackConstants; 34 import android.view.HapticFeedbackConstants;
34 import android.view.InputDevice; 35 import android.view.InputDevice;
35 import android.view.KeyEvent; 36 import android.view.KeyEvent;
36 import android.view.MotionEvent; 37 import android.view.MotionEvent;
37 import android.view.View; 38 import android.view.View;
38 import android.view.ViewGroup; 39 import android.view.ViewGroup;
39 import android.view.accessibility.AccessibilityEvent; 40 import android.view.accessibility.AccessibilityEvent;
40 import android.view.accessibility.AccessibilityManager; 41 import android.view.accessibility.AccessibilityManager;
41 import android.view.accessibility.AccessibilityManager.AccessibilityStateChangeL istener; 42 import android.view.accessibility.AccessibilityManager.AccessibilityStateChangeL istener;
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
111 private static final int TEXT_HANDLE_FADE_IN_DELAY = 300; 112 private static final int TEXT_HANDLE_FADE_IN_DELAY = 300;
112 113
113 // If the embedder adds a JavaScript interface object that contains an indir ect reference to 114 // If the embedder adds a JavaScript interface object that contains an indir ect reference to
114 // the ContentViewCore, then storing a strong ref to the interface object on the native 115 // the ContentViewCore, then storing a strong ref to the interface object on the native
115 // side would prevent garbage collection of the ContentViewCore (as that str ong ref would 116 // side would prevent garbage collection of the ContentViewCore (as that str ong ref would
116 // create a new GC root). 117 // create a new GC root).
117 // For that reason, we store only a weak reference to the interface object o n the 118 // For that reason, we store only a weak reference to the interface object o n the
118 // native side. However we still need a strong reference on the Java side to 119 // native side. However we still need a strong reference on the Java side to
119 // prevent garbage collection if the embedder doesn't maintain their own ref to the 120 // prevent garbage collection if the embedder doesn't maintain their own ref to the
120 // interface object - the Java side ref won't create a new GC root. 121 // interface object - the Java side ref won't create a new GC root.
121 // This map stores those refernces. We put into the map on addJavaScriptInte rface() 122 // This map stores those references. We put into the map on addJavaScriptInt erface()
122 // and remove from it in removeJavaScriptInterface(). 123 // and remove from it in removeJavaScriptInterface(). The annotation class i s stored for
123 private final Map<String, Object> mJavaScriptInterfaces = new HashMap<String , Object>(); 124 // the purpose of migrating injected objects from one instance of CVC to ano ther, which
125 // is used by Android WebView to support WebChromeClient.onCreateWindow scen ario.
126 private final Map<String, Pair<Object, Class>> mJavaScriptInterfaces =
127 new HashMap<String, Pair<Object, Class>>();
124 128
125 // Additionally, we keep track of all Java bound JS objects that are in use on the 129 // Additionally, we keep track of all Java bound JS objects that are in use on the
126 // current page to ensure that they are not garbage collected until the page is 130 // current page to ensure that they are not garbage collected until the page is
127 // navigated. This includes interface objects that have been removed 131 // navigated. This includes interface objects that have been removed
128 // via the removeJavaScriptInterface API and transient objects returned from methods 132 // via the removeJavaScriptInterface API and transient objects returned from methods
129 // on the interface object. Note we use HashSet rather than Set as the nativ e side 133 // on the interface object. Note we use HashSet rather than Set as the nativ e side
130 // expects HashSet (no bindings for interfaces). 134 // expects HashSet (no bindings for interfaces).
131 private final HashSet<Object> mRetainedJavaScriptObjects = new HashSet<Objec t>(); 135 private final HashSet<Object> mRetainedJavaScriptObjects = new HashSet<Objec t>();
132 136
133 /** 137 /**
(...skipping 2536 matching lines...) Expand 10 before | Expand all | Expand 10 after
2670 * when debugging hybrid Android apps, but can't be enabled for legacy appli cations due 2674 * when debugging hybrid Android apps, but can't be enabled for legacy appli cations due
2671 * to compatibility risks. 2675 * to compatibility risks.
2672 * 2676 *
2673 * @param allow Whether to allow JavaScript objects inspection. 2677 * @param allow Whether to allow JavaScript objects inspection.
2674 */ 2678 */
2675 public void setAllowJavascriptInterfacesInspection(boolean allow) { 2679 public void setAllowJavascriptInterfacesInspection(boolean allow) {
2676 nativeSetAllowJavascriptInterfacesInspection(mNativeContentViewCore, all ow); 2680 nativeSetAllowJavascriptInterfacesInspection(mNativeContentViewCore, all ow);
2677 } 2681 }
2678 2682
2679 /** 2683 /**
2684 * Returns JavaScript interface objects previously injected via
2685 * {@link #addJavascriptInterface(Object, String)}.
2686 *
2687 * @return the mapping of names to interface objects and corresponding annot ation classes
2688 */
2689 public Map<String, Pair<Object, Class>> getJavascriptInterfaces() {
2690 return mJavaScriptInterfaces;
2691 }
2692
2693 /**
2680 * This will mimic {@link #addPossiblyUnsafeJavascriptInterface(Object, Stri ng, Class)} 2694 * This will mimic {@link #addPossiblyUnsafeJavascriptInterface(Object, Stri ng, Class)}
2681 * and automatically pass in {@link JavascriptInterface} as the required ann otation. 2695 * and automatically pass in {@link JavascriptInterface} as the required ann otation.
2682 * 2696 *
2683 * @param object The Java object to inject into the ContentViewCore's JavaSc ript context. Null 2697 * @param object The Java object to inject into the ContentViewCore's JavaSc ript context. Null
2684 * values are ignored. 2698 * values are ignored.
2685 * @param name The name used to expose the instance in JavaScript. 2699 * @param name The name used to expose the instance in JavaScript.
2686 */ 2700 */
2687 public void addJavascriptInterface(Object object, String name) { 2701 public void addJavascriptInterface(Object object, String name) {
2688 addPossiblyUnsafeJavascriptInterface(object, name, JavascriptInterface.c lass); 2702 addPossiblyUnsafeJavascriptInterface(object, name, JavascriptInterface.c lass);
2689 } 2703 }
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
2726 * @param name The name used to expose the instance in 2740 * @param name The name used to expose the instance in
2727 * JavaScript. 2741 * JavaScript.
2728 * @param requiredAnnotation Restrict exposed methods to ones with this 2742 * @param requiredAnnotation Restrict exposed methods to ones with this
2729 * annotation. If {@code null} all methods are 2743 * annotation. If {@code null} all methods are
2730 * exposed. 2744 * exposed.
2731 * 2745 *
2732 */ 2746 */
2733 public void addPossiblyUnsafeJavascriptInterface(Object object, String name, 2747 public void addPossiblyUnsafeJavascriptInterface(Object object, String name,
2734 Class<? extends Annotation> requiredAnnotation) { 2748 Class<? extends Annotation> requiredAnnotation) {
2735 if (mNativeContentViewCore != 0 && object != null) { 2749 if (mNativeContentViewCore != 0 && object != null) {
2736 mJavaScriptInterfaces.put(name, object); 2750 mJavaScriptInterfaces.put(name, new Pair<Object, Class>(object, requ iredAnnotation));
2737 nativeAddJavascriptInterface(mNativeContentViewCore, object, name, r equiredAnnotation); 2751 nativeAddJavascriptInterface(mNativeContentViewCore, object, name, r equiredAnnotation);
2738 } 2752 }
2739 } 2753 }
2740 2754
2741 /** 2755 /**
2742 * Removes a previously added JavaScript interface with the given name. 2756 * Removes a previously added JavaScript interface with the given name.
2743 * 2757 *
2744 * @param name The name of the interface to remove. 2758 * @param name The name of the interface to remove.
2745 */ 2759 */
2746 public void removeJavascriptInterface(String name) { 2760 public void removeJavascriptInterface(String name) {
(...skipping 580 matching lines...) Expand 10 before | Expand all | Expand 10 after
3327 3341
3328 private native void nativeExtractSmartClipData(long nativeContentViewCoreImp l, 3342 private native void nativeExtractSmartClipData(long nativeContentViewCoreImp l,
3329 int x, int y, int w, int h); 3343 int x, int y, int w, int h);
3330 private native void nativeSetBackgroundOpaque(long nativeContentViewCoreImpl , boolean opaque); 3344 private native void nativeSetBackgroundOpaque(long nativeContentViewCoreImpl , boolean opaque);
3331 3345
3332 private native void nativeResumeResponseDeferredAtStart( 3346 private native void nativeResumeResponseDeferredAtStart(
3333 long nativeContentViewCoreImpl); 3347 long nativeContentViewCoreImpl);
3334 private native void nativeSetHasPendingNavigationTransitionForTesting( 3348 private native void nativeSetHasPendingNavigationTransitionForTesting(
3335 long nativeContentViewCoreImpl); 3349 long nativeContentViewCoreImpl);
3336 } 3350 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698