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

Unified Diff: chrome/android/java/src/org/chromium/chrome/browser/tab/Tab.java

Issue 2407303005: Let embedder provide select action mode (Closed)
Patch Set: more comments addressed Created 4 years, 1 month 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: chrome/android/java/src/org/chromium/chrome/browser/tab/Tab.java
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/Tab.java b/chrome/android/java/src/org/chromium/chrome/browser/tab/Tab.java
index 98862b1eaa74e6bb4f33e65c497e2b62f7ad5cd0..d737c46301503ddf2e6712c83bc0c99a54be7cd7 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/tab/Tab.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/tab/Tab.java
@@ -40,6 +40,7 @@ import org.chromium.base.annotations.CalledByNative;
import org.chromium.base.metrics.RecordHistogram;
import org.chromium.blimp_public.contents.BlimpContents;
import org.chromium.chrome.R;
+import org.chromium.chrome.browser.ChromeActionModeCallback;
import org.chromium.chrome.browser.ChromeActivity;
import org.chromium.chrome.browser.ChromeApplication;
import org.chromium.chrome.browser.ChromeFeatureList;
@@ -69,13 +70,11 @@ import org.chromium.chrome.browser.ntp.NativePageAssassin;
import org.chromium.chrome.browser.ntp.NativePageFactory;
import org.chromium.chrome.browser.offlinepages.OfflinePageItem;
import org.chromium.chrome.browser.offlinepages.OfflinePageUtils;
-import org.chromium.chrome.browser.omnibox.geo.GeolocationHeader;
import org.chromium.chrome.browser.policy.PolicyAuditor;
import org.chromium.chrome.browser.prerender.ExternalPrerenderHandler;
import org.chromium.chrome.browser.printing.TabPrinter;
import org.chromium.chrome.browser.profiles.Profile;
import org.chromium.chrome.browser.rlz.RevenueStats;
-import org.chromium.chrome.browser.search_engines.TemplateUrlService;
import org.chromium.chrome.browser.snackbar.SnackbarManager;
import org.chromium.chrome.browser.ssl.SecurityStateModel;
import org.chromium.chrome.browser.tab.TabUma.TabCreationState;
@@ -397,20 +396,6 @@ public class Tab implements ViewGroup.OnHierarchyChangeListener,
}
@Override
- public void onContextualActionBarShown() {
- for (TabObserver observer : mObservers) {
- observer.onContextualActionBarVisibilityChanged(Tab.this, true);
- }
- }
-
- @Override
- public void onContextualActionBarHidden() {
- for (TabObserver observer : mObservers) {
- observer.onContextualActionBarVisibilityChanged(Tab.this, false);
- }
- }
-
- @Override
public void onImeEvent() {
// Some text was set in the page. Don't reuse it if a tab is
// open from the same external application, we might lose some
@@ -425,26 +410,6 @@ public class Tab implements ViewGroup.OnHierarchyChangeListener,
}
@Override
- public boolean doesPerformWebSearch() {
- return true;
- }
-
- @Override
- public void performWebSearch(String searchQuery) {
- if (TextUtils.isEmpty(searchQuery)) return;
- if (getTabModelSelector() == null) return;
- String url = TemplateUrlService.getInstance().getUrlForSearchQuery(searchQuery);
- String headers = GeolocationHeader.getGeoHeader(getApplicationContext(), url,
- isIncognito());
-
- LoadUrlParams loadUrlParams = new LoadUrlParams(url);
- loadUrlParams.setVerbatimHeaders(headers);
- loadUrlParams.setTransitionType(PageTransition.GENERATED);
- getTabModelSelector().openNewTab(loadUrlParams,
- TabLaunchType.FROM_LONGPRESS_FOREGROUND, Tab.this, isIncognito());
- }
-
- @Override
public int getSystemWindowInsetLeft() {
ChromeActivity activity = getActivity();
if (activity != null && activity.getInsetObserverView() != null) {
@@ -802,6 +767,29 @@ public class Tab implements ViewGroup.OnHierarchyChangeListener,
}
/**
+ * Interface used to execute an operation over each {@link TabObserver} element
+ * stored in {@link mObservers}.
+ */
+ public interface ObserverNotifier {
+ /**
+ * Method invoked when iterating through {@link mObservers}.
+ * @param observer {@link TabObserver} instance.
+ */
+ void run(TabObserver observer);
+ }
+
+ /**
+ * Iterate through {@link mObservers} to apply the given operation to each
+ * {@link mTabObserver}.
+ * @param notifier {@link ObserverNotifier} that contains the operation to perform.
+ */
+ public void notifyObserver(ObserverNotifier notifier) {
+ for (TabObserver observer : mObservers) {
+ notifier.run(observer);
+ }
+ }
+
+ /**
* Load the original image (uncompressed by spdy proxy) in this tab.
*/
void loadOriginalImage() {
@@ -887,7 +875,7 @@ public class Tab implements ViewGroup.OnHierarchyChangeListener,
* @return {@link TabModelSelector} that currently hosts the {@link TabModel} for this
* {@link Tab}.
*/
- TabModelSelector getTabModelSelector() {
+ public TabModelSelector getTabModelSelector() {
if (getActivity() == null) return null;
return getActivity().getTabModelSelector();
}
@@ -1770,13 +1758,20 @@ public class Tab implements ViewGroup.OnHierarchyChangeListener,
* {@link ContentViewCore}.
*/
protected void initContentViewCore(WebContents webContents) {
+ setContentViewCore(createContentViewCore(webContents));
+ }
+
+ private ContentViewCore createContentViewCore(WebContents webContents) {
ContentViewCore cvc = new ContentViewCore(mThemedApplicationContext, PRODUCT_VERSION);
ContentView cv = ContentView.createContentView(mThemedApplicationContext, cvc);
+ ChromeActionModeCallback actionModeCallback = new ChromeActionModeCallback(
+ mThemedApplicationContext, this);
+
cv.setContentDescription(mThemedApplicationContext.getResources().getString(
R.string.accessibility_content_view));
cvc.initialize(ViewAndroidDelegate.createBasicDelegate(cv), cv, webContents,
- getWindowAndroid());
- setContentViewCore(cvc);
+ getWindowAndroid(), actionModeCallback);
+ return cvc;
}
/**
@@ -2462,12 +2457,7 @@ public class Tab implements ViewGroup.OnHierarchyChangeListener,
@CalledByNative
public void swapWebContents(
WebContents webContents, boolean didStartLoad, boolean didFinishLoad) {
- ContentViewCore cvc = new ContentViewCore(mThemedApplicationContext, PRODUCT_VERSION);
- ContentView cv = ContentView.createContentView(mThemedApplicationContext, cvc);
- cv.setContentDescription(mThemedApplicationContext.getResources().getString(
- R.string.accessibility_content_view));
- cvc.initialize(ViewAndroidDelegate.createBasicDelegate(cv), cv, webContents,
- getWindowAndroid());
+ ContentViewCore cvc = createContentViewCore(webContents);
swapContentViewCore(cvc, false, didStartLoad, didFinishLoad);
}

Powered by Google App Engine
This is Rietveld 408576698