| 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);
|
| + }
|
| + }
|
| };
|
| }
|
|
|
|
|