Index: content/public/android/java/src/org/chromium/content/browser/ContentViewCore.java |
diff --git a/content/public/android/java/src/org/chromium/content/browser/ContentViewCore.java b/content/public/android/java/src/org/chromium/content/browser/ContentViewCore.java |
index 561c165b60f2c86a6f85b863d47b8af4410740b7..e1fc3b0df099f1b6276ba6d66284363c66302cb5 100644 |
--- a/content/public/android/java/src/org/chromium/content/browser/ContentViewCore.java |
+++ b/content/public/android/java/src/org/chromium/content/browser/ContentViewCore.java |
@@ -87,6 +87,8 @@ import org.chromium.device.gamepad.GamepadList; |
import org.chromium.ui.base.DeviceFormFactor; |
import org.chromium.ui.base.ViewAndroidDelegate; |
import org.chromium.ui.base.WindowAndroid; |
+import org.chromium.ui.base.WindowAndroidChangedObserver; |
+import org.chromium.ui.base.WindowAndroidProvider; |
import org.chromium.ui.base.ime.TextInputType; |
import org.chromium.ui.gfx.DeviceDisplayInfo; |
import org.chromium.ui.touch_selection.SelectionEventType; |
@@ -108,7 +110,8 @@ import java.util.Map.Entry; |
*/ |
@JNINamespace("content") |
public class ContentViewCore implements AccessibilityStateChangeListener, ScreenOrientationObserver, |
- SystemCaptioningBridge.SystemCaptioningBridgeListener { |
+ SystemCaptioningBridge.SystemCaptioningBridgeListener, |
+ WindowAndroidProvider { |
private static final String TAG = "cr_ContentViewCore"; |
// Used to avoid enabling zooming in / out if resulting zooming will |
@@ -617,6 +620,9 @@ public class ContentViewCore implements AccessibilityStateChangeListener, Screen |
// ResultReceiver in the InputMethodService (IME app) gets gc'ed. |
private ShowKeyboardResultReceiver mShowKeyboardResultReceiver; |
+ // The list of observers that are notified when ContentViewCore changes its WindowAndroid. |
+ private final ObserverList<WindowAndroidChangedObserver> mWindowAndroidChangedObservers; |
+ |
/** |
* @param webContents The {@link WebContents} to find a {@link ContentViewCore} of. |
* @return A {@link ContentViewCore} that is connected to {@code webContents} or |
@@ -650,6 +656,7 @@ public class ContentViewCore implements AccessibilityStateChangeListener, Screen |
mGestureStateListenersIterator = mGestureStateListeners.rewindableIterator(); |
mContainerViewObservers = new ObserverList<ContainerViewObserver>(); |
+ mWindowAndroidChangedObservers = new ObserverList<WindowAndroidChangedObserver>(); |
} |
/** |
@@ -677,11 +684,22 @@ public class ContentViewCore implements AccessibilityStateChangeListener, Screen |
/** |
* @return The WindowAndroid associated with this ContentViewCore. |
*/ |
+ @Override |
public WindowAndroid getWindowAndroid() { |
if (mNativeContentViewCore == 0) return null; |
return nativeGetJavaWindowAndroid(mNativeContentViewCore); |
} |
+ @Override |
+ public void addWindowAndroidChangedObserver(WindowAndroidChangedObserver observer) { |
+ mWindowAndroidChangedObservers.addObserver(observer); |
+ } |
+ |
+ @Override |
+ public void removeWindowAndroidChangedObserver(WindowAndroidChangedObserver observer) { |
+ mWindowAndroidChangedObservers.removeObserver(observer); |
+ } |
+ |
/** |
* |
* @param topControlsHeightPix The height of the top controls in pixels. |
@@ -828,6 +846,10 @@ public class ContentViewCore implements AccessibilityStateChangeListener, Screen |
// Clean up cached popups that may have been created with an old activity. |
mSelectPopup = null; |
mPastePopupMenu = null; |
+ |
+ for (WindowAndroidChangedObserver observer : mWindowAndroidChangedObservers) { |
+ observer.onWindowAndroidChanged(windowAndroid); |
+ } |
} |
@VisibleForTesting |