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

Unified Diff: chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappActivity.java

Issue 2946223002: Replaces FullscreenActivity with SingleTabActivity. (Closed)
Patch Set: Removes the WebContentsObserver on reparenting in FullscreenWebContentsActivity Created 3 years, 5 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/webapps/WebappActivity.java
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappActivity.java
index 5e7d270aff08320fb87a5518e6837b9149f68ddc..278044de64bc00470f99bc4c3ec71d60056b9ed0 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappActivity.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappActivity.java
@@ -27,7 +27,9 @@ import org.chromium.base.metrics.RecordHistogram;
import org.chromium.blink_public.platform.WebDisplayMode;
import org.chromium.chrome.R;
import org.chromium.chrome.browser.IntentHandler;
+import org.chromium.chrome.browser.SingleTabActivity;
import org.chromium.chrome.browser.TabState;
+import org.chromium.chrome.browser.compositor.layouts.LayoutManagerDocument;
import org.chromium.chrome.browser.document.DocumentUtils;
import org.chromium.chrome.browser.fullscreen.ChromeFullscreenManager;
import org.chromium.chrome.browser.tab.EmptyTabObserver;
@@ -37,8 +39,12 @@ import org.chromium.chrome.browser.tab.TabObserver;
import org.chromium.chrome.browser.tabmodel.document.TabDelegate;
import org.chromium.chrome.browser.util.ColorUtils;
import org.chromium.chrome.browser.util.UrlUtilities;
+import org.chromium.chrome.browser.widget.ControlContainer;
+import org.chromium.content.browser.ContentViewCore;
import org.chromium.content.browser.ScreenOrientationProvider;
import org.chromium.content_public.browser.LoadUrlParams;
+import org.chromium.content_public.browser.WebContents;
+import org.chromium.content_public.browser.WebContentsObserver;
import org.chromium.net.NetworkChangeNotifier;
import org.chromium.ui.base.PageTransition;
@@ -48,7 +54,7 @@ import java.util.concurrent.TimeUnit;
/**
* Displays a webapp in a nearly UI-less Chrome (InfoBars still appear).
*/
-public class WebappActivity extends FullScreenActivity {
+public class WebappActivity extends SingleTabActivity {
public static final String WEBAPP_SCHEME = "webapp";
private static final String TAG = "WebappActivity";
@@ -66,6 +72,9 @@ public class WebappActivity extends FullScreenActivity {
private final WebappDirectoryManager mDirectoryManager;
+ private WebContents mWebContents;
+ private WebContentsObserver mWebContentsObserver;
+
protected WebappInfo mWebappInfo;
private WebappSplashScreenController mSplashController;
@@ -166,11 +175,20 @@ public class WebappActivity extends FullScreenActivity {
}
initializeUI(getSavedInstanceState());
+ ControlContainer controlContainer = (ControlContainer) findViewById(R.id.control_container);
+ initializeCompositorContent(new LayoutManagerDocument(getCompositorViewHolder()),
+ (View) controlContainer, (ViewGroup) findViewById(android.R.id.content),
+ controlContainer);
+
+ if (getFullscreenManager() != null) getFullscreenManager().setTab(getActivityTab());
mSplashController.onFinishedNativeInit(getActivityTab());
super.finishNativeInitialization();
mIsInitialized = true;
}
+ @Override
+ protected void initializeToolbar() {}
+
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
@@ -412,6 +430,13 @@ public class WebappActivity extends FullScreenActivity {
};
}
+ @Override
+ protected Tab createTab() {
+ Tab tab = super.createTab();
+ handleTabContentChanged(tab);
+ return tab;
+ }
+
protected TabObserver createTabObserver() {
return new EmptyTabObserver() {
@@ -495,6 +520,46 @@ public class WebappActivity extends FullScreenActivity {
public void onDidDetachInterstitialPage(Tab tab) {
updateUrlBar();
}
+
+ // TODO(piotrs): Remove this and clean up handleTabContentChanged() once pre-rendering
+ // is disabled and WebContents swapping can no longer happen
+ // (crbug.com/678332).
+ @Override
+ public void onContentChanged(Tab tab) {
+ assert tab == getActivityTab();
+ handleTabContentChanged(tab);
+ }
+ };
+ }
+
+ private void handleTabContentChanged(final Tab tab) {
+ assert tab != null;
+
+ WebContents webContents = tab.getWebContents();
+ if (mWebContents == webContents) return;
+
+ // Clean up any old references to the previous WebContents.
+ if (mWebContentsObserver != null) {
+ mWebContentsObserver.destroy();
+ mWebContentsObserver = null;
+ }
+
+ mWebContents = webContents;
+ if (mWebContents == null) return;
+
+ ContentViewCore.fromWebContents(webContents).setFullscreenRequiredForOrientationLock(false);
+ mWebContentsObserver = new WebContentsObserver(webContents) {
+ @Override
+ public void didFinishNavigation(String url, boolean isInMainFrame, boolean isErrorPage,
+ boolean hasCommitted, boolean isSameDocument, boolean isFragmentNavigation,
+ Integer pageTransition, int errorCode, String errorDescription,
+ int httpStatusCode) {
+ if (hasCommitted && isInMainFrame) {
+ // Notify the renderer to permanently hide the top controls since they do
+ // not apply to fullscreen content views.
+ tab.updateBrowserControlsState(tab.getBrowserControlsStateConstraints(), true);
+ }
+ }
};
}

Powered by Google App Engine
This is Rietveld 408576698