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
--- 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;