org.chromium.sdk/src/org/chromium/sdk/Browser.java
changeset 2 e4420d2515f1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/org.chromium.sdk/src/org/chromium/sdk/Browser.java	Wed Dec 23 17:13:18 2009 -0800
@@ -0,0 +1,79 @@
+// Copyright (c) 2009 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.sdk;
+
+import java.io.IOException;
+import java.util.List;
+
+/**
+ * An "entry point" of the SDK. A Browser instance is usually constructed once
+ * per a debugged browser instance.
+ */
+public interface Browser {
+
+  /**
+   * Establishes the browser connection and checks for the protocol version
+   * supported by the remote, then creates object that downloads list of tabs.
+   *
+   * @return new instance of TabFetcher that must be dismissed after use to control
+   *         connection use
+   * @throws IOException if there was a transport layer error
+   * @throws UnsupportedVersionException if the SDK protocol version is not
+   *         compatible with that supported by the browser
+   */
+  TabFetcher createTabFetcher() throws IOException, UnsupportedVersionException;
+
+
+  /**
+   * Helps to fetch currently opened browser tabs. It also holds open connection to
+   * browser. After instance was used {@code #dismiss} should be called to release
+   * connection. {@link TabConnector#isAlreadyAttached()} helps to tell which
+   * tabs are available for connection.
+   */
+  interface TabFetcher {
+    /**
+     * Retrieves all browser tabs currently opened. It lists all tabs, including
+     * those already attached.
+     *
+     * @return tabs that can be debugged in the associated Browser instance. An
+     *         empty list is returned if no tabs are available.
+     * @throws IOException if there was a transport layer failure
+     * @throws IllegalStateException if this method is called while another
+     *         invocation of the same method is in flight, or the Browser instance
+     *         is not connected
+     */
+    List<? extends TabConnector> getTabs() throws IOException, IllegalStateException;
+
+    /**
+     * Should release connection. If no browser tabs is attached at the moment,
+     * connection may actually close.
+     */
+    void dismiss();
+  }
+
+  /**
+   * Tab list item that is fetched from browser. Connector may correspond to a tab,
+   * which is already attached. Connector is used to attach to tab.
+   */
+  interface TabConnector {
+    /**
+     * @return tab url that should be shown to user to let him select one tab from list
+     */
+    String getUrl();
+
+    /**
+     * @return true if the tab is already attached at this moment
+     */
+    boolean isAlreadyAttached();
+
+    /**
+     * Attaches to the related tab debugger.
+     *
+     * @param listener to report the debug events to
+     * @return null if operation failed
+     */
+    BrowserTab attach(TabDebugEventListener listener) throws IOException;
+  }
+}