Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(8539)

Unified Diff: chrome/android/java/src/org/chromium/chrome/browser/TabBase.java

Issue 10968003: Add rendering support to the TestShell. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebased on top of test apk changes. Created 8 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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
new file mode 100644
index 0000000000000000000000000000000000000000..ba887c77486313dd3abee0c6da939d7c4f2b90cf
--- /dev/null
+++ b/chrome/android/java/src/org/chromium/chrome/browser/TabBase.java
@@ -0,0 +1,142 @@
+// Copyright (c) 2012 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;
+
+import android.content.Context;
+import android.text.TextUtils;
+
+import org.chromium.chrome.browser.ChromeWebContentsDelegateAndroid;
+import org.chromium.chrome.browser.ContentViewUtil;
+import org.chromium.content.browser.ContentView;
+import org.chromium.content.browser.ContentViewCore;
+import org.chromium.content.browser.LoadUrlParams;
+import org.chromium.content.common.CleanupReference;
+import org.chromium.ui.gfx.NativeWindow;
+
+/**
+ * The basic Java representation of a tab. Contains and manages a {@link ContentView}.
+ */
+public class TabBase {
+ private NativeWindow mWindow;
+ private ContentView mContentView;
+ private ChromeWebContentsDelegateAndroid mWebContentsDelegate;
+ private int mNativeTabBaseAndroidImpl;
+
+ private CleanupReference mCleanupReference;
+
+ /**
+ * @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);
+ loadUrlWithSanitization(url);
+ }
+
+ /**
+ * @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 nativeWebContents,
+ NativeWindow window, ChromeWebContentsDelegateAndroid delegate) {
+ mWindow = window;
+ mWebContentsDelegate = delegate == null ? new ChromeWebContentsDelegateAndroid() : delegate;
+ mNativeTabBaseAndroidImpl = nativeInit();
+
+ initializeContentView(context, nativeWebContents);
+ mCleanupReference = new CleanupReference(this,
+ new DestroyRunnable(mNativeTabBaseAndroidImpl));
+ }
+
+ /**
+ * Should be called when the tab is no longer needed. Once this is called this tab should not
+ * be used.
+ */
+ public void destroy() {
+ destroyContentView();
+ if (mNativeTabBaseAndroidImpl != 0) {
+ mCleanupReference.cleanupNow();
+ mNativeTabBaseAndroidImpl = 0;
+ }
+ }
+
+ /**
+ * @return The {@link ContentView} represented by this tab.
+ */
+ public ContentView getContentView() {
+ return mContentView;
+ }
+
+ /**
+ * @return A pointer to the native component of this tab.
+ */
+ public int getNativeTab() {
+ return mNativeTabBaseAndroidImpl;
+ }
+
+ private void initializeContentView(Context context, int nativeWebContents) {
+ if (nativeWebContents == 0) {
+ nativeWebContents = ContentViewUtil.createNativeWebContents(false);
+ }
+
+ mContentView = ContentView.newInstance(context, nativeWebContents, mWindow,
+ ContentView.PERSONALITY_CHROME);
+
+ nativeInitTabContents(mNativeTabBaseAndroidImpl, mContentView.getContentViewCore(),
+ mWebContentsDelegate);
+ }
+
+ private void destroyContentView() {
+ if (mContentView != null) {
Jay Civelli 2012/09/24 22:43:08 Nit: you could do if (mContentView == null) return
David Trainor- moved to gerrit 2012/09/24 23:39:57 Done.
+ mContentView.destroy();
+ mContentView = null;
+ }
+ }
+
+ /**
+ * Navigates this Tab's {@link ContentView} to a sanitized version of {@code url}.
+ * @param url The potentially unsanitized URL to navigate to.
+ */
+ public void loadUrlWithSanitization(String url) {
+ if (url == null) return;
+
+ // Sanitize the URL.
+ url = nativeFixupUrl(mNativeTabBaseAndroidImpl, url);
+
+ // Invalid URLs will just return empty.
+ if (TextUtils.isEmpty(url)) return;
+
+ if (TextUtils.equals(url, mContentView.getUrl())) {
+ mContentView.reload();
+ } else {
+ mContentView.loadUrl(new LoadUrlParams(url));
+ }
+ }
+
+ private static final class DestroyRunnable implements Runnable {
+ private final int mNativeTabBaseAndroidImpl;
+ private DestroyRunnable(int nativeTabBaseAndroidImpl) {
+ mNativeTabBaseAndroidImpl = nativeTabBaseAndroidImpl;
+ }
+ @Override
+ public void run() {
+ nativeDestroyTabContents(mNativeTabBaseAndroidImpl);
+ }
+ }
+
+ private native int nativeInit();
+ private native void nativeDestroy(int nativeTabBaseAndroidImpl);
+ private native void nativeInitTabContents(int nativeTabBaseAndroidImpl, ContentViewCore view,
+ ChromeWebContentsDelegateAndroid chromeWebContentsDelegateAndroid);
+ private static native void nativeDestroyTabContents(int nativeTabBaseAndroidImpl);
+ private native String nativeFixupUrl(int nativeTabBaseAndroidImpl, String url);
+}
« no previous file with comments | « no previous file | chrome/android/testshell/DEPS » ('j') | chrome/android/testshell/java/chromium_testshell_apk.xml » ('J')

Powered by Google App Engine
This is Rietveld 408576698