| Index: chrome/android/java/src/org/chromium/chrome/browser/banners/AppBannerManager.java
|
| diff --git a/chrome/android/java/src/org/chromium/chrome/browser/banners/AppBannerManager.java b/chrome/android/java/src/org/chromium/chrome/browser/banners/AppBannerManager.java
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..4aa92215949f79398de65bd075f83915976c7a9d
|
| --- /dev/null
|
| +++ b/chrome/android/java/src/org/chromium/chrome/browser/banners/AppBannerManager.java
|
| @@ -0,0 +1,90 @@
|
| +// Copyright 2014 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +package org.chromium.chrome.browser.banners;
|
| +
|
| +import org.chromium.chrome.browser.EmptyTabObserver;
|
| +import org.chromium.chrome.browser.TabBase;
|
| +import org.chromium.chrome.browser.TabObserver;
|
| +import org.chromium.content.browser.ContentView;
|
| +import org.chromium.content_public.browser.WebContents;
|
| +
|
| +/**
|
| + * Manages an AppBannerView for a TabBase and its ContentView.
|
| + *
|
| + * The AppBannerManager manages a single AppBannerView, dismissing it when the user navigates to a
|
| + * new page or creating a new one when it detects that the current webpage is requesting a banner
|
| + * to be built. The actual observeration of the WebContents (which triggers the automatic creation
|
| + * and removal of banners, among other things) is done by the native-side AppBannerManager.
|
| + *
|
| + * This Java-side class owns its native-side counterpart.
|
| + */
|
| +public class AppBannerManager {
|
| + /** Pointer to the native side AppBannerManager. */
|
| + private final long mNativePointer;
|
| +
|
| + /** TabBase that the AppBannerView/AppBannerManager is owned by. */
|
| + private final TabBase mTabBase;
|
| +
|
| + /** ContentView that the AppBannerView/AppBannerManager is currently attached to. */
|
| + private ContentView mContentView;
|
| +
|
| + /**
|
| + * Constructs an AppBannerManager for the given tab.
|
| + * @param tab Tab that the AppBannerManager will be attached to.
|
| + */
|
| + public AppBannerManager(TabBase tab) {
|
| + mNativePointer = nativeInit();
|
| + mTabBase = tab;
|
| + mTabBase.addObserver(createTabObserver());
|
| + updatePointers();
|
| + }
|
| +
|
| + /**
|
| + * Creates a TabObserver for monitoring a TabBase, used to react to changes in the ContentView
|
| + * or to trigger its own destruction.
|
| + * @return TabObserver that can be used to monitor a TabBase.
|
| + */
|
| + private TabObserver createTabObserver() {
|
| + return new EmptyTabObserver() {
|
| + @Override
|
| + public void onWebContentsSwapped(TabBase tab, boolean didStartLoad,
|
| + boolean didFinishLoad) {
|
| + updatePointers();
|
| + }
|
| +
|
| + @Override
|
| + public void onContentChanged(TabBase tab) {
|
| + updatePointers();
|
| + }
|
| +
|
| + @Override
|
| + public void onDestroyed(TabBase tab) {
|
| + nativeDestroy(mNativePointer);
|
| + }
|
| + };
|
| + }
|
| +
|
| + /**
|
| + * Updates which ContentView and WebContents the AppBannerView is monitoring.
|
| + */
|
| + private void updatePointers() {
|
| + if (mContentView != mTabBase.getContentView()) mContentView = mTabBase.getContentView();
|
| + nativeReplaceWebContents(mNativePointer, mTabBase.getWebContents());
|
| + }
|
| +
|
| + /**
|
| + * Checks if app banners are enabled.
|
| + * @return True if banners are enabled, false otherwise.
|
| + */
|
| + public static boolean isEnabled() {
|
| + return nativeIsEnabled();
|
| + }
|
| +
|
| + private static native boolean nativeIsEnabled();
|
| + private native long nativeInit();
|
| + private native void nativeDestroy(long nativeAppBannerManager);
|
| + private native void nativeReplaceWebContents(
|
| + long nativeAppBannerManager, WebContents webContents);
|
| +}
|
|
|