Chromium Code Reviews| Index: chrome/android/java/src/org/chromium/chrome/browser/TabBase.java |
| diff --git a/chrome/android/java/src/org/chromium/chrome/browser/TabBase.java b/chrome/android/java/src/org/chromium/chrome/browser/TabBase.java |
| index 7e1fb81fbad42dfd5228e96286282990de47ab9a..f5333b1ee6102dc773455cb007a19697f1a21211 100644 |
| --- a/chrome/android/java/src/org/chromium/chrome/browser/TabBase.java |
| +++ b/chrome/android/java/src/org/chromium/chrome/browser/TabBase.java |
| @@ -15,6 +15,9 @@ import org.chromium.content.browser.LoadUrlParams; |
| import org.chromium.content.common.CleanupReference; |
| import org.chromium.ui.gfx.NativeWindow; |
| +import java.util.HashSet; |
| +import java.util.Set; |
| + |
| /** |
| * The basic Java representation of a tab. Contains and manages a {@link ContentView}. |
| */ |
| @@ -23,19 +26,20 @@ public class TabBase { |
| private ContentView mContentView; |
| private ChromeWebContentsDelegateAndroid mWebContentsDelegate; |
| private int mNativeTabBaseAndroidImpl; |
| + private Set<TabObserver> mObservers = new HashSet<TabObserver>(); |
| private CleanupReference mCleanupReference; |
| + // Tab state |
| + private boolean mIsLoading = false; |
| + |
| /** |
| * @param context The Context the view is running in. |
| * @param url The URL to start this tab with. |
| * @param window The NativeWindow should represent this tab. |
| - * @param delegate The {@link ChromeWebContentsDelegateAndroid} that should be notified of any |
| - * WebContents changes. |
| */ |
| - public TabBase(Context context, String url, NativeWindow window, |
| - ChromeWebContentsDelegateAndroid delegate) { |
| - this(context, 0, window, delegate); |
| + public TabBase(Context context, String url, NativeWindow window) { |
| + this(context, 0, window); |
| loadUrlWithSanitization(url); |
| } |
| @@ -43,11 +47,8 @@ public class TabBase { |
| * @param context The Context the view is running in. |
| * @param nativeWebContents A native pointer to the WebContents this tab represents. |
| * @param window The NativeWindow should represent this tab. |
| - * @param delegate The {@link ChromeWebContentsDelegateAndroid} that should be notified |
| - * of any WebContents changes. |
| */ |
| - public TabBase(Context context, int nativeWebContentsPtr, |
| - NativeWindow window, ChromeWebContentsDelegateAndroid delegate) { |
| + public TabBase(Context context, int nativeWebContentsPtr, NativeWindow window) { |
| mWindow = window; |
| // Build the WebContents and the ContentView/ContentViewCore |
| @@ -59,7 +60,7 @@ public class TabBase { |
| mNativeTabBaseAndroidImpl = nativeInit(nativeWebContentsPtr, window.getNativePointer()); |
| // Build the WebContentsDelegate |
| - mWebContentsDelegate = delegate == null ? new ChromeWebContentsDelegateAndroid() : delegate; |
| + mWebContentsDelegate = new ChromeWebContentsDelegateAndroidImpl(); |
| nativeInitWebContentsDelegate(mNativeTabBaseAndroidImpl, mWebContentsDelegate); |
| // To be called after everything is initialized. |
| @@ -80,6 +81,27 @@ public class TabBase { |
| } |
| /** |
| + * @param observer The {@link TabObserver} that should be notified of changes. |
| + */ |
| + public void addObserver(TabObserver observer) { |
| + mObservers.add(observer); |
| + } |
| + |
| + /** |
| + * @param observer The {@link TabObserver} that should no longer be notified of changes. |
| + */ |
| + public void removeObserver(TabObserver observer) { |
| + mObservers.remove(observer); |
| + } |
| + |
| + /** |
| + * @return Whether or not the tab is currently loading. |
| + */ |
| + public boolean isLoading() { |
| + return mIsLoading; |
| + } |
| + |
| + /** |
| * @return The {@link ContentView} represented by this tab. |
| */ |
| public ContentView getContentView() { |
| @@ -131,6 +153,32 @@ public class TabBase { |
| } |
| } |
| + private class ChromeWebContentsDelegateAndroidImpl extends ChromeWebContentsDelegateAndroid { |
|
Yusuf
2012/10/29 18:46:26
Not sure, but should we be careful about using Imp
David Trainor- moved to gerrit
2012/10/29 21:10:32
Fair enough! Changed to TabBaseChromeWebContentsD
|
| + @Override |
| + public void onLoadProgressChanged(int progress) { |
| + for (TabObserver observer : mObservers) { |
|
Ted C
2012/10/29 17:49:18
It would be annoying (about Java not this change)
David Trainor- moved to gerrit
2012/10/29 21:10:32
That is a good point. I'll make this a list as ad
|
| + observer.onLoadProgressChanged(TabBase.this, progress); |
| + } |
| + } |
| + |
| + @Override |
| + public void onUpdateUrl(String url) { |
| + for (TabObserver observer : mObservers) { |
| + observer.onUpdateUrl(TabBase.this, url); |
| + } |
| + } |
| + |
| + @Override |
| + public void onLoadStarted() { |
| + mIsLoading = true; |
| + } |
| + |
| + @Override |
| + public void onLoadStopped() { |
| + mIsLoading = false; |
| + } |
| + } |
| + |
| private native int nativeInit(int webContentsPtr, int windowAndroidPtr); |
| private static native void nativeDestroy(int nativeTabBaseAndroidImpl); |
| private native void nativeInitWebContentsDelegate(int nativeTabBaseAndroidImpl, |