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

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

Issue 14018004: [Android] Refactor NativeView to be able to use it for AutofillDialog. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Adding UI_EXPORT Created 7 years, 8 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 (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 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.app.Activity; 7 import android.app.Activity;
8 import android.content.Context; 8 import android.content.Context;
9 import android.content.pm.ActivityInfo; 9 import android.content.pm.ActivityInfo;
10 import android.content.pm.PackageManager; 10 import android.content.pm.PackageManager;
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
44 import org.chromium.content.browser.ContentViewGestureHandler.MotionEventDelegat e; 44 import org.chromium.content.browser.ContentViewGestureHandler.MotionEventDelegat e;
45 import org.chromium.content.browser.accessibility.AccessibilityInjector; 45 import org.chromium.content.browser.accessibility.AccessibilityInjector;
46 import org.chromium.content.browser.input.AdapterInputConnection; 46 import org.chromium.content.browser.input.AdapterInputConnection;
47 import org.chromium.content.browser.input.HandleView; 47 import org.chromium.content.browser.input.HandleView;
48 import org.chromium.content.browser.input.ImeAdapter; 48 import org.chromium.content.browser.input.ImeAdapter;
49 import org.chromium.content.browser.input.ImeAdapter.AdapterInputConnectionFacto ry; 49 import org.chromium.content.browser.input.ImeAdapter.AdapterInputConnectionFacto ry;
50 import org.chromium.content.browser.input.InsertionHandleController; 50 import org.chromium.content.browser.input.InsertionHandleController;
51 import org.chromium.content.browser.input.SelectPopupDialog; 51 import org.chromium.content.browser.input.SelectPopupDialog;
52 import org.chromium.content.browser.input.SelectionHandleController; 52 import org.chromium.content.browser.input.SelectionHandleController;
53 import org.chromium.content.common.TraceEvent; 53 import org.chromium.content.common.TraceEvent;
54 import org.chromium.ui.gfx.NativeWindow; 54 import org.chromium.ui.ViewAndroidDelegate;
55 import org.chromium.ui.ViewAndroid;
56 import org.chromium.ui.gfx.WindowAndroid;
55 57
56 import java.lang.annotation.Annotation; 58 import java.lang.annotation.Annotation;
57 import java.util.HashMap; 59 import java.util.HashMap;
58 import java.util.HashSet; 60 import java.util.HashSet;
59 import java.util.Map; 61 import java.util.Map;
60 62
61 /** 63 /**
62 * Provides a Java-side 'wrapper' around a WebContent (native) instance. 64 * Provides a Java-side 'wrapper' around a WebContent (native) instance.
63 * Contains all the major functionality necessary to manage the lifecycle of a C ontentView without 65 * Contains all the major functionality necessary to manage the lifecycle of a C ontentView without
64 * being tied to the view system. 66 * being tied to the view system.
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after
241 private final Rect mFocusPreOSKViewportRect = new Rect(); 243 private final Rect mFocusPreOSKViewportRect = new Rect();
242 244
243 private boolean mNeedUpdateOrientationChanged; 245 private boolean mNeedUpdateOrientationChanged;
244 246
245 // Used to keep track of whether we should try to undo the last zoom-to-text field operation. 247 // Used to keep track of whether we should try to undo the last zoom-to-text field operation.
246 private boolean mScrolledAndZoomedFocusedEditableNode = false; 248 private boolean mScrolledAndZoomedFocusedEditableNode = false;
247 249
248 // Whether we use hardware-accelerated drawing. 250 // Whether we use hardware-accelerated drawing.
249 private boolean mHardwareAccelerated = false; 251 private boolean mHardwareAccelerated = false;
250 252
253 private ViewAndroid mViewAndroid;
254
251 /** 255 /**
252 * Constructs a new ContentViewCore. Embedders must call initialize() after constructing 256 * Constructs a new ContentViewCore. Embedders must call initialize() after constructing
253 * a ContentViewCore and before using it. 257 * a ContentViewCore and before using it.
254 * 258 *
255 * @param context The context used to create this. 259 * @param context The context used to create this.
256 * @param personality The type of ContentViewCore being created. 260 * @param personality The type of ContentViewCore being created.
257 */ 261 */
258 public ContentViewCore(Context context, int personality) { 262 public ContentViewCore(Context context, int personality) {
259 mContext = context; 263 mContext = context;
260 264
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
302 306
303 /** 307 /**
304 * Returns a delegate that can be used to add and remove views from the Cont ainerView. 308 * Returns a delegate that can be used to add and remove views from the Cont ainerView.
305 * 309 *
306 * NOTE: Use with care, as not all ContentViewCore users setup their Contain erView in the same 310 * NOTE: Use with care, as not all ContentViewCore users setup their Contain erView in the same
307 * way. In particular, the Android WebView has limitations on what implement ation details can 311 * way. In particular, the Android WebView has limitations on what implement ation details can
308 * be provided via a child view, as they are visible in the API and could in troduce 312 * be provided via a child view, as they are visible in the API and could in troduce
309 * compatibility breaks with existing applications. If in doubt, contact the 313 * compatibility breaks with existing applications. If in doubt, contact the
310 * android_webview/OWNERS 314 * android_webview/OWNERS
311 * 315 *
312 * @return A ContainerViewDelegate that can be used to add and remove views. 316 * @return A ViewAndroidDelegate that can be used to add and remove views.
313 */ 317 */
314 @CalledByNative 318 @VisibleForTesting
315 public ContainerViewDelegate getContainerViewDelegate() { 319 public ViewAndroidDelegate getViewAndroidDelegate() {
316 return new ContainerViewDelegate() { 320 return new ViewAndroidDelegate() {
317 @Override 321 @Override
318 public void addViewToContainerView(View view) { 322 public void addViewToContainerView(View view) {
319 mContainerView.addView(view); 323 mContainerView.addView(view);
320 } 324 }
321 325
322 @Override 326 @Override
323 public void removeViewFromContainerView(View view) { 327 public void removeViewFromContainerView(View view) {
324 mContainerView.removeView(view); 328 mContainerView.removeView(view);
325 } 329 }
326 330
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
444 } 448 }
445 return false; 449 return false;
446 } 450 }
447 451
448 /** 452 /**
449 * 453 *
450 * @param containerView The view that will act as a container for all views created by this. 454 * @param containerView The view that will act as a container for all views created by this.
451 * @param internalDispatcher Handles dispatching all hidden or super methods to the 455 * @param internalDispatcher Handles dispatching all hidden or super methods to the
452 * containerView. 456 * containerView.
453 * @param nativeWebContents A pointer to the native web contents. 457 * @param nativeWebContents A pointer to the native web contents.
454 * @param nativeWindow An instance of the NativeWindow. 458 * @param windowAndroid An instance of the WindowAndroid.
459 * @param shouldCreateViewAndroid Whether ContentViewCore creates a ViewAndr oid object. WebView
460 * currently does not create ViewAndroid. If that should change,
461 * ViewAndroid should be rewritten to use Cle anupReference.
455 * @param isAccessFromFileURLsGrantedByDefault Default WebSettings configura tion. 462 * @param isAccessFromFileURLsGrantedByDefault Default WebSettings configura tion.
456 */ 463 */
457 // Perform important post-construction set up of the ContentViewCore. 464 // Perform important post-construction set up of the ContentViewCore.
458 // We do not require the containing view in the constructor to allow embedde rs to create a 465 // We do not require the containing view in the constructor to allow embedde rs to create a
459 // ContentViewCore without having fully created its containing view. The con taining view 466 // ContentViewCore without having fully created its containing view. The con taining view
460 // is a vital component of the ContentViewCore, so embedders must exercise c aution in what 467 // is a vital component of the ContentViewCore, so embedders must exercise c aution in what
461 // they do with the ContentViewCore before calling initialize(). 468 // they do with the ContentViewCore before calling initialize().
462 // We supply the nativeWebContents pointer here rather than in the construct or to allow us 469 // We supply the nativeWebContents pointer here rather than in the construct or to allow us
463 // to set the private browsing mode at a later point for the WebView impleme ntation. 470 // to set the private browsing mode at a later point for the WebView impleme ntation.
464 // Note that the caller remains the owner of the nativeWebContents and is re sponsible for 471 // Note that the caller remains the owner of the nativeWebContents and is re sponsible for
465 // deleting it after destroying the ContentViewCore. 472 // deleting it after destroying the ContentViewCore.
466 public void initialize(ViewGroup containerView, InternalAccessDelegate inter nalDispatcher, 473 public void initialize(ViewGroup containerView, InternalAccessDelegate inter nalDispatcher,
467 int nativeWebContents, NativeWindow nativeWindow, 474 int nativeWebContents, WindowAndroid windowAndroid, boolean shouldCr eateViewAndroid,
joth 2013/04/18 01:41:17 Seems odd to pass in the window here, along with b
aurimas (slooooooooow) 2013/04/18 02:49:57 Does WebView support JavascriptAppModalDialog or S
468 boolean isAccessFromFileURLsGrantedByDefault) { 475 boolean isAccessFromFileURLsGrantedByDefault) {
469 // Check whether to use hardware acceleration. This is a bit hacky, and 476 // Check whether to use hardware acceleration. This is a bit hacky, and
470 // only works if the Context is actually an Activity (as it is in the 477 // only works if the Context is actually an Activity (as it is in the
471 // Chrome application). 478 // Chrome application).
472 // 479 //
473 // What we're doing here is checking whether the app has *requested* 480 // What we're doing here is checking whether the app has *requested*
474 // hardware acceleration by setting the appropriate flags. This does not 481 // hardware acceleration by setting the appropriate flags. This does not
475 // necessarily mean we're going to *get* hardware acceleration -- that's 482 // necessarily mean we're going to *get* hardware acceleration -- that's
476 // up to the Android framework. 483 // up to the Android framework.
477 // 484 //
478 // TODO(husky): Once the native code has been updated so that the 485 // TODO(husky): Once the native code has been updated so that the
479 // HW acceleration flag can be set dynamically (Grace is doing this), 486 // HW acceleration flag can be set dynamically (Grace is doing this),
480 // move this check into onAttachedToWindow(), where we can test for 487 // move this check into onAttachedToWindow(), where we can test for
481 // HW support directly. 488 // HW support directly.
482 mHardwareAccelerated = hasHardwareAcceleration(mContext); 489 mHardwareAccelerated = hasHardwareAcceleration(mContext);
483 490
484 // Input events are delivered at vsync time on JB+. 491 // Input events are delivered at vsync time on JB+.
485 boolean inputEventsDeliveredAtVSync = 492 boolean inputEventsDeliveredAtVSync =
486 (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN); 493 (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN);
487 494
488 mContainerView = containerView; 495 mContainerView = containerView;
496
497 int viewAndroidNativePointer = 0;
498 if (shouldCreateViewAndroid) {
499 mViewAndroid = new ViewAndroid(windowAndroid, getViewAndroidDelegate ());
500 viewAndroidNativePointer = mViewAndroid.getNativePointer();
501 }
502
489 mNativeContentViewCore = nativeInit(mHardwareAccelerated, inputEventsDel iveredAtVSync, 503 mNativeContentViewCore = nativeInit(mHardwareAccelerated, inputEventsDel iveredAtVSync,
490 nativeWebContents, nativeWindow.getNativePointer()); 504 nativeWebContents, viewAndroidNativePointer, windowAndroid.getNa tivePointer());
491 mContentSettings = new ContentSettings( 505 mContentSettings = new ContentSettings(
492 this, mNativeContentViewCore, isAccessFromFileURLsGrantedByDefau lt); 506 this, mNativeContentViewCore, isAccessFromFileURLsGrantedByDefau lt);
493 initializeContainerView(internalDispatcher); 507 initializeContainerView(internalDispatcher);
494 if (mPersonality == PERSONALITY_VIEW) { 508 if (mPersonality == PERSONALITY_VIEW) {
495 setAllUserAgentOverridesInHistory(); 509 setAllUserAgentOverridesInHistory();
496 } 510 }
497 511
498 mAccessibilityInjector = AccessibilityInjector.newInstance(this); 512 mAccessibilityInjector = AccessibilityInjector.newInstance(this);
499 mAccessibilityInjector.addOrRemoveAccessibilityApisIfNecessary(); 513 mAccessibilityInjector.addOrRemoveAccessibilityApisIfNecessary();
500 514
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after
632 /** 646 /**
633 * Destroy the internal state of the ContentView. This method may only be 647 * Destroy the internal state of the ContentView. This method may only be
634 * called after the ContentView has been removed from the view system. No 648 * called after the ContentView has been removed from the view system. No
635 * other methods may be called on this ContentView after this method has 649 * other methods may be called on this ContentView after this method has
636 * been called. 650 * been called.
637 */ 651 */
638 public void destroy() { 652 public void destroy() {
639 if (mNativeContentViewCore != 0) { 653 if (mNativeContentViewCore != 0) {
640 nativeOnJavaContentViewCoreDestroyed(mNativeContentViewCore); 654 nativeOnJavaContentViewCoreDestroyed(mNativeContentViewCore);
641 } 655 }
656 if (mViewAndroid != null) mViewAndroid.destroy();
642 mNativeContentViewCore = 0; 657 mNativeContentViewCore = 0;
643 mContentSettings = null; 658 mContentSettings = null;
644 mJavaScriptInterfaces.clear(); 659 mJavaScriptInterfaces.clear();
645 mRetainedJavaScriptObjects.clear(); 660 mRetainedJavaScriptObjects.clear();
646 } 661 }
647 662
648 /** 663 /**
649 * Returns true initially, false after destroy() has been called. 664 * Returns true initially, false after destroy() has been called.
650 * It is illegal to call any other public method after destroy(). 665 * It is illegal to call any other public method after destroy().
651 */ 666 */
(...skipping 1984 matching lines...) Expand 10 before | Expand all | Expand 10 after
2636 nativeDetachExternalVideoSurface(mNativeContentViewCore, playerId); 2651 nativeDetachExternalVideoSurface(mNativeContentViewCore, playerId);
2637 } 2652 }
2638 } 2653 }
2639 2654
2640 @CalledByNative 2655 @CalledByNative
2641 private void requestExternalVideoSurface(int playerId) { 2656 private void requestExternalVideoSurface(int playerId) {
2642 getContentViewClient().onExternalVideoSurfaceRequested(playerId); 2657 getContentViewClient().onExternalVideoSurfaceRequested(playerId);
2643 } 2658 }
2644 2659
2645 private native int nativeInit(boolean hardwareAccelerated, boolean inputEven tsDeliveredAtVSync, 2660 private native int nativeInit(boolean hardwareAccelerated, boolean inputEven tsDeliveredAtVSync,
2646 int webContentsPtr, int windowAndroidPtr); 2661 int webContentsPtr, int viewAndroidPtr, int windowAndroidPtr);
2647 2662
2648 private native void nativeOnJavaContentViewCoreDestroyed(int nativeContentVi ewCoreImpl); 2663 private native void nativeOnJavaContentViewCoreDestroyed(int nativeContentVi ewCoreImpl);
2649 2664
2650 private native void nativeLoadUrl( 2665 private native void nativeLoadUrl(
2651 int nativeContentViewCoreImpl, 2666 int nativeContentViewCoreImpl,
2652 String url, 2667 String url,
2653 int loadUrlType, 2668 int loadUrlType,
2654 int transitionType, 2669 int transitionType,
2655 int uaOverrideOption, 2670 int uaOverrideOption,
2656 String extraHeaders, 2671 String extraHeaders,
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after
2805 boolean enableHiding, boolean enableShowing, boolean animate); 2820 boolean enableHiding, boolean enableShowing, boolean animate);
2806 2821
2807 private native void nativeShowImeIfNeeded(int nativeContentViewCoreImpl); 2822 private native void nativeShowImeIfNeeded(int nativeContentViewCoreImpl);
2808 2823
2809 private native void nativeAttachExternalVideoSurface( 2824 private native void nativeAttachExternalVideoSurface(
2810 int nativeContentViewCoreImpl, int playerId, Surface surface); 2825 int nativeContentViewCoreImpl, int playerId, Surface surface);
2811 2826
2812 private native void nativeDetachExternalVideoSurface( 2827 private native void nativeDetachExternalVideoSurface(
2813 int nativeContentViewCoreImpl, int playerId); 2828 int nativeContentViewCoreImpl, int playerId);
2814 } 2829 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698