Commit 8a79ddf4 authored by Jinsuk Kim's avatar Jinsuk Kim Committed by Commit Bot

Android: New build target chrome/browser/contextmenu

This CL moves some interfaces for context menu under
chrome/browser/contextmenu and defines a new modularized target.

This allows TabDelegateFactory class to chrome/browser/tab, and
put |TabImpl.updateAttachment| back to Tab interface.

Bug: 952703
Change-Id: Ie5534ce07c8e84593e6033141501e3f3a0ba4704
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2201796Reviewed-by: default avatarTheresa  <twellington@chromium.org>
Reviewed-by: default avatarTed Choc <tedchoc@chromium.org>
Reviewed-by: default avatarTommy Nyquist <nyquist@chromium.org>
Commit-Queue: Jinsuk Kim <jinsukkim@chromium.org>
Cr-Commit-Position: refs/heads/master@{#770805}
parent 9db3eef5
......@@ -304,6 +304,7 @@ android_library("chrome_java") {
"//chrome/browser/android/lifecycle:java",
"//chrome/browser/android/thin_webview:factory_java",
"//chrome/browser/android/thin_webview:java",
"//chrome/browser/contextmenu:java",
"//chrome/browser/download/android:factory_java",
"//chrome/browser/download/android:java",
"//chrome/browser/download/android:java_resources",
......@@ -484,7 +485,6 @@ android_library("chrome_java") {
":sync_user_settings_enums_java",
":vr_build_config",
"//chrome:assist_ranker_prediction_enum_javagen",
"//chrome:context_menu_image_format_enum_javagen",
"//chrome:instant_apps_reasons_enum_javagen",
"//chrome:offline_pages_enum_javagen",
"//chrome:partner_bookmarks_javagen",
......@@ -3017,7 +3017,7 @@ generate_jni("chrome_jni_headers") {
"java/src/org/chromium/chrome/browser/tab/TabFavicon.java",
"java/src/org/chromium/chrome/browser/tab/TabImpl.java",
"java/src/org/chromium/chrome/browser/tab/TabState.java",
"java/src/org/chromium/chrome/browser/tab/TabWebContentsDelegateAndroid.java",
"java/src/org/chromium/chrome/browser/tab/TabWebContentsDelegateAndroidImpl.java",
"java/src/org/chromium/chrome/browser/tab/TrustedCdn.java",
"java/src/org/chromium/chrome/browser/tab_activity_glue/ReparentingTask.java",
"java/src/org/chromium/chrome/browser/tabmodel/TabModelJniBridge.java",
......
......@@ -335,9 +335,6 @@ chrome_java_sources = [
"java/src/org/chromium/chrome/browser/contextmenu/ChromeContextMenuItem.java",
"java/src/org/chromium/chrome/browser/contextmenu/ChromeContextMenuPopulator.java",
"java/src/org/chromium/chrome/browser/contextmenu/ContextMenuHelper.java",
"java/src/org/chromium/chrome/browser/contextmenu/ContextMenuItem.java",
"java/src/org/chromium/chrome/browser/contextmenu/ContextMenuItemDelegate.java",
"java/src/org/chromium/chrome/browser/contextmenu/ContextMenuPopulator.java",
"java/src/org/chromium/chrome/browser/contextmenu/ContextMenuTitleView.java",
"java/src/org/chromium/chrome/browser/contextmenu/ContextMenuUi.java",
"java/src/org/chromium/chrome/browser/contextmenu/PlatformContextMenuUi.java",
......@@ -1524,7 +1521,6 @@ chrome_java_sources = [
"java/src/org/chromium/chrome/browser/tab/TabBuilder.java",
"java/src/org/chromium/chrome/browser/tab/TabContextMenuItemDelegate.java",
"java/src/org/chromium/chrome/browser/tab/TabContextMenuPopulator.java",
"java/src/org/chromium/chrome/browser/tab/TabDelegateFactory.java",
"java/src/org/chromium/chrome/browser/tab/TabFavicon.java",
"java/src/org/chromium/chrome/browser/tab/TabHelpers.java",
"java/src/org/chromium/chrome/browser/tab/TabIdManager.java",
......@@ -1539,7 +1535,7 @@ chrome_java_sources = [
"java/src/org/chromium/chrome/browser/tab/TabViewAndroidDelegate.java",
"java/src/org/chromium/chrome/browser/tab/TabViewManager.java",
"java/src/org/chromium/chrome/browser/tab/TabViewProvider.java",
"java/src/org/chromium/chrome/browser/tab/TabWebContentsDelegateAndroid.java",
"java/src/org/chromium/chrome/browser/tab/TabWebContentsDelegateAndroidImpl.java",
"java/src/org/chromium/chrome/browser/tab/TabWebContentsObserver.java",
"java/src/org/chromium/chrome/browser/tab/TabWebContentsUserData.java",
"java/src/org/chromium/chrome/browser/tab/TrustedCdn.java",
......
......@@ -49,7 +49,6 @@ import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.tab.TabAssociatedApp;
import org.chromium.chrome.browser.tab.TabBrowserControlsConstraintsHelper;
import org.chromium.chrome.browser.tab.TabCreationState;
import org.chromium.chrome.browser.tab.TabImpl;
import org.chromium.chrome.browser.tab.TabLaunchType;
import org.chromium.chrome.browser.tab.TabObserver;
import org.chromium.chrome.browser.tabmodel.ChromeTabCreator;
......@@ -544,7 +543,7 @@ public class VrShell extends GvrLayout
// Reparent all existing tabs.
for (TabModel model : mActivity.getTabModelSelector().getModels()) {
for (int i = 0; i < model.getCount(); ++i) {
((TabImpl) model.getTabAt(i)).updateAttachment(window, null);
model.getTabAt(i).updateAttachment(window, null);
}
}
}
......
......@@ -39,6 +39,7 @@ import org.chromium.chrome.browser.tab.TabWebContentsDelegateAndroid;
import org.chromium.chrome.browser.ui.messages.snackbar.SnackbarManager;
import org.chromium.chrome.browser.ui.messages.snackbar.SnackbarManager.SnackbarManageable;
import org.chromium.chrome.browser.ui.native_page.NativePage;
import org.chromium.chrome.browser.webapps.WebDisplayMode;
import org.chromium.components.browser_ui.modaldialog.AppModalPresenter;
import org.chromium.components.browser_ui.util.BrowserControlsVisibilityDelegate;
import org.chromium.components.external_intents.ExternalNavigationHandler;
......@@ -183,7 +184,12 @@ public class SearchActivity extends AsyncInitializationActivity
TabDelegateFactory factory = new TabDelegateFactory() {
@Override
public TabWebContentsDelegateAndroid createWebContentsDelegate(Tab tab) {
return new TabWebContentsDelegateAndroid(tab) {
return new TabWebContentsDelegateAndroid() {
@Override
protected int getDisplayMode() {
return WebDisplayMode.BROWSER;
}
@Override
protected boolean shouldResumeRequestsForCreatedWindow() {
return false;
......
......@@ -6,7 +6,9 @@ include_rules = [
"+chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/ephemeraltab/EphemeralTabCoordinator.java",
"+chrome/android/java/src/org/chromium/chrome/browser/dom_distiller/ReaderModeManager.java",
"+chrome/android/java/src/org/chromium/chrome/browser/incognito/IncognitoUtils.java",
"+chrome/android/java/src/org/chromium/chrome/browser/media/MediaCaptureNotificationService.java",
"+chrome/android/java/src/org/chromium/chrome/browser/paint_preview/PaintPreviewTabHelper.java",
"+chrome/android/java/src/org/chromium/chrome/browser/policy/PolicyAuditor.java",
"+chrome/android/java/src/org/chromium/chrome/browser/previews/Previews.java",
"+chrome/android/java/src/org/chromium/chrome/browser/ssl/ChromeSecurityStateModelDelegate.java",
"+chrome/android/java/src/org/chromium/chrome/browser/ssl/SecurityStateModel.java",
......@@ -56,6 +58,7 @@ specific_include_rules = {
"-components",
"+components/dom_distiller/core/android/java/src/org/chromium/components/dom_distiller/core/DomDistillerUrlUtils.java",
"+components/embedder_support/android/java/src/org/chromium/components/embedder_support/delegate",
"+components/embedder_support/android/java/src/org/chromium/components/embedder_support/util",
"+components/embedder_support/android/java/src/org/chromium/components/embedder_support/view",
"+components/navigation_interception/android/java/src/org/chromium/components/navigation_interception",
......
......@@ -14,6 +14,7 @@ import android.view.View.OnAttachStateChangeListener;
import android.view.accessibility.AccessibilityEvent;
import androidx.annotation.Nullable;
import androidx.annotation.VisibleForTesting;
import org.chromium.base.ContextUtils;
import org.chromium.base.Log;
......@@ -97,7 +98,7 @@ public class TabImpl implements Tab, TabObscuringHandler.Observer {
private final ObserverList<TabObserver> mObservers = new ObserverList<>();
// Content layer Delegates
private TabWebContentsDelegateAndroid mWebContentsDelegate;
private TabWebContentsDelegateAndroidImpl mWebContentsDelegate;
/**
* If this tab was opened from another tab, store the id of the tab that
......@@ -304,14 +305,7 @@ public class TabImpl implements Tab, TabObscuringHandler.Observer {
return mWindowAndroid;
}
/**
* Update the attachment state to Window(Activity).
* @param window A new {@link WindowAndroid} to attach the tab to. If {@code null},
* the tab is being detached. See {@link ReparentingTask#detach()} for details.
* @param tabDelegateFactory The new delegate factory this tab should be using. Can be
* {@code null} even when {@code window} is not, meaning we simply want to swap out
* {@link WindowAndroid} for this tab and keep using the current delegate factory.
*/
@Override
public void updateAttachment(
@Nullable WindowAndroid window, @Nullable TabDelegateFactory tabDelegateFactory) {
// Non-null delegate factory while being detached is not valid.
......@@ -927,7 +921,8 @@ public class TabImpl implements Tab, TabObscuringHandler.Observer {
return mDelegateFactory;
}
TabWebContentsDelegateAndroid getTabWebContentsDelegateAndroid() {
@VisibleForTesting
TabWebContentsDelegateAndroidImpl getTabWebContentsDelegateAndroid() {
return mWebContentsDelegate;
}
......@@ -1286,7 +1281,7 @@ public class TabImpl implements Tab, TabObscuringHandler.Observer {
mContentView.addOnAttachStateChangeListener(mAttachStateChangeListener);
updateInteractableState();
mWebContentsDelegate = mDelegateFactory.createWebContentsDelegate(this);
mWebContentsDelegate = createWebContentsDelegate();
assert mNativeTabAndroid != 0;
TabImplJni.get().initWebContents(mNativeTabAndroid, TabImpl.this, mIncognito,
......@@ -1302,6 +1297,11 @@ public class TabImpl implements Tab, TabObscuringHandler.Observer {
}
}
private TabWebContentsDelegateAndroidImpl createWebContentsDelegate() {
TabWebContentsDelegateAndroid delegate = mDelegateFactory.createWebContentsDelegate(this);
return new TabWebContentsDelegateAndroidImpl(this, delegate);
}
/**
* Shows the given {@code nativePage} if it's not already showing.
* @param nativePage The {@link NativePage} to show.
......@@ -1345,7 +1345,7 @@ public class TabImpl implements Tab, TabObscuringHandler.Observer {
// Update the delegate factory, then recreate and propagate all delegates.
mDelegateFactory = factory;
mWebContentsDelegate = mDelegateFactory.createWebContentsDelegate(this);
mWebContentsDelegate = createWebContentsDelegate();
WebContents webContents = getWebContents();
if (webContents != null) {
......@@ -1520,9 +1520,11 @@ public class TabImpl implements Tab, TabObscuringHandler.Observer {
void destroy(long nativeTabAndroid, TabImpl caller);
void initWebContents(long nativeTabAndroid, TabImpl caller, boolean incognito,
boolean isBackgroundTab, WebContents webContents, int parentTabId,
TabWebContentsDelegateAndroid delegate, ContextMenuPopulator contextMenuPopulator);
TabWebContentsDelegateAndroidImpl delegate,
ContextMenuPopulator contextMenuPopulator);
void updateDelegates(long nativeTabAndroid, TabImpl caller,
TabWebContentsDelegateAndroid delegate, ContextMenuPopulator contextMenuPopulator);
TabWebContentsDelegateAndroidImpl delegate,
ContextMenuPopulator contextMenuPopulator);
void destroyWebContents(long nativeTabAndroid, TabImpl caller);
void releaseWebContents(long nativeTabAndroid, TabImpl caller);
void onPhysicalBackingSizeChanged(long nativeTabAndroid, TabImpl caller,
......
......@@ -42,6 +42,7 @@ import org.chromium.chrome.browser.tab.TabWebContentsDelegateAndroid;
import org.chromium.chrome.browser.tabmodel.TabCreatorManager.TabCreator;
import org.chromium.chrome.browser.tabmodel.TabModel;
import org.chromium.chrome.browser.tabmodel.TabModelUtils;
import org.chromium.chrome.browser.webapps.WebDisplayMode;
import org.chromium.content_public.browser.WebContents;
import org.chromium.ui.base.WindowAndroid;
import org.chromium.ui.modaldialog.DialogDismissalCause;
......@@ -61,11 +62,13 @@ public class ActivityTabWebContentsDelegateAndroid extends TabWebContentsDelegat
private final ArrayMap<WebContents, String> mWebContentsUrlMapping = new ArrayMap<>();
private final Tab mTab;
@Nullable
private ChromeActivity mActivity;
public ActivityTabWebContentsDelegateAndroid(Tab tab, ChromeActivity activity) {
super(tab);
mTab = tab;
mActivity = activity;
tab.addObserver(new EmptyTabObserver() {
@Override
......@@ -90,6 +93,11 @@ public class ActivityTabWebContentsDelegateAndroid extends TabWebContentsDelegat
: null;
}
@Override
protected int getDisplayMode() {
return WebDisplayMode.BROWSER;
}
@Override
public void showRepostFormWarningDialog() {
// When the dialog is visible, keeping the refresh animation active
......@@ -105,9 +113,6 @@ public class ActivityTabWebContentsDelegateAndroid extends TabWebContentsDelegat
public void webContentsCreated(WebContents sourceWebContents, long openerRenderProcessId,
long openerRenderFrameId, String frameName, String targetUrl,
WebContents newWebContents) {
super.webContentsCreated(sourceWebContents, openerRenderProcessId, openerRenderFrameId,
frameName, targetUrl, newWebContents);
// The URL can't be taken from the WebContents if it's paused. Save it for later.
assert !mWebContentsUrlMapping.containsKey(newWebContents);
mWebContentsUrlMapping.put(newWebContents, targetUrl);
......
......@@ -144,7 +144,7 @@ public class ReparentingTask implements UserData {
// TabModelSelector of this Tab, if present, gets notified to remove the tab from
// the TabModel it belonged to.
((TabImpl) mTab).updateAttachment(null, null);
mTab.updateAttachment(null, null);
}
/**
......@@ -174,7 +174,7 @@ public class ReparentingTask implements UserData {
// Assert that the tab is currently in detached state.
assert mTab.getWebContents() == null
|| mTab.getWebContents().getTopLevelNativeWindow() == null;
((TabImpl) mTab).updateAttachment(window, tabDelegateFactory);
mTab.updateAttachment(window, tabDelegateFactory);
ReparentingTaskJni.get().attachTab(mTab.getWebContents());
}
......
......@@ -29,7 +29,6 @@ import org.chromium.chrome.browser.share.ShareDelegate;
import org.chromium.chrome.browser.share.ShareDelegateImpl;
import org.chromium.chrome.browser.share.ShareHelper;
import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.tab.TabImpl;
import org.chromium.chrome.browser.tabmodel.TabModelSelector;
import org.chromium.chrome.browser.ui.RootUiCoordinator;
import org.chromium.chrome.browser.util.ChromeFileProvider;
......@@ -192,7 +191,7 @@ public class ShareIntentTest {
};
});
TestThreadUtils.runOnUiThreadBlocking(
() -> ((TabImpl) mockActivity.getActivityTab()).updateAttachment(window, null));
() -> mockActivity.getActivityTab().updateAttachment(window, null));
TestThreadUtils.runOnUiThreadBlocking(
()
......@@ -203,7 +202,7 @@ public class ShareIntentTest {
ShareHelper.setLastShareComponentName(new ComponentName("", ""));
TestThreadUtils.runOnUiThreadBlocking(() -> {
((TabImpl) mockActivity.getActivityTab()).updateAttachment(null, null);
mockActivity.getActivityTab().updateAttachment(null, null);
window.destroy();
});
}
......
......@@ -2266,9 +2266,8 @@ public class CustomTabActivityTest {
ApplicationStatus.registerStateListenerForAllActivities(listener);
PostTask.runOrPostTask(UiThreadTaskTraits.DEFAULT, () -> {
TabTestUtils.getTabWebContentsDelegate(cctActivity.getActivityTab())
.openNewTab(
"about:blank", null, null, WindowOpenDisposition.OFF_THE_RECORD, false);
TabTestUtils.openNewTab(cctActivity.getActivityTab(), "about:blank", null, null,
WindowOpenDisposition.OFF_THE_RECORD, false);
});
mCctHiddenCallback.waitForCallback("CCT not hidden.", 0);
......
......@@ -79,17 +79,15 @@ public class InfoBarAppearanceTest {
List<InfoBar> infobars;
FramebustBlockInfoBar infoBar;
TestThreadUtils.runOnUiThreadBlocking(() -> {
TabTestUtils.getTabWebContentsDelegate(mTab).showFramebustBlockInfobarForTesting(url1);
});
TestThreadUtils.runOnUiThreadBlocking(
() -> { TabTestUtils.showFramebustBlockInfobarForTesting(mTab, url1); });
infobars = mActivityTestRule.getInfoBarContainer().getInfoBarsForTesting();
assertEquals(1, infobars.size());
infoBar = (FramebustBlockInfoBar) infobars.get(0);
assertEquals(url1, infoBar.getBlockedUrl());
TestThreadUtils.runOnUiThreadBlocking(() -> {
TabTestUtils.getTabWebContentsDelegate(mTab).showFramebustBlockInfobarForTesting(url2);
});
TestThreadUtils.runOnUiThreadBlocking(
() -> { TabTestUtils.showFramebustBlockInfobarForTesting(mTab, url2); });
infobars = mActivityTestRule.getInfoBarContainer().getInfoBarsForTesting();
assertEquals(1, infobars.size());
infoBar = (FramebustBlockInfoBar) infobars.get(0);
......@@ -111,9 +109,8 @@ public class InfoBarAppearanceTest {
};
mTab.addObserver(navigationWaiter);
TestThreadUtils.runOnUiThreadBlocking(() -> {
TabTestUtils.getTabWebContentsDelegate(mTab).showFramebustBlockInfobarForTesting(url);
});
TestThreadUtils.runOnUiThreadBlocking(
() -> { TabTestUtils.showFramebustBlockInfobarForTesting(mTab, url); });
FramebustBlockInfoBar infoBar =
(FramebustBlockInfoBar) mActivityTestRule.getInfoBarContainer()
.getInfoBarsForTesting()
......@@ -135,9 +132,8 @@ public class InfoBarAppearanceTest {
public void testFramebustBlockInfoBarButtonTapped() {
String url = "http://very.evil.biz";
TestThreadUtils.runOnUiThreadBlocking(() -> {
TabTestUtils.getTabWebContentsDelegate(mTab).showFramebustBlockInfobarForTesting(url);
});
TestThreadUtils.runOnUiThreadBlocking(
() -> { TabTestUtils.showFramebustBlockInfobarForTesting(mTab, url); });
FramebustBlockInfoBar infoBar =
(FramebustBlockInfoBar) mActivityTestRule.getInfoBarContainer()
.getInfoBarsForTesting()
......
......@@ -18,7 +18,7 @@
#include "base/metrics/histogram_macros.h"
#include "base/optional.h"
#include "base/rand_util.h"
#include "chrome/android/chrome_jni_headers/TabWebContentsDelegateAndroid_jni.h"
#include "chrome/android/chrome_jni_headers/TabWebContentsDelegateAndroidImpl_jni.h"
#include "chrome/browser/android/hung_renderer_infobar_delegate.h"
#include "chrome/browser/android/tab_android.h"
#include "chrome/browser/banners/app_banner_manager_android.h"
......@@ -91,27 +91,21 @@ using content::WebContents;
namespace {
ScopedJavaLocalRef<jobject> JNI_TabWebContentsDelegateAndroid_CreateJavaRectF(
JNIEnv* env,
const gfx::RectF& rect) {
ScopedJavaLocalRef<jobject>
JNI_TabWebContentsDelegateAndroidImpl_CreateJavaRectF(JNIEnv* env,
const gfx::RectF& rect) {
return ScopedJavaLocalRef<jobject>(
Java_TabWebContentsDelegateAndroid_createRectF(env,
rect.x(),
rect.y(),
rect.right(),
rect.bottom()));
Java_TabWebContentsDelegateAndroidImpl_createRectF(
env, rect.x(), rect.y(), rect.right(), rect.bottom()));
}
ScopedJavaLocalRef<jobject> JNI_TabWebContentsDelegateAndroid_CreateJavaRect(
JNIEnv* env,
const gfx::Rect& rect) {
ScopedJavaLocalRef<jobject>
JNI_TabWebContentsDelegateAndroidImpl_CreateJavaRect(JNIEnv* env,
const gfx::Rect& rect) {
return ScopedJavaLocalRef<jobject>(
Java_TabWebContentsDelegateAndroid_createRect(
env,
static_cast<int>(rect.x()),
static_cast<int>(rect.y()),
static_cast<int>(rect.right()),
static_cast<int>(rect.bottom())));
Java_TabWebContentsDelegateAndroidImpl_createRect(
env, static_cast<int>(rect.x()), static_cast<int>(rect.y()),
static_cast<int>(rect.right()), static_cast<int>(rect.bottom())));
}
infobars::InfoBar* FindHungRendererInfoBar(InfoBarService* infobar_service) {
......@@ -236,7 +230,7 @@ blink::mojom::DisplayMode TabWebContentsDelegateAndroid::GetDisplayMode(
return blink::mojom::DisplayMode::kUndefined;
return static_cast<blink::mojom::DisplayMode>(
Java_TabWebContentsDelegateAndroid_getDisplayMode(env, obj));
Java_TabWebContentsDelegateAndroidImpl_getDisplayMode(env, obj));
}
void TabWebContentsDelegateAndroid::FindReply(
......@@ -270,19 +264,20 @@ void TabWebContentsDelegateAndroid::FindMatchRectsReply(
// Create the details object.
ScopedJavaLocalRef<jobject> details_object =
Java_TabWebContentsDelegateAndroid_createFindMatchRectsDetails(
Java_TabWebContentsDelegateAndroidImpl_createFindMatchRectsDetails(
env, version, rects.size(),
JNI_TabWebContentsDelegateAndroid_CreateJavaRectF(env, active_rect));
JNI_TabWebContentsDelegateAndroidImpl_CreateJavaRectF(env,
active_rect));
// Add the rects
for (size_t i = 0; i < rects.size(); ++i) {
Java_TabWebContentsDelegateAndroid_setMatchRectByIndex(
Java_TabWebContentsDelegateAndroidImpl_setMatchRectByIndex(
env, details_object, i,
JNI_TabWebContentsDelegateAndroid_CreateJavaRectF(env, rects[i]));
JNI_TabWebContentsDelegateAndroidImpl_CreateJavaRectF(env, rects[i]));
}
Java_TabWebContentsDelegateAndroid_onFindMatchRectsAvailable(env, obj,
details_object);
Java_TabWebContentsDelegateAndroidImpl_onFindMatchRectsAvailable(
env, obj, details_object);
}
content::JavaScriptDialogManager*
......@@ -325,7 +320,8 @@ void TabWebContentsDelegateAndroid::SetOverlayMode(bool use_overlay_mode) {
if (obj.is_null())
return;
Java_TabWebContentsDelegateAndroid_setOverlayMode(env, obj, use_overlay_mode);
Java_TabWebContentsDelegateAndroidImpl_setOverlayMode(env, obj,
use_overlay_mode);
}
void TabWebContentsDelegateAndroid::RequestPpapiBrokerPermission(
......@@ -387,7 +383,7 @@ bool TabWebContentsDelegateAndroid::ShouldResumeRequestsForCreatedWindow() {
if (obj.is_null())
return true;
return Java_TabWebContentsDelegateAndroid_shouldResumeRequestsForCreatedWindow(
return Java_TabWebContentsDelegateAndroidImpl_shouldResumeRequestsForCreatedWindow(
env, obj);
}
......@@ -422,7 +418,7 @@ void TabWebContentsDelegateAndroid::AddNewContents(
if (new_contents)
jnew_contents = new_contents->GetJavaWebContents();
handled = Java_TabWebContentsDelegateAndroid_addNewContents(
handled = Java_TabWebContentsDelegateAndroidImpl_addNewContents(
env, obj, jsource, jnew_contents, static_cast<jint>(disposition),
nullptr, user_gesture);
}
......@@ -523,17 +519,17 @@ void TabWebContentsDelegateAndroid::OnFindResultAvailable(
find_in_page::FindTabHelper::FromWebContents(web_contents)->find_result();
ScopedJavaLocalRef<jobject> selection_rect =
JNI_TabWebContentsDelegateAndroid_CreateJavaRect(
JNI_TabWebContentsDelegateAndroidImpl_CreateJavaRect(
env, find_result.selection_rect());
// Create the details object.
ScopedJavaLocalRef<jobject> details_object =
Java_TabWebContentsDelegateAndroid_createFindNotificationDetails(
Java_TabWebContentsDelegateAndroidImpl_createFindNotificationDetails(
env, find_result.number_of_matches(), selection_rect,
find_result.active_match_ordinal(), find_result.final_update());
Java_TabWebContentsDelegateAndroid_onFindResultAvailable(env, obj,
details_object);
Java_TabWebContentsDelegateAndroidImpl_onFindResultAvailable(env, obj,
details_object);
}
void TabWebContentsDelegateAndroid::OnFindTabHelperDestroyed(
......@@ -547,7 +543,7 @@ bool TabWebContentsDelegateAndroid::ShouldEnableEmbeddedMediaExperience()
ScopedJavaLocalRef<jobject> obj = GetJavaDelegate(env);
if (obj.is_null())
return false;
return Java_TabWebContentsDelegateAndroid_shouldEnableEmbeddedMediaExperience(
return Java_TabWebContentsDelegateAndroidImpl_shouldEnableEmbeddedMediaExperience(
env, obj);
}
......@@ -556,7 +552,8 @@ bool TabWebContentsDelegateAndroid::IsPictureInPictureEnabled() const {
ScopedJavaLocalRef<jobject> obj = GetJavaDelegate(env);
if (obj.is_null())
return false;
return Java_TabWebContentsDelegateAndroid_isPictureInPictureEnabled(env, obj);
return Java_TabWebContentsDelegateAndroidImpl_isPictureInPictureEnabled(env,
obj);
}
bool TabWebContentsDelegateAndroid::IsNightModeEnabled() const {
......@@ -564,7 +561,7 @@ bool TabWebContentsDelegateAndroid::IsNightModeEnabled() const {
ScopedJavaLocalRef<jobject> obj = GetJavaDelegate(env);
if (obj.is_null())
return false;
return Java_TabWebContentsDelegateAndroid_isNightModeEnabled(env, obj);
return Java_TabWebContentsDelegateAndroidImpl_isNightModeEnabled(env, obj);
}
bool TabWebContentsDelegateAndroid::CanShowAppBanners() const {
......@@ -572,7 +569,7 @@ bool TabWebContentsDelegateAndroid::CanShowAppBanners() const {
ScopedJavaLocalRef<jobject> obj = GetJavaDelegate(env);
if (obj.is_null())
return false;
return Java_TabWebContentsDelegateAndroid_canShowAppBanners(env, obj);
return Java_TabWebContentsDelegateAndroidImpl_canShowAppBanners(env, obj);
}
const GURL TabWebContentsDelegateAndroid::GetManifestScope() const {
......@@ -581,7 +578,7 @@ const GURL TabWebContentsDelegateAndroid::GetManifestScope() const {
if (obj.is_null())
return GURL();
const JavaRef<jstring>& scope =
Java_TabWebContentsDelegateAndroid_getManifestScope(env, obj);
Java_TabWebContentsDelegateAndroidImpl_getManifestScope(env, obj);
return scope.is_null() ? GURL()
: GURL(base::android::ConvertJavaStringToUTF8(scope));
}
......@@ -591,12 +588,12 @@ bool TabWebContentsDelegateAndroid::IsCustomTab() const {
ScopedJavaLocalRef<jobject> obj = GetJavaDelegate(env);
if (obj.is_null())
return false;
return Java_TabWebContentsDelegateAndroid_isCustomTab(env, obj);
return Java_TabWebContentsDelegateAndroidImpl_isCustomTab(env, obj);
}
} // namespace android
void JNI_TabWebContentsDelegateAndroid_OnRendererUnresponsive(
void JNI_TabWebContentsDelegateAndroidImpl_OnRendererUnresponsive(
JNIEnv* env,
const JavaParamRef<jobject>& java_web_contents) {
// Rate limit the number of stack dumps so we don't overwhelm our crash
......@@ -618,7 +615,7 @@ void JNI_TabWebContentsDelegateAndroid_OnRendererUnresponsive(
infobar_service, web_contents->GetMainFrame()->GetProcess());
}
void JNI_TabWebContentsDelegateAndroid_OnRendererResponsive(
void JNI_TabWebContentsDelegateAndroidImpl_OnRendererResponsive(
JNIEnv* env,
const JavaParamRef<jobject>& java_web_contents) {
content::WebContents* web_contents =
......@@ -636,7 +633,7 @@ void JNI_TabWebContentsDelegateAndroid_OnRendererResponsive(
infobar_service->RemoveInfoBar(hung_renderer_infobar);
}
void JNI_TabWebContentsDelegateAndroid_ShowFramebustBlockInfoBar(
void JNI_TabWebContentsDelegateAndroidImpl_ShowFramebustBlockInfoBar(
JNIEnv* env,
const JavaParamRef<jobject>& java_web_contents,
const JavaParamRef<jstring>& java_url) {
......
# Copyright 2020 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import("//build/config/android/config.gni")
import("//build/config/android/rules.gni")
import("//chrome/android/features/android_library_factory_tmpl.gni")
import("//chrome/browser/buildflags.gni")
android_library("java") {
sources = [
"java/src/org/chromium/chrome/browser/contextmenu/ContextMenuItem.java",
"java/src/org/chromium/chrome/browser/contextmenu/ContextMenuItemDelegate.java",
"java/src/org/chromium/chrome/browser/contextmenu/ContextMenuPopulator.java",
]
srcjar_deps = [ "//chrome:context_menu_image_format_enum_javagen" ]
deps = [
"//base:base_java",
"//components/embedder_support/android:context_menu_java",
"//content/public/android:content_java",
]
}
jinsukkim@chromium.org
sinansahin@chromium.org
# TEAM: clank-modularization@chromium.org
# COMPONENT: UI>Browser>Mobile
# OS: Android
......@@ -56,7 +56,7 @@ public interface ContextMenuItemDelegate {
* Returns whether or not the Data Reduction Proxy is enabled for input url.
* @param url Input url to check for the Data Reduction Proxy setting.
* @return true if the Data Reduction Proxy is enabled for the url.
*/
*/
boolean isDataReductionProxyEnabledForURL(String url);
/**
......@@ -168,9 +168,9 @@ public interface ContextMenuItemDelegate {
*/
void onAddToContacts(String url);
/**
* @return page url.
*/
/**
* @return page url.
*/
String getPageUrl();
/**
......
include_rules = [
"-chrome",
"+base/android/java/src/org/chromium/base",
"+content/public/android/java/src/org/chromium/content_public",
]
......@@ -14,9 +14,11 @@ android_library("java") {
"java/src/org/chromium/chrome/browser/tab/TabAttributeKeys.java",
"java/src/org/chromium/chrome/browser/tab/TabAttributes.java",
"java/src/org/chromium/chrome/browser/tab/TabCreationState.java",
"java/src/org/chromium/chrome/browser/tab/TabDelegateFactory.java",
"java/src/org/chromium/chrome/browser/tab/TabHidingType.java",
"java/src/org/chromium/chrome/browser/tab/TabLifecycle.java",
"java/src/org/chromium/chrome/browser/tab/TabObserver.java",
"java/src/org/chromium/chrome/browser/tab/TabWebContentsDelegateAndroid.java",
]
# TabSelectionType, TabLaunchType
......@@ -24,9 +26,14 @@ android_library("java") {
deps = [
"//base:base_java",
"//chrome/browser/contextmenu:java",
"//chrome/browser/ui/android/native_page:java",
"//components/browser_ui/util/android:java",
"//components/embedder_support/android:content_view_java",
"//components/embedder_support/android:web_contents_delegate_java",
"//components/external_intents/android:java",
"//components/find_in_page/android:java",
"//components/navigation_interception/android:navigation_interception_java",
"//content/public/android:content_java",
"//ui/android:ui_full_java",
]
......
......@@ -3,8 +3,13 @@ noparent = True
include_rules = [
"-chrome",
"+base/android/java/src/org/chromium/base",
"+chrome/browser/contextmenu/java",
"+chrome/browser/ui/android/native_page",
"+components/browser_ui/util/android/java",
"+components/embedder_support/android/java",
"+components/external_intents/android/java",
"+components/find_in_page/android/java",
"+components/navigation_interception/android/java",
"+content/public/android/java/src/org/chromium/content_public",
"+ui/android/java/src/org/chromium/ui/base",
]
......
......@@ -64,6 +64,17 @@ public interface Tab extends TabLifecycle {
*/
WindowAndroid getWindowAndroid();
/**
* Update the attachment state to Window(Activity).
* @param window A new {@link WindowAndroid} to attach the tab to. If {@code null},
* the tab is being detached. See {@link ReparentingTask#detach()} for details.
* @param tabDelegateFactory The new delegate factory this tab should be using. Can be
* {@code null} even when {@code window} is not, meaning we simply want to swap out
* {@link WindowAndroid} for this tab and keep using the current delegate factory.
*/
void updateAttachment(
@Nullable WindowAndroid window, @Nullable TabDelegateFactory tabDelegateFactory);
/**
* @return Content view used for rendered web contents. Can be null
* if web contents is null.
......
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.chrome.browser.tab;
import android.graphics.Rect;
import org.chromium.components.embedder_support.delegate.WebContentsDelegateAndroid;
import org.chromium.content_public.browser.WebContents;
/**
* A basic {@link WebContentsDelegateAndroid} that proxies methods into Tab.
*/
public abstract class TabWebContentsDelegateAndroid extends WebContentsDelegateAndroid {
/**
* Returns {@link WebDisplayMode} value.
*/
protected abstract int getDisplayMode();
/**
* Returns whether the page should resume accepting requests for the new window. This is
* used when window creation is asynchronous and the navigations need to be delayed.
*/
protected abstract boolean shouldResumeRequestsForCreatedWindow();
/**
* Creates a new tab with the already-created WebContents. The tab for the added
* contents should be reparented correctly when this method returns.
* @param sourceWebContents Source WebContents from which the new one is created.
* @param webContents Newly created WebContents object.
* @param disposition WindowOpenDisposition indicating how the tab should be created.
* @param initialPosition Initial position of the content to be created.
* @param userGesture {@code true} if opened by user gesture.
* @return {@code true} if new tab was created successfully with a give WebContents.
*/
protected abstract boolean addNewContents(WebContents sourceWebContents,
WebContents webContents, int disposition, Rect initialPosition, boolean userGesture);
/**
* Sets the overlay mode.
* Overlay mode means that we are currently using AndroidOverlays to display video, and
* that the compositor's surface should support alpha and not be marked as opaque.
*/
protected abstract void setOverlayMode(boolean useOverlayMode);
/**
* Provides info on web preferences for viewing downloaded media.
* @return enabled Whether embedded media experience should be enabled.
*/
protected boolean shouldEnableEmbeddedMediaExperience() {
return false;
}
/**
* @return web preferences for enabling Picture-in-Picture.
*/
protected boolean isPictureInPictureEnabled() {
return false;
}
/**
* @return Night mode enabled/disabled for this Tab. To be used to propagate
* the preferred color scheme to the renderer.
*/
protected boolean isNightModeEnabled() {
return false;
}
/**
* Return true if app banners are to be permitted in this tab. May need to be overridden.
* @return true if app banners are permitted, and false otherwise.
*/
protected boolean canShowAppBanners() {
return true;
}
/**
* @return the WebAPK manifest scope. This gives frames within the scope increased privileges
* such as autoplaying media unmuted.
*/
protected String getManifestScope() {
return null;
}
/**
* Checks if the associated tab is currently presented in the context of custom tabs.
* @return true if this is currently a custom tab.
*/
protected boolean isCustomTab() {
return false;
}
}
......@@ -10,6 +10,7 @@ import org.chromium.base.ObserverList;
import org.chromium.base.ObserverList.RewindableIterator;
import org.chromium.content_public.browser.WebContents;
import org.chromium.content_public.browser.test.util.TestThreadUtils;
import org.chromium.content_public.common.ResourceRequestBody;
/**
* Exposes helper functions to be used in tests to instrument tab interaction.
......@@ -131,10 +132,33 @@ public class TabTestUtils {
* @param tab {@link Tab} object.
* @return {@link TabWebContentsDelegateAndroid} object for a given tab.
*/
public static TabWebContentsDelegateAndroid getTabWebContentsDelegate(Tab tab) {
public static TabWebContentsDelegateAndroidImpl getTabWebContentsDelegate(Tab tab) {
return ((TabImpl) tab).getTabWebContentsDelegateAndroid();
}
/**
* Open a new tab.
* @param tab {@link Tab} object.
* @param url URL to open.
* @param extraHeaders Extra headers to apply when requesting the tab's URL.
* @param postData Post-data to include in the tab URL's request body.
* @param disposition The new tab disposition, defined in
* //ui/base/mojo/window_open_disposition.mojom.
* @param isRendererInitiated Whether or not the renderer initiated this action.
*/
public static void openNewTab(Tab tab, String url, String extraHeaders,
ResourceRequestBody postData, int disposition, boolean isRendererInitiated) {
getTabWebContentsDelegate(tab).openNewTab(
url, extraHeaders, postData, disposition, isRendererInitiated);
}
/**
* Show {@link org.chromium.chrome.browser.infobar.FrameBustBlockInfoBar}.
*/
public static void showFramebustBlockInfobarForTesting(Tab tab, String url) {
getTabWebContentsDelegate(tab).showFramebustBlockInfobarForTesting(url);
}
/**
* Sets whether the tab is showing an error page. This is reset whenever the tab finishes a
* navigation.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment