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

Unified Diff: chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabActivity.java

Issue 1731673002: Add tab reparenting (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: remove test Created 4 years, 10 months 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/customtabs/CustomTabActivity.java
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabActivity.java
index c87e2fa3432c35d22d12e63c39b08017f3010c0f..7eaecf71ec0e0dac86aaceb202104d244401f1b1 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabActivity.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabActivity.java
@@ -13,6 +13,7 @@ import android.os.IBinder;
import android.os.StrictMode;
import android.support.customtabs.CustomTabsCallback;
import android.support.customtabs.CustomTabsIntent;
+import android.support.v4.app.ActivityOptionsCompat;
import android.text.TextUtils;
import android.view.KeyEvent;
import android.view.MenuItem;
@@ -40,14 +41,17 @@ import org.chromium.chrome.browser.compositor.bottombar.OverlayPanel.StateChange
import org.chromium.chrome.browser.compositor.layouts.LayoutManagerDocument;
import org.chromium.chrome.browser.datausage.DataUseTabUIManager;
import org.chromium.chrome.browser.document.ChromeLauncherActivity;
+import org.chromium.chrome.browser.externalnav.ExternalNavigationDelegateImpl;
import org.chromium.chrome.browser.rappor.RapporServiceBridge;
import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.tab.TabIdManager;
+import org.chromium.chrome.browser.tabmodel.AsyncTabParamsManager;
import org.chromium.chrome.browser.tabmodel.EmptyTabModelObserver;
import org.chromium.chrome.browser.tabmodel.TabModel.TabLaunchType;
import org.chromium.chrome.browser.tabmodel.TabModel.TabSelectionType;
import org.chromium.chrome.browser.tabmodel.TabModelObserver;
import org.chromium.chrome.browser.tabmodel.TabModelSelectorImpl;
+import org.chromium.chrome.browser.tabmodel.TabReparentingParams;
import org.chromium.chrome.browser.toolbar.ToolbarControlContainer;
import org.chromium.chrome.browser.util.ColorUtils;
import org.chromium.chrome.browser.util.IntentUtils;
@@ -647,11 +651,43 @@ public class CustomTabActivity extends ChromeActivity {
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtra(ChromeLauncherActivity.EXTRA_IS_ALLOWED_TO_RETURN_TO_PARENT, false);
- // Temporarily allowing disk access while fixing. TODO: http://crbug.com/581860
+ boolean chromeIsDefault;
StrictMode.ThreadPolicy oldPolicy = StrictMode.allowThreadDiskReads();
StrictMode.allowThreadDiskWrites();
try {
- startActivity(intent);
+ chromeIsDefault = ExternalNavigationDelegateImpl
+ .willChromeHandleIntent(this, intent, true);
+ } finally {
+ StrictMode.setThreadPolicy(oldPolicy);
+ }
+
+ if (chromeIsDefault) {
+ // Take the activity tab and set it aside for reparenting.
+ final Tab tab = getActivityTab();
+ // TODO(yusufo): The removal should happen as a part of the callback or as a part of
+ // onDestroy when finish() gets called. Find a way to do this properly without confusing
+ // the TabModel and without hiding the tab. crbug.com/590278
+ getCurrentTabModel().removeTab(getActivityTab());
+ tab.getContentViewCore().updateWindowAndroid(null);
+
+ Runnable finalizeCallback = new Runnable() {
+ @Override
+ public void run() {
+ finish();
+ }
+ };
+ AsyncTabParamsManager.add(
+ tab.getId(), new TabReparentingParams(tab, intent, finalizeCallback));
+ intent.putExtra(IntentHandler.EXTRA_TAB_ID, tab.getId());
+ intent.setPackage(getPackageName());
+ }
+
+ // Temporarily allowing disk access while fixing. TODO: http://crbug.com/581860
+ StrictMode.allowThreadDiskReads();
+ StrictMode.allowThreadDiskWrites();
+ try {
+ startActivity(intent, ActivityOptionsCompat.makeCustomAnimation(
+ this, R.anim.abc_fade_in, R.anim.abc_fade_out).toBundle());
} finally {
StrictMode.setThreadPolicy(oldPolicy);
}

Powered by Google App Engine
This is Rietveld 408576698