Bug 1258470 - Part 2: MOZ_ANDROID_APZ implies Tabs.VIEWPORT_CHANGED event is no longer fired. draft
authorNick Alexander <nalexander@mozilla.com>
Mon, 20 Jun 2016 17:09:54 -0700
changeset 380994 5ba4e0d2b6bfe10df53ee30966ca419c00220d3c
parent 380993 ac67aa8d5d7f5fd3e0125dc1a7aadecad1000536
child 380995 7bbc493d4480356fa29d46629a20e5b75b13df51
push id21383
push usernalexander@mozilla.com
push dateFri, 24 Jun 2016 00:16:43 +0000
bugs1258470
milestone50.0a1
Bug 1258470 - Part 2: MOZ_ANDROID_APZ implies Tabs.VIEWPORT_CHANGED event is no longer fired. See https://dxr.mozilla.org/mozilla-central/source/widget/android/nsWindow.cpp#3604-3627. MozReview-Commit-ID: Ctol6HnrJqb
mobile/android/base/java/org/mozilla/gecko/Tabs.java
mobile/android/base/java/org/mozilla/gecko/gfx/LayerView.java
mobile/android/chrome/content/browser.js
--- a/mobile/android/base/java/org/mozilla/gecko/Tabs.java
+++ b/mobile/android/base/java/org/mozilla/gecko/Tabs.java
@@ -540,20 +540,16 @@ public class Tabs implements GeckoEventL
                 tab.setHasFeeds(true);
                 notifyListeners(tab, TabEvents.LINK_FEED);
             } else if (event.equals("Link:OpenSearch")) {
                 boolean visible = message.getBoolean("visible");
                 tab.setHasOpenSearch(visible);
             } else if (event.equals("DesktopMode:Changed")) {
                 tab.setDesktopMode(message.getBoolean("desktopMode"));
                 notifyListeners(tab, TabEvents.DESKTOP_MODE_CHANGE);
-            } else if (event.equals("Tab:ViewportMetadata")) {
-                tab.setZoomConstraints(new ZoomConstraints(message));
-                tab.setIsRTL(message.getBoolean("isRTL"));
-                notifyListeners(tab, TabEvents.VIEWPORT_CHANGE);
             } else if (event.equals("Tab:StreamStart")) {
                 tab.setRecording(true);
                 notifyListeners(tab, TabEvents.RECORDING_CHANGE);
             } else if (event.equals("Tab:StreamStop")) {
                 tab.setRecording(false);
                 notifyListeners(tab, TabEvents.RECORDING_CHANGE);
             } else if (event.equals("Tab:AudioPlayingChange")) {
                 tab.setIsAudioPlaying(message.getBoolean("isAudioPlaying"));
@@ -607,17 +603,16 @@ public class Tabs implements GeckoEventL
         ADDED,
         RESTORED,
         LOCATION_CHANGE,
         MENU_UPDATED,
         PAGE_SHOW,
         LINK_FEED,
         SECURITY_CHANGE,
         DESKTOP_MODE_CHANGE,
-        VIEWPORT_CHANGE,
         RECORDING_CHANGE,
         BOOKMARK_ADDED,
         BOOKMARK_REMOVED,
         AUDIO_PLAYING_CHANGE,
     }
 
     public void notifyListeners(Tab tab, TabEvents msg) {
         notifyListeners(tab, msg, "");
--- a/mobile/android/base/java/org/mozilla/gecko/gfx/LayerView.java
+++ b/mobile/android/base/java/org/mozilla/gecko/gfx/LayerView.java
@@ -13,18 +13,16 @@ import org.mozilla.gecko.annotation.Robo
 import org.mozilla.gecko.annotation.WrapForJNI;
 import org.mozilla.gecko.AppConstants;
 import org.mozilla.gecko.AppConstants.Versions;
 import org.mozilla.gecko.EventDispatcher;
 import org.mozilla.gecko.GeckoAccessibility;
 import org.mozilla.gecko.GeckoAppShell;
 import org.mozilla.gecko.GeckoEvent;
 import org.mozilla.gecko.GeckoThread;
-import org.mozilla.gecko.Tab;
-import org.mozilla.gecko.Tabs;
 import org.mozilla.gecko.ZoomConstraints;
 
 import android.content.Context;
 import android.graphics.Canvas;
 import android.graphics.Color;
 import android.graphics.Point;
 import android.graphics.PointF;
 import android.graphics.Rect;
@@ -39,17 +37,17 @@ import android.view.View;
 import android.view.ViewGroup;
 import android.view.InputDevice;
 import android.widget.LinearLayout;
 import android.widget.ScrollView;
 
 /**
  * A view rendered by the layer compositor.
  */
-public class LayerView extends ScrollView implements Tabs.OnTabsChangedListener {
+public class LayerView extends ScrollView {
     private static final String LOGTAG = "GeckoLayerView";
 
     private GeckoLayerClient mLayerClient;
     private PanZoomController mPanZoomController;
     private DynamicToolbarAnimator mToolbarAnimator;
     private GLController mGLController;
     private LayerRenderer mRenderer;
     /* Must be a PAINT_xxx constant */
@@ -105,17 +103,16 @@ public class LayerView extends ScrollVie
         mBackgroundColor = Color.WHITE;
         mFullScreenState = FullScreenState.NONE;
 
         if (Versions.feature14Plus) {
             mOverscroll = new OverscrollEdgeEffect(this);
         } else {
             mOverscroll = null;
         }
-        Tabs.registerOnTabsChangedListener(this);
     }
 
     public LayerView(Context context) {
         this(context, null);
     }
 
     public void initializeView(EventDispatcher eventDispatcher) {
         mLayerClient = new GeckoLayerClient(getContext(), this, eventDispatcher);
@@ -194,17 +191,16 @@ public class LayerView extends ScrollVie
             mRenderer.destroy();
         }
         if (mGLController != null) {
             if (mGLController.mView == this) {
                 mGLController.mView = null;
             }
             mGLController = null;
         }
-        Tabs.unregisterOnTabsChangedListener(this);
     }
 
     @Override
     public void dispatchDraw(final Canvas canvas) {
         super.dispatchDraw(canvas);
 
         // We must have a layer client to get valid viewport metrics
         if (mLayerClient != null && mOverscroll != null) {
@@ -363,24 +359,16 @@ public class LayerView extends ScrollVie
     }
 
     void setSurfaceBackgroundColor(int newColor) {
         if (mSurfaceView != null) {
             mSurfaceView.setBackgroundColor(newColor);
         }
     }
 
-    public void setZoomConstraints(ZoomConstraints constraints) {
-        mLayerClient.setZoomConstraints(constraints);
-    }
-
-    public void setIsRTL(boolean aIsRTL) {
-        mLayerClient.setIsRTL(aIsRTL);
-    }
-
     @Override
     public boolean onKeyDown(int keyCode, KeyEvent event) {
         if (AppConstants.MOZ_ANDROID_APZ && !mLayerClient.isGeckoReady()) {
             // If gecko isn't loaded yet, don't try sending events to the
             // native code because it's just going to crash
             return true;
         }
         if (mPanZoomController != null && mPanZoomController.onKeyEvent(event)) {
@@ -703,24 +691,16 @@ public class LayerView extends ScrollVie
             scrollTo(0, Math.round(mToolbarAnimator.getMaxTranslation() - translation));
         }
     }
 
     public float getSurfaceTranslation() {
         return mSurfaceTranslation;
     }
 
-    @Override
-    public void onTabChanged(Tab tab, Tabs.TabEvents msg, String data) {
-        if (msg == Tabs.TabEvents.VIEWPORT_CHANGE && Tabs.getInstance().isSelectedTab(tab) && mLayerClient != null) {
-            setZoomConstraints(tab.getZoomConstraints());
-            setIsRTL(tab.getIsRTL());
-        }
-    }
-
     // Public hooks for dynamic toolbar translation
 
     public interface DynamicToolbarListener {
         public void onTranslationChanged(float aToolbarTranslation, float aLayerViewTranslation);
         public void onPanZoomStopped();
         public void onMetricsChanged(ImmutableViewportMetrics viewport);
     }
 
--- a/mobile/android/chrome/content/browser.js
+++ b/mobile/android/chrome/content/browser.js
@@ -5889,35 +5889,20 @@ const kViewportMaxHeight = 10000;
 var ViewportHandler = {
   // The cached viewport metadata for each document. We tie viewport metadata to each document
   // instead of to each tab so that we don't have to update it when the document changes. Using an
   // ES6 weak map lets us avoid leaks.
   _metadata: new WeakMap(),
 
   init: function init() {
     Services.obs.addObserver(this, "Window:Resize", false);
-    Services.obs.addObserver(this, "zoom-constraints-updated", false);
   },
 
   observe: function(aSubject, aTopic, aData) {
     switch (aTopic) {
-      case "zoom-constraints-updated":
-        // aSubject should be a document, so let's find the tab corresponding
-        // to that if there is one
-        let constraints = JSON.parse(aData);
-        let doc = aSubject;
-        constraints.isRTL = doc.documentElement.dir == "rtl";
-        ViewportHandler.setMetadataForDocument(doc, constraints);
-        let tab = BrowserApp.getTabForWindow(doc.defaultView);
-        if (tab) {
-          constraints.type = "Tab:ViewportMetadata";
-          constraints.tabID = tab.id;
-          Messaging.sendRequest(constraints);
-        }
-        return;
       case "Window:Resize":
         if (window.outerWidth == gScreenWidth && window.outerHeight == gScreenHeight)
           break;
         if (window.outerWidth == 0 || window.outerHeight == 0)
           break;
 
         gScreenWidth = window.outerWidth * window.devicePixelRatio;
         gScreenHeight = window.outerHeight * window.devicePixelRatio;