| Index: chrome/android/java/src/org/chromium/chrome/browser/tab/TabWebContentsDelegateAndroid.java
|
| diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabWebContentsDelegateAndroid.java b/chrome/android/java/src/org/chromium/chrome/browser/tab/TabWebContentsDelegateAndroid.java
|
| index 23946c5b7f9cc462876a3584ca222e51b1d182cc..a745b58e28b69265c620146b7102efdd0fb1ad37 100644
|
| --- a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabWebContentsDelegateAndroid.java
|
| +++ b/chrome/android/java/src/org/chromium/chrome/browser/tab/TabWebContentsDelegateAndroid.java
|
| @@ -5,6 +5,7 @@
|
| package org.chromium.chrome.browser.tab;
|
|
|
| import android.annotation.TargetApi;
|
| +import android.app.Activity;
|
| import android.app.ActivityManager;
|
| import android.content.Context;
|
| import android.content.Intent;
|
| @@ -22,7 +23,6 @@ import org.chromium.base.ObserverList.RewindableIterator;
|
| import org.chromium.base.annotations.CalledByNative;
|
| import org.chromium.blink_public.platform.WebDisplayMode;
|
| import org.chromium.chrome.R;
|
| -import org.chromium.chrome.browser.ChromeActivity;
|
| import org.chromium.chrome.browser.ChromeApplication;
|
| import org.chromium.chrome.browser.RepostFormWarningDialog;
|
| import org.chromium.chrome.browser.document.DocumentUtils;
|
| @@ -64,8 +64,7 @@ public class TabWebContentsDelegateAndroid extends WebContentsDelegateAndroid {
|
| /** Used for logging. */
|
| private static final String TAG = "WebContentsDelegate";
|
|
|
| - private final Tab mTab;
|
| - protected final ChromeActivity mActivity;
|
| + protected final Tab mTab;
|
|
|
| private FindResultListener mFindResultListener;
|
|
|
| @@ -77,23 +76,25 @@ public class TabWebContentsDelegateAndroid extends WebContentsDelegateAndroid {
|
| private final Runnable mCloseContentsRunnable = new Runnable() {
|
| @Override
|
| public void run() {
|
| - boolean isSelected = mActivity.getTabModelSelector().getCurrentTab() == mTab;
|
| - mActivity.getTabModelSelector().closeTab(mTab);
|
| + boolean isSelected = mTab.getTabModelSelector().getCurrentTab() == mTab;
|
| + mTab.getTabModelSelector().closeTab(mTab);
|
|
|
| // If the parent Tab belongs to another Activity, fire the Intent to bring it back.
|
| if (isSelected && mTab.getParentIntent() != null
|
| - && mActivity.getIntent() != mTab.getParentIntent()) {
|
| - boolean mayLaunch = FeatureUtilities.isDocumentMode(mActivity)
|
| + && mTab.getActivity().getIntent() != mTab.getParentIntent()) {
|
| + boolean mayLaunch = FeatureUtilities.isDocumentMode(mTab.getApplicationContext())
|
| ? isParentInAndroidOverview() : true;
|
| - if (mayLaunch) mActivity.startActivity(mTab.getParentIntent());
|
| + if (mayLaunch) {
|
| + mTab.getActivity().startActivity(mTab.getParentIntent());
|
| + }
|
| }
|
| }
|
|
|
| /** If the API allows it, returns whether a Task still exists for the parent Activity. */
|
| @TargetApi(Build.VERSION_CODES.LOLLIPOP)
|
| private boolean isParentInAndroidOverview() {
|
| - ActivityManager activityManager =
|
| - (ActivityManager) mActivity.getSystemService(Context.ACTIVITY_SERVICE);
|
| + ActivityManager activityManager = (ActivityManager) mTab.getApplicationContext()
|
| + .getSystemService(Context.ACTIVITY_SERVICE);
|
| for (ActivityManager.AppTask task : activityManager.getAppTasks()) {
|
| Intent taskIntent = DocumentUtils.getBaseIntentFromTask(task);
|
| if (taskIntent != null && taskIntent.filterEquals(mTab.getParentIntent())) {
|
| @@ -104,9 +105,8 @@ public class TabWebContentsDelegateAndroid extends WebContentsDelegateAndroid {
|
| }
|
| };
|
|
|
| - public TabWebContentsDelegateAndroid(Tab tab, ChromeActivity activity) {
|
| + public TabWebContentsDelegateAndroid(Tab tab) {
|
| mTab = tab;
|
| - mActivity = activity;
|
| mHandler = new Handler();
|
| }
|
|
|
| @@ -217,7 +217,8 @@ public class TabWebContentsDelegateAndroid extends WebContentsDelegateAndroid {
|
| mTab.getWebContents().getNavigationController().continuePendingReload();
|
| }
|
| });
|
| - warningDialog.show(mActivity.getFragmentManager(), null);
|
| + if (mTab.getActivity() == null) return;
|
| + warningDialog.show(mTab.getActivity().getFragmentManager(), null);
|
| }
|
|
|
| @Override
|
| @@ -272,7 +273,7 @@ public class TabWebContentsDelegateAndroid extends WebContentsDelegateAndroid {
|
| mWebContentsUrlMapping = Pair.create(newWebContents, targetUrl);
|
|
|
| // TODO(dfalcantara): Re-remove this once crbug.com/508366 is fixed.
|
| - TabCreator tabCreator = mActivity.getTabCreator(mTab.isIncognito());
|
| + TabCreator tabCreator = mTab.getActivity().getTabCreator(mTab.isIncognito());
|
|
|
| if (tabCreator != null && tabCreator.createsTabsAsynchronously()) {
|
| DocumentWebContentsDelegate.getInstance().attachDelegate(newWebContents);
|
| @@ -310,13 +311,13 @@ public class TabWebContentsDelegateAndroid extends WebContentsDelegateAndroid {
|
| protected TabModel getTabModel() {
|
| // TODO(dfalcantara): Remove this when DocumentActivity.getTabModelSelector()
|
| // can return a TabModelSelector that activateContents() can use.
|
| - return mActivity.getTabModelSelector().getModel(mTab.isIncognito());
|
| + return mTab.getTabModelSelector().getModel(mTab.isIncognito());
|
| }
|
|
|
| @CalledByNative
|
| public boolean shouldResumeRequestsForCreatedWindow() {
|
| // Pause the WebContents if an Activity has to be created for it first.
|
| - TabCreator tabCreator = mActivity.getTabCreator(mTab.isIncognito());
|
| + TabCreator tabCreator = mTab.getActivity().getTabCreator(mTab.isIncognito());
|
| assert tabCreator != null;
|
| return !tabCreator.createsTabsAsynchronously();
|
| }
|
| @@ -326,7 +327,7 @@ public class TabWebContentsDelegateAndroid extends WebContentsDelegateAndroid {
|
| int disposition, Rect initialPosition, boolean userGesture) {
|
| assert mWebContentsUrlMapping.first == webContents;
|
|
|
| - TabCreator tabCreator = mActivity.getTabCreator(mTab.isIncognito());
|
| + TabCreator tabCreator = mTab.getActivity().getTabCreator(mTab.isIncognito());
|
| assert tabCreator != null;
|
|
|
| // Grab the URL, which might not be available via the Tab.
|
| @@ -356,7 +357,7 @@ public class TabWebContentsDelegateAndroid extends WebContentsDelegateAndroid {
|
| public void activateContents() {
|
| boolean activityIsDestroyed = false;
|
| if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
|
| - activityIsDestroyed = mActivity.isDestroyed();
|
| + activityIsDestroyed = mTab.getActivity().isDestroyed();
|
| }
|
| if (activityIsDestroyed || !mTab.isInitialized()) {
|
| Log.e(TAG, "Activity destroyed before calling activateContents(). Bailing out.");
|
| @@ -400,21 +401,23 @@ public class TabWebContentsDelegateAndroid extends WebContentsDelegateAndroid {
|
|
|
| @Override
|
| public boolean takeFocus(boolean reverse) {
|
| + Activity activity = mTab.getActivity();
|
| + if (activity == null) return false;
|
| if (reverse) {
|
| - View menuButton = mActivity.findViewById(R.id.menu_button);
|
| + View menuButton = activity.findViewById(R.id.menu_button);
|
| if (menuButton == null || !menuButton.isShown()) {
|
| - menuButton = mActivity.findViewById(R.id.document_menu_button);
|
| + menuButton = activity.findViewById(R.id.document_menu_button);
|
| }
|
| if (menuButton != null && menuButton.isShown()) {
|
| return menuButton.requestFocus();
|
| }
|
|
|
| - View tabSwitcherButton = mActivity.findViewById(R.id.tab_switcher_button);
|
| + View tabSwitcherButton = activity.findViewById(R.id.tab_switcher_button);
|
| if (tabSwitcherButton != null && tabSwitcherButton.isShown()) {
|
| return tabSwitcherButton.requestFocus();
|
| }
|
| } else {
|
| - View urlBar = mActivity.findViewById(R.id.url_bar);
|
| + View urlBar = activity.findViewById(R.id.url_bar);
|
| if (urlBar != null) return urlBar.requestFocus();
|
| }
|
| return false;
|
| @@ -422,8 +425,8 @@ public class TabWebContentsDelegateAndroid extends WebContentsDelegateAndroid {
|
|
|
| @Override
|
| public void handleKeyboardEvent(KeyEvent event) {
|
| - if (event.getAction() == KeyEvent.ACTION_DOWN) {
|
| - if (mActivity.onKeyDown(event.getKeyCode(), event)) return;
|
| + if (event.getAction() == KeyEvent.ACTION_DOWN && mTab.getActivity() != null) {
|
| + if (mTab.getActivity().onKeyDown(event.getKeyCode(), event)) return;
|
|
|
| // Handle the Escape key here (instead of in KeyboardShortcuts.java), so it doesn't
|
| // interfere with other parts of the activity (e.g. the URL bar).
|
| @@ -458,7 +461,7 @@ public class TabWebContentsDelegateAndroid extends WebContentsDelegateAndroid {
|
| case KeyEvent.KEYCODE_MEDIA_CLOSE:
|
| case KeyEvent.KEYCODE_MEDIA_EJECT:
|
| case KeyEvent.KEYCODE_MEDIA_AUDIO_TRACK:
|
| - AudioManager am = (AudioManager) mActivity.getSystemService(
|
| + AudioManager am = (AudioManager) mTab.getApplicationContext().getSystemService(
|
| Context.AUDIO_SERVICE);
|
| am.dispatchMediaKeyEvent(e);
|
| break;
|
|
|