Chromium Code Reviews| OLD | NEW |
|---|---|
| 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.annotation.TargetApi; | 8 import android.annotation.TargetApi; |
| 9 import android.app.assist.AssistStructure.ViewNode; | 9 import android.app.assist.AssistStructure.ViewNode; |
| 10 import android.content.ClipData; | 10 import android.content.ClipData; |
| (...skipping 557 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 568 assert windowNativePointer != 0; | 568 assert windowNativePointer != 0; |
| 569 | 569 |
| 570 final float dipScale = windowAndroid.getDisplay().getDipScale(); | 570 final float dipScale = windowAndroid.getDisplay().getDipScale(); |
| 571 | 571 |
| 572 mRenderCoordinates.reset(); | 572 mRenderCoordinates.reset(); |
| 573 mRenderCoordinates.setDeviceScaleFactor(dipScale, windowAndroid.getConte xt()); | 573 mRenderCoordinates.setDeviceScaleFactor(dipScale, windowAndroid.getConte xt()); |
| 574 | 574 |
| 575 mJoystickScrollProvider = | 575 mJoystickScrollProvider = |
| 576 new JoystickScrollProvider(webContents, getContainerView(), wind owAndroid); | 576 new JoystickScrollProvider(webContents, getContainerView(), wind owAndroid); |
| 577 | 577 |
| 578 mImeAdapter = createImeAdapter(); | |
| 578 mNativeContentViewCore = nativeInit(webContents, mViewAndroidDelegate, w indowNativePointer, | 579 mNativeContentViewCore = nativeInit(webContents, mViewAndroidDelegate, w indowNativePointer, |
| 579 dipScale, mRetainedJavaScriptObjects); | 580 mImeAdapter.getNativePointer(), dipScale, mRetainedJavaScriptObj ects); |
| 580 mWebContents = nativeGetWebContentsAndroid(mNativeContentViewCore); | 581 mWebContents = nativeGetWebContentsAndroid(mNativeContentViewCore); |
| 581 | 582 |
| 582 setContainerViewInternals(internalDispatcher); | 583 setContainerViewInternals(internalDispatcher); |
| 583 | 584 |
| 584 initPopupZoomer(mContext); | 585 initPopupZoomer(mContext); |
| 585 mImeAdapter = createImeAdapter(); | |
| 586 attachImeAdapter(); | |
| 587 | 586 |
| 588 mSelectionPopupController = new SelectionPopupController(mContext, windo wAndroid, | 587 mSelectionPopupController = new SelectionPopupController(mContext, windo wAndroid, |
| 589 webContents, viewDelegate.getContainerView(), mRenderCoordinates , mImeAdapter); | 588 webContents, viewDelegate.getContainerView(), mRenderCoordinates ); |
| 590 mSelectionPopupController.setCallback(ActionModeCallbackHelper.EMPTY_CAL LBACK); | 589 mSelectionPopupController.setCallback(ActionModeCallbackHelper.EMPTY_CAL LBACK); |
| 591 mSelectionPopupController.setContainerView(getContainerView()); | 590 mSelectionPopupController.setContainerView(getContainerView()); |
| 592 | 591 |
| 593 mWebContentsObserver = new ContentViewWebContentsObserver(this); | 592 mWebContentsObserver = new ContentViewWebContentsObserver(this); |
| 594 | 593 |
| 595 mShouldRequestUnbufferedDispatch = Build.VERSION.SDK_INT >= Build.VERSIO N_CODES.LOLLIPOP | 594 mShouldRequestUnbufferedDispatch = Build.VERSION.SDK_INT >= Build.VERSIO N_CODES.LOLLIPOP |
| 596 && ContentFeatureList.isEnabled(ContentFeatureList.REQUEST_UNBUF FERED_DISPATCH); | 595 && ContentFeatureList.isEnabled(ContentFeatureList.REQUEST_UNBUF FERED_DISPATCH); |
| 597 } | 596 } |
| 598 | 597 |
| 599 /** | 598 /** |
| (...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 777 * onDetachedFromWindow() which is guaranteed to be called in Android WebVie w. | 776 * onDetachedFromWindow() which is guaranteed to be called in Android WebVie w. |
| 778 */ | 777 */ |
| 779 public void destroy() { | 778 public void destroy() { |
| 780 removeDisplayAndroidObserver(); | 779 removeDisplayAndroidObserver(); |
| 781 if (mNativeContentViewCore != 0) { | 780 if (mNativeContentViewCore != 0) { |
| 782 nativeOnJavaContentViewCoreDestroyed(mNativeContentViewCore); | 781 nativeOnJavaContentViewCoreDestroyed(mNativeContentViewCore); |
| 783 } | 782 } |
| 784 mWebContentsObserver.destroy(); | 783 mWebContentsObserver.destroy(); |
| 785 mWebContentsObserver = null; | 784 mWebContentsObserver = null; |
| 786 mImeAdapter.resetAndHideKeyboard(); | 785 mImeAdapter.resetAndHideKeyboard(); |
| 786 | |
|
boliu
2017/03/24 17:13:16
empty line change..
Jinsuk Kim
2017/03/27 03:19:33
Done.
| |
| 787 // TODO(igsolla): address TODO in ContentViewClient because ContentViewC lient is not | 787 // TODO(igsolla): address TODO in ContentViewClient because ContentViewC lient is not |
| 788 // currently a real Null Object. | 788 // currently a real Null Object. |
| 789 // | 789 // |
| 790 // Instead of deleting the client we use the Null Object pattern to avoi d null checks | 790 // Instead of deleting the client we use the Null Object pattern to avoi d null checks |
| 791 // in this class. | 791 // in this class. |
| 792 mContentViewClient = new ContentViewClient(); | 792 mContentViewClient = new ContentViewClient(); |
| 793 mWebContents = null; | 793 mWebContents = null; |
| 794 mNativeContentViewCore = 0; | 794 mNativeContentViewCore = 0; |
| 795 mJavaScriptInterfaces.clear(); | 795 mJavaScriptInterfaces.clear(); |
| 796 mRetainedJavaScriptObjects.clear(); | 796 mRetainedJavaScriptObjects.clear(); |
| (...skipping 948 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1745 } | 1745 } |
| 1746 | 1746 |
| 1747 mImeAdapter.onUpdateFrameInfo(mRenderCoordinates, hasInsertionMarker, | 1747 mImeAdapter.onUpdateFrameInfo(mRenderCoordinates, hasInsertionMarker, |
| 1748 isInsertionMarkerVisible, insertionMarkerHorizontal, insertionMa rkerTop, | 1748 isInsertionMarkerVisible, insertionMarkerHorizontal, insertionMa rkerTop, |
| 1749 insertionMarkerBottom); | 1749 insertionMarkerBottom); |
| 1750 | 1750 |
| 1751 TraceEvent.end("ContentViewCore:updateFrameInfo"); | 1751 TraceEvent.end("ContentViewCore:updateFrameInfo"); |
| 1752 } | 1752 } |
| 1753 | 1753 |
| 1754 @CalledByNative | 1754 @CalledByNative |
| 1755 private void updateImeAdapter(long nativeImeAdapterAndroid, int textInputTyp e, | 1755 private void updateImeAdapter(int textInputType, int textInputFlags, int tex tInputMode, |
| 1756 int textInputFlags, int textInputMode, String text, int selectionSta rt, | 1756 String text, int selectionStart, int selectionEnd, int compositionSt art, |
| 1757 int selectionEnd, int compositionStart, int compositionEnd, boolean showImeIfNeeded, | 1757 int compositionEnd, boolean showImeIfNeeded, boolean replyToRequest) { |
| 1758 boolean replyToRequest) { | |
| 1759 try { | 1758 try { |
| 1760 TraceEvent.begin("ContentViewCore.updateImeAdapter"); | 1759 TraceEvent.begin("ContentViewCore.updateImeAdapter"); |
| 1761 boolean focusedNodeEditable = (textInputType != TextInputType.NONE); | 1760 boolean focusedNodeEditable = (textInputType != TextInputType.NONE); |
| 1762 boolean focusedNodeIsPassword = (textInputType == TextInputType.PASS WORD); | 1761 boolean focusedNodeIsPassword = (textInputType == TextInputType.PASS WORD); |
| 1763 | 1762 |
| 1764 mImeAdapter.attach(nativeImeAdapterAndroid); | |
| 1765 mImeAdapter.updateState(textInputType, textInputFlags, textInputMode , showImeIfNeeded, | 1763 mImeAdapter.updateState(textInputType, textInputFlags, textInputMode , showImeIfNeeded, |
| 1766 text, selectionStart, selectionEnd, compositionStart, compos itionEnd, | 1764 text, selectionStart, selectionEnd, compositionStart, compos itionEnd, |
| 1767 replyToRequest); | 1765 replyToRequest); |
| 1768 | 1766 |
| 1769 boolean editableToggled = (focusedNodeEditable != isFocusedNodeEdita ble()); | 1767 boolean editableToggled = (focusedNodeEditable != isFocusedNodeEdita ble()); |
| 1770 mSelectionPopupController.updateSelectionState(focusedNodeEditable, | 1768 mSelectionPopupController.updateSelectionState(focusedNodeEditable, |
| 1771 focusedNodeIsPassword); | 1769 focusedNodeIsPassword); |
| 1772 if (editableToggled) { | 1770 if (editableToggled) { |
| 1773 mJoystickScrollProvider.setEnabled(!focusedNodeEditable); | 1771 mJoystickScrollProvider.setEnabled(!focusedNodeEditable); |
| 1774 getContentViewClient().onFocusedNodeEditabilityChanged(focusedNo deEditable); | 1772 getContentViewClient().onFocusedNodeEditabilityChanged(focusedNo deEditable); |
| 1775 } | 1773 } |
| 1776 } finally { | 1774 } finally { |
| 1777 TraceEvent.end("ContentViewCore.updateImeAdapter"); | 1775 TraceEvent.end("ContentViewCore.updateImeAdapter"); |
| 1778 } | 1776 } |
| 1779 } | 1777 } |
| 1780 | 1778 |
| 1781 @CalledByNative | |
| 1782 private void forceUpdateImeAdapter(long nativeImeAdapterAndroid) { | |
| 1783 mImeAdapter.attach(nativeImeAdapterAndroid); | |
| 1784 } | |
| 1785 | |
| 1786 /** | 1779 /** |
| 1787 * Called (from native) when the <select> popup needs to be shown. | 1780 * Called (from native) when the <select> popup needs to be shown. |
| 1788 * @param anchorView View anchored for popup. | 1781 * @param anchorView View anchored for popup. |
| 1789 * @param nativeSelectPopupSourceFrame The native RenderFrameHost that owns the popup. | 1782 * @param nativeSelectPopupSourceFrame The native RenderFrameHost that owns the popup. |
| 1790 * @param items Items to show. | 1783 * @param items Items to show. |
| 1791 * @param enabled POPUP_ITEM_TYPEs for items. | 1784 * @param enabled POPUP_ITEM_TYPEs for items. |
| 1792 * @param multiple Whether the popup menu should support multi-select . | 1785 * @param multiple Whether the popup menu should support multi-select . |
| 1793 * @param selectedIndices Indices of selected items. | 1786 * @param selectedIndices Indices of selected items. |
| 1794 */ | 1787 */ |
| 1795 @SuppressWarnings("unused") | 1788 @SuppressWarnings("unused") |
| (...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1886 } | 1879 } |
| 1887 | 1880 |
| 1888 private boolean canPaste() { | 1881 private boolean canPaste() { |
| 1889 return ((ClipboardManager) mContext.getSystemService( | 1882 return ((ClipboardManager) mContext.getSystemService( |
| 1890 Context.CLIPBOARD_SERVICE)).hasPrimaryClip(); | 1883 Context.CLIPBOARD_SERVICE)).hasPrimaryClip(); |
| 1891 } | 1884 } |
| 1892 | 1885 |
| 1893 @SuppressWarnings("unused") | 1886 @SuppressWarnings("unused") |
| 1894 @CalledByNative | 1887 @CalledByNative |
| 1895 private void onRenderProcessChange() { | 1888 private void onRenderProcessChange() { |
| 1896 attachImeAdapter(); | |
| 1897 // Immediately sync closed caption settings to the new render process. | 1889 // Immediately sync closed caption settings to the new render process. |
| 1898 mSystemCaptioningBridge.syncToListener(this); | 1890 mSystemCaptioningBridge.syncToListener(this); |
| 1899 } | 1891 } |
| 1900 | 1892 |
| 1901 /** | 1893 /** |
| 1902 * Attaches the native ImeAdapter object to the java ImeAdapter to allow com munication via JNI. | |
| 1903 */ | |
| 1904 public void attachImeAdapter() { | |
| 1905 if (mImeAdapter != null && mNativeContentViewCore != 0) { | |
| 1906 mImeAdapter.attach(nativeGetNativeImeAdapter(mNativeContentViewCore) ); | |
| 1907 } | |
| 1908 } | |
| 1909 | |
| 1910 /** | |
| 1911 * @see View#hasFocus() | 1894 * @see View#hasFocus() |
| 1912 */ | 1895 */ |
| 1913 @CalledByNative | 1896 @CalledByNative |
| 1914 private boolean hasFocus() { | 1897 private boolean hasFocus() { |
| 1915 // If the container view is not focusable, we consider it always focused from | 1898 // If the container view is not focusable, we consider it always focused from |
| 1916 // Chromium's point of view. | 1899 // Chromium's point of view. |
| 1917 if (!mContainerView.isFocusable()) return true; | 1900 if (!mContainerView.isFocusable()) return true; |
| 1918 return mContainerView.hasFocus(); | 1901 return mContainerView.hasFocus(); |
| 1919 } | 1902 } |
| 1920 | 1903 |
| (...skipping 658 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2579 @VisibleForTesting | 2562 @VisibleForTesting |
| 2580 public ResultReceiver getNewShowKeyboardReceiver() { | 2563 public ResultReceiver getNewShowKeyboardReceiver() { |
| 2581 if (mShowKeyboardResultReceiver == null) { | 2564 if (mShowKeyboardResultReceiver == null) { |
| 2582 // Note: the returned object will get leaked by Android framework. | 2565 // Note: the returned object will get leaked by Android framework. |
| 2583 mShowKeyboardResultReceiver = new ShowKeyboardResultReceiver(this, n ew Handler()); | 2566 mShowKeyboardResultReceiver = new ShowKeyboardResultReceiver(this, n ew Handler()); |
| 2584 } | 2567 } |
| 2585 return mShowKeyboardResultReceiver; | 2568 return mShowKeyboardResultReceiver; |
| 2586 } | 2569 } |
| 2587 | 2570 |
| 2588 private native long nativeInit(WebContents webContents, ViewAndroidDelegate viewAndroidDelegate, | 2571 private native long nativeInit(WebContents webContents, ViewAndroidDelegate viewAndroidDelegate, |
| 2589 long windowAndroidPtr, float dipScale, HashSet<Object> retainedObjec tSet); | 2572 long windowAndroidPtr, long imeAdapterPtr, float dipScale, |
| 2573 HashSet<Object> retainedObjectSet); | |
| 2590 private static native ContentViewCore nativeFromWebContentsAndroid(WebConten ts webContents); | 2574 private static native ContentViewCore nativeFromWebContentsAndroid(WebConten ts webContents); |
| 2591 | 2575 |
| 2592 private native void nativeUpdateWindowAndroid( | 2576 private native void nativeUpdateWindowAndroid( |
| 2593 long nativeContentViewCoreImpl, long windowAndroidPtr); | 2577 long nativeContentViewCoreImpl, long windowAndroidPtr); |
| 2594 private native WebContents nativeGetWebContentsAndroid(long nativeContentVie wCoreImpl); | 2578 private native WebContents nativeGetWebContentsAndroid(long nativeContentVie wCoreImpl); |
| 2595 private native WindowAndroid nativeGetJavaWindowAndroid(long nativeContentVi ewCoreImpl); | 2579 private native WindowAndroid nativeGetJavaWindowAndroid(long nativeContentVi ewCoreImpl); |
| 2596 | 2580 |
| 2597 private native void nativeOnJavaContentViewCoreDestroyed(long nativeContentV iewCoreImpl); | 2581 private native void nativeOnJavaContentViewCoreDestroyed(long nativeContentV iewCoreImpl); |
| 2598 | 2582 |
| 2599 private native void nativeSetFocus(long nativeContentViewCoreImpl, boolean f ocused); | 2583 private native void nativeSetFocus(long nativeContentViewCoreImpl, boolean f ocused); |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2644 | 2628 |
| 2645 private native void nativeSetDoubleTapSupportEnabled( | 2629 private native void nativeSetDoubleTapSupportEnabled( |
| 2646 long nativeContentViewCoreImpl, boolean enabled); | 2630 long nativeContentViewCoreImpl, boolean enabled); |
| 2647 | 2631 |
| 2648 private native void nativeSetMultiTouchZoomSupportEnabled( | 2632 private native void nativeSetMultiTouchZoomSupportEnabled( |
| 2649 long nativeContentViewCoreImpl, boolean enabled); | 2633 long nativeContentViewCoreImpl, boolean enabled); |
| 2650 | 2634 |
| 2651 private native void nativeSelectPopupMenuItems(long nativeContentViewCoreImp l, | 2635 private native void nativeSelectPopupMenuItems(long nativeContentViewCoreImp l, |
| 2652 long nativeSelectPopupSourceFrame, int[] indices); | 2636 long nativeSelectPopupSourceFrame, int[] indices); |
| 2653 | 2637 |
| 2654 | |
| 2655 private native long nativeGetNativeImeAdapter(long nativeContentViewCoreImpl ); | |
| 2656 | |
| 2657 private native int nativeGetCurrentRenderProcessId(long nativeContentViewCor eImpl); | 2638 private native int nativeGetCurrentRenderProcessId(long nativeContentViewCor eImpl); |
| 2658 | 2639 |
| 2659 private native void nativeSetAllowJavascriptInterfacesInspection( | 2640 private native void nativeSetAllowJavascriptInterfacesInspection( |
| 2660 long nativeContentViewCoreImpl, boolean allow); | 2641 long nativeContentViewCoreImpl, boolean allow); |
| 2661 | 2642 |
| 2662 private native void nativeAddJavascriptInterface(long nativeContentViewCoreI mpl, Object object, | 2643 private native void nativeAddJavascriptInterface(long nativeContentViewCoreI mpl, Object object, |
| 2663 String name, Class requiredAnnotation); | 2644 String name, Class requiredAnnotation); |
| 2664 | 2645 |
| 2665 private native void nativeRemoveJavascriptInterface(long nativeContentViewCo reImpl, | 2646 private native void nativeRemoveJavascriptInterface(long nativeContentViewCo reImpl, |
| 2666 String name); | 2647 String name); |
| 2667 | 2648 |
| 2668 private native void nativeWasResized(long nativeContentViewCoreImpl); | 2649 private native void nativeWasResized(long nativeContentViewCoreImpl); |
| 2669 | 2650 |
| 2670 private native void nativeSetAccessibilityEnabled( | 2651 private native void nativeSetAccessibilityEnabled( |
| 2671 long nativeContentViewCoreImpl, boolean enabled); | 2652 long nativeContentViewCoreImpl, boolean enabled); |
| 2672 | 2653 |
| 2673 private native void nativeSetTextTrackSettings(long nativeContentViewCoreImp l, | 2654 private native void nativeSetTextTrackSettings(long nativeContentViewCoreImp l, |
| 2674 boolean textTracksEnabled, String textTrackBackgroundColor, String t extTrackFontFamily, | 2655 boolean textTracksEnabled, String textTrackBackgroundColor, String t extTrackFontFamily, |
| 2675 String textTrackFontStyle, String textTrackFontVariant, String textT rackTextColor, | 2656 String textTrackFontStyle, String textTrackFontVariant, String textT rackTextColor, |
| 2676 String textTrackTextShadow, String textTrackTextSize); | 2657 String textTrackTextShadow, String textTrackTextSize); |
| 2677 | 2658 |
| 2678 private native void nativeSetBackgroundOpaque(long nativeContentViewCoreImpl , boolean opaque); | 2659 private native void nativeSetBackgroundOpaque(long nativeContentViewCoreImpl , boolean opaque); |
| 2679 private native boolean nativeIsTouchDragDropEnabled(long nativeContentViewCo reImpl); | 2660 private native boolean nativeIsTouchDragDropEnabled(long nativeContentViewCo reImpl); |
| 2680 private native void nativeOnDragEvent(long nativeContentViewCoreImpl, int ac tion, int x, int y, | 2661 private native void nativeOnDragEvent(long nativeContentViewCoreImpl, int ac tion, int x, int y, |
| 2681 int screenX, int screenY, String[] mimeTypes, String content); | 2662 int screenX, int screenY, String[] mimeTypes, String content); |
| 2682 } | 2663 } |
| OLD | NEW |