Index: content/public/android/java/src/org/chromium/content/browser/ContentViewCore.java |
diff --git a/content/public/android/java/src/org/chromium/content/browser/ContentViewCore.java b/content/public/android/java/src/org/chromium/content/browser/ContentViewCore.java |
index b424046afeeed20ac108d8113f25fa02c273b3f2..ba0c70ebeaa44f086df6ca89bf046cf7f4b47a4d 100644 |
--- a/content/public/android/java/src/org/chromium/content/browser/ContentViewCore.java |
+++ b/content/public/android/java/src/org/chromium/content/browser/ContentViewCore.java |
@@ -283,6 +283,7 @@ public class ContentViewCore |
private ActionMode mActionMode; |
private boolean mUnselectAllOnActionModeDismiss; |
private boolean mPreserveSelectionOnNextLossOfFocus; |
+ private SelectActionModeCallback.ActionHandler mActionHandler; |
// Delegate that will handle GET downloads, and be notified of completion of POST downloads. |
private ContentViewDownloadDelegate mDownloadDelegate; |
@@ -562,8 +563,8 @@ public class ContentViewCore |
@Override |
public void onReceiveResult(int resultCode, Bundle resultData) { |
getContentViewClient().onImeStateChangeRequested( |
- resultCode == InputMethodManager.RESULT_SHOWN || |
- resultCode == InputMethodManager.RESULT_UNCHANGED_SHOWN); |
+ resultCode == InputMethodManager.RESULT_SHOWN |
+ || resultCode == InputMethodManager.RESULT_UNCHANGED_SHOWN); |
if (resultCode == InputMethodManager.RESULT_SHOWN) { |
// If OSK is newly shown, delay the form focus until |
// the onSizeChanged (in order to adjust relative to the |
@@ -572,8 +573,8 @@ public class ContentViewCore |
// always be called, crbug.com/294908. |
getContainerView().getWindowVisibleDisplayFrame( |
mFocusPreOSKViewportRect); |
- } else if (hasFocus() && resultCode == |
- InputMethodManager.RESULT_UNCHANGED_SHOWN) { |
+ } else if (hasFocus() && resultCode |
+ == InputMethodManager.RESULT_UNCHANGED_SHOWN) { |
// If the OSK was already there, focus the form immediately. |
assert mWebContents != null; |
mWebContents.scrollFocusedEditableNodeIntoView(); |
@@ -1731,6 +1732,11 @@ public class ContentViewCore |
return mDownloadDelegate; |
} |
+ @VisibleForTesting |
+ public SelectActionModeCallback.ActionHandler getSelectActionHandler() { |
+ return mActionHandler; |
+ } |
+ |
private void showSelectActionBar() { |
if (mActionMode != null) { |
mActionMode.invalidate(); |
@@ -1738,119 +1744,120 @@ public class ContentViewCore |
} |
// Start a new action mode with a SelectActionModeCallback. |
- SelectActionModeCallback.ActionHandler actionHandler = |
- new SelectActionModeCallback.ActionHandler() { |
- @Override |
- public void selectAll() { |
- mImeAdapter.selectAll(); |
- } |
+ if (mActionHandler == null) { |
+ mActionHandler = new SelectActionModeCallback.ActionHandler() { |
+ @Override |
+ public void selectAll() { |
+ mImeAdapter.selectAll(); |
+ } |
- @Override |
- public void cut() { |
- mImeAdapter.cut(); |
- } |
+ @Override |
+ public void cut() { |
+ mImeAdapter.cut(); |
+ } |
- @Override |
- public void copy() { |
- mImeAdapter.copy(); |
- } |
+ @Override |
+ public void copy() { |
+ mImeAdapter.copy(); |
+ } |
- @Override |
- public void paste() { |
- mImeAdapter.paste(); |
- } |
+ @Override |
+ public void paste() { |
+ mImeAdapter.paste(); |
+ } |
- @Override |
- public void share() { |
- final String query = getSelectedText(); |
- if (TextUtils.isEmpty(query)) return; |
- |
- Intent send = new Intent(Intent.ACTION_SEND); |
- send.setType("text/plain"); |
- send.putExtra(Intent.EXTRA_TEXT, query); |
- try { |
- Intent i = Intent.createChooser(send, getContext().getString( |
- R.string.actionbar_share)); |
- i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); |
- getContext().startActivity(i); |
- } catch (android.content.ActivityNotFoundException ex) { |
- // If no app handles it, do nothing. |
+ @Override |
+ public void share() { |
+ final String query = getSelectedText(); |
+ if (TextUtils.isEmpty(query)) return; |
+ |
+ Intent send = new Intent(Intent.ACTION_SEND); |
+ send.setType("text/plain"); |
+ send.putExtra(Intent.EXTRA_TEXT, query); |
+ try { |
+ Intent i = Intent.createChooser(send, getContext().getString( |
+ R.string.actionbar_share)); |
+ i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); |
+ getContext().startActivity(i); |
+ } catch (android.content.ActivityNotFoundException ex) { |
+ // If no app handles it, do nothing. |
+ } |
} |
- } |
- @Override |
- public void search() { |
- final String query = getSelectedText(); |
- if (TextUtils.isEmpty(query)) return; |
+ @Override |
+ public void search() { |
+ final String query = getSelectedText(); |
+ if (TextUtils.isEmpty(query)) return; |
+ |
+ // See if ContentViewClient wants to override |
+ if (getContentViewClient().doesPerformWebSearch()) { |
+ getContentViewClient().performWebSearch(query); |
+ return; |
+ } |
- // See if ContentViewClient wants to override |
- if (getContentViewClient().doesPerformWebSearch()) { |
- getContentViewClient().performWebSearch(query); |
- return; |
+ Intent i = new Intent(Intent.ACTION_WEB_SEARCH); |
+ i.putExtra(SearchManager.EXTRA_NEW_SEARCH, true); |
+ i.putExtra(SearchManager.QUERY, query); |
+ i.putExtra(Browser.EXTRA_APPLICATION_ID, getContext().getPackageName()); |
+ if (!(getContext() instanceof Activity)) { |
+ i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); |
+ } |
+ try { |
+ getContext().startActivity(i); |
+ } catch (android.content.ActivityNotFoundException ex) { |
+ // If no app handles it, do nothing. |
+ } |
} |
- Intent i = new Intent(Intent.ACTION_WEB_SEARCH); |
- i.putExtra(SearchManager.EXTRA_NEW_SEARCH, true); |
- i.putExtra(SearchManager.QUERY, query); |
- i.putExtra(Browser.EXTRA_APPLICATION_ID, getContext().getPackageName()); |
- if (!(getContext() instanceof Activity)) { |
- i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); |
- } |
- try { |
- getContext().startActivity(i); |
- } catch (android.content.ActivityNotFoundException ex) { |
- // If no app handles it, do nothing. |
+ @Override |
+ public boolean isSelectionPassword() { |
+ return mImeAdapter.isSelectionPassword(); |
} |
- } |
- |
- @Override |
- public boolean isSelectionPassword() { |
- return mImeAdapter.isSelectionPassword(); |
- } |
- @Override |
- public boolean isSelectionEditable() { |
- return mFocusedNodeEditable; |
- } |
+ @Override |
+ public boolean isSelectionEditable() { |
+ return mFocusedNodeEditable; |
+ } |
- @Override |
- public void onDestroyActionMode() { |
- mActionMode = null; |
- if (mUnselectAllOnActionModeDismiss) { |
- hideTextHandles(); |
- if (isSelectionEditable()) { |
- int selectionEnd = Selection.getSelectionEnd(mEditable); |
- mInputConnection.setSelection(selectionEnd, selectionEnd); |
- } else { |
- mImeAdapter.unselect(); |
+ @Override |
+ public void onDestroyActionMode() { |
+ mActionMode = null; |
+ if (mUnselectAllOnActionModeDismiss) { |
+ hideTextHandles(); |
+ if (isSelectionEditable()) { |
+ int selectionEnd = Selection.getSelectionEnd(mEditable); |
+ mInputConnection.setSelection(selectionEnd, selectionEnd); |
+ } else { |
+ mImeAdapter.unselect(); |
+ } |
} |
+ getContentViewClient().onContextualActionBarHidden(); |
} |
- getContentViewClient().onContextualActionBarHidden(); |
- } |
- @Override |
- public boolean isShareAvailable() { |
- Intent intent = new Intent(Intent.ACTION_SEND); |
- intent.setType("text/plain"); |
- return getContext().getPackageManager().queryIntentActivities(intent, |
- PackageManager.MATCH_DEFAULT_ONLY).size() > 0; |
- } |
+ @Override |
+ public boolean isShareAvailable() { |
+ Intent intent = new Intent(Intent.ACTION_SEND); |
+ intent.setType("text/plain"); |
+ return getContext().getPackageManager().queryIntentActivities(intent, |
+ PackageManager.MATCH_DEFAULT_ONLY).size() > 0; |
+ } |
- @Override |
- public boolean isWebSearchAvailable() { |
- if (getContentViewClient().doesPerformWebSearch()) return true; |
- Intent intent = new Intent(Intent.ACTION_WEB_SEARCH); |
- intent.putExtra(SearchManager.EXTRA_NEW_SEARCH, true); |
- return getContext().getPackageManager().queryIntentActivities(intent, |
- PackageManager.MATCH_DEFAULT_ONLY).size() > 0; |
- } |
- }; |
+ @Override |
+ public boolean isWebSearchAvailable() { |
+ if (getContentViewClient().doesPerformWebSearch()) return true; |
+ Intent intent = new Intent(Intent.ACTION_WEB_SEARCH); |
+ intent.putExtra(SearchManager.EXTRA_NEW_SEARCH, true); |
+ return getContext().getPackageManager().queryIntentActivities(intent, |
+ PackageManager.MATCH_DEFAULT_ONLY).size() > 0; |
+ } |
+ }; |
+ } |
mActionMode = null; |
// On ICS, startActionMode throws an NPE when getParent() is null. |
if (mContainerView.getParent() != null) { |
assert mWebContents != null; |
mActionMode = mContainerView.startActionMode( |
- getContentViewClient().getSelectActionModeCallback(getContext(), actionHandler, |
+ getContentViewClient().getSelectActionModeCallback(getContext(), mActionHandler, |
mWebContents.isIncognito())); |
} |
mUnselectAllOnActionModeDismiss = true; |
@@ -2528,10 +2535,9 @@ public class ContentViewCore |
return mBrowserAccessibilityManager.getAccessibilityNodeProvider(); |
} |
- if (mNativeAccessibilityAllowed && |
- !mNativeAccessibilityEnabled && |
- mNativeContentViewCore != 0 && |
- Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { |
+ if (mNativeAccessibilityAllowed && !mNativeAccessibilityEnabled |
+ && mNativeContentViewCore != 0 |
+ && Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { |
mNativeAccessibilityEnabled = true; |
nativeSetAccessibilityEnabled(mNativeContentViewCore, true); |
} |
@@ -2579,8 +2585,8 @@ public class ContentViewCore |
try { |
// On JellyBean and higher, native accessibility is the default so script |
// injection is only allowed if enabled via a flag. |
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN && |
- !CommandLine.getInstance().hasSwitch( |
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN |
+ && !CommandLine.getInstance().hasSwitch( |
ContentSwitches.ENABLE_ACCESSIBILITY_SCRIPT_INJECTION)) { |
return false; |
} |