chrome-dev-tools-patches/terminate-patch.txt
author Eugene Ostroukhov <eugeneo@symbian.org>
Tue, 01 Jun 2010 14:53:02 -0700
changeset 344 0f103d99721b
parent 314 dfd37533036c
permissions -rw-r--r--
Bug 2491 - Notify the user about missing resource

diff -r 42f09aa2b24a org.chromium.debug.core/src/org/chromium/debug/core/model/DebugTargetImpl.java
--- a/org.chromium.debug.core/src/org/chromium/debug/core/model/DebugTargetImpl.java	Mon Apr 19 15:00:57 2010 -0700
+++ b/org.chromium.debug.core/src/org/chromium/debug/core/model/DebugTargetImpl.java	Wed Apr 21 09:29:57 2010 -0700
@@ -187,7 +187,17 @@
   }
 
   public void terminate() throws DebugException {
-    disconnect();
+    if (workspaceBridgeFactory.canCloseTab()) {
+      closeTab();
+    } else {
+      disconnect();
+    }
+  }
+
+  private void closeTab() {
+    if (!vmEmbedder.getJavascriptVm().close()) {
+      ChromiumDebugPlugin.logWarning(Messages.DebugTargetImpl_BadResultWhileDisconnecting);
+    }
   }
 
   public boolean canResume() {
diff -r 42f09aa2b24a org.chromium.debug.core/src/org/chromium/debug/core/model/VProjectWorkspaceBridge.java
--- a/org.chromium.debug.core/src/org/chromium/debug/core/model/VProjectWorkspaceBridge.java	Mon Apr 19 15:00:57 2010 -0700
+++ b/org.chromium.debug.core/src/org/chromium/debug/core/model/VProjectWorkspaceBridge.java	Wed Apr 21 09:29:57 2010 -0700
@@ -56,6 +56,10 @@
     public JsLabelProvider getLabelProvider() {
       return LABEL_PROVIDER;
     }
+
+    public boolean canCloseTab() {
+      return false;
+    }
   }
 
   private final IProject debugProject;
diff -r 42f09aa2b24a org.chromium.debug.core/src/org/chromium/debug/core/model/WorkspaceBridge.java
--- a/org.chromium.debug.core/src/org/chromium/debug/core/model/WorkspaceBridge.java	Mon Apr 19 15:00:57 2010 -0700
+++ b/org.chromium.debug.core/src/org/chromium/debug/core/model/WorkspaceBridge.java	Wed Apr 21 09:29:57 2010 -0700
@@ -46,6 +46,11 @@
      * User may cache value of this method.
      */
     JsLabelProvider getLabelProvider();
+
+    /**
+     * Returns <code>true</code> if debugger is allowed to close tab. 
+     */
+    boolean canCloseTab();
   }
 
   /**
@@ -100,6 +105,7 @@
     void breakpointsHit(Collection<? extends Breakpoint> breakpointsHit);
   }
 
+  
   /**
    * Label provider for several debug elements. This object should be stateless.
    */
diff -r 42f09aa2b24a org.chromium.sdk/src/logging.properties
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/org.chromium.sdk/src/logging.properties	Wed Apr 21 09:29:57 2010 -0700
@@ -0,0 +1,2 @@
+.level=WARNING
+
diff -r 42f09aa2b24a org.chromium.sdk/src/org/chromium/sdk/JavascriptVm.java
--- a/org.chromium.sdk/src/org/chromium/sdk/JavascriptVm.java	Mon Apr 19 15:00:57 2010 -0700
+++ b/org.chromium.sdk/src/org/chromium/sdk/JavascriptVm.java	Wed Apr 21 09:29:57 2010 -0700
@@ -58,6 +58,13 @@
   boolean detach();
 
   /**
+   * Closes associated tab
+   *
+   * @return whether the operation succeeded
+   */
+  boolean close();
+
+  /**
    * @return whether the tab is currently attached
    */
   boolean isAttached();
diff -r 42f09aa2b24a org.chromium.sdk/src/org/chromium/sdk/internal/BrowserTabImpl.java
--- a/org.chromium.sdk/src/org/chromium/sdk/internal/BrowserTabImpl.java	Mon Apr 19 15:00:57 2010 -0700
+++ b/org.chromium.sdk/src/org/chromium/sdk/internal/BrowserTabImpl.java	Wed Apr 21 09:29:57 2010 -0700
@@ -107,6 +107,11 @@
     return Result.OK == result;
   }
 
+  public boolean close() {
+      Result result = devToolSessionManager.closeTab();
+      return Result.OK == result;
+  }
+
   public boolean isAttached() {
     return devToolSessionManager.isAttachedForUi();
   }
diff -r 42f09aa2b24a org.chromium.sdk/src/org/chromium/sdk/internal/StandaloneVmImpl.java
--- a/org.chromium.sdk/src/org/chromium/sdk/internal/StandaloneVmImpl.java	Mon Apr 19 15:00:57 2010 -0700
+++ b/org.chromium.sdk/src/org/chromium/sdk/internal/StandaloneVmImpl.java	Wed Apr 21 09:29:57 2010 -0700
@@ -149,6 +149,10 @@
     connection.close();
     return true;
   }
+  
+  public boolean close() {
+    return detach();
+  }
 
   public boolean isAttached() {
     return connectionState == ConnectionState.CONNECTED;
diff -r 42f09aa2b24a org.chromium.sdk/src/org/chromium/sdk/internal/tools/v8/ChromeDevToolSessionManager.java
--- a/org.chromium.sdk/src/org/chromium/sdk/internal/tools/v8/ChromeDevToolSessionManager.java	Mon Apr 19 15:00:57 2010 -0700
+++ b/org.chromium.sdk/src/org/chromium/sdk/internal/tools/v8/ChromeDevToolSessionManager.java	Wed Apr 21 09:29:57 2010 -0700
@@ -161,6 +161,7 @@
           processAttach(json);
           break;
         case DETACH:
+        case TERMINATE:
           processDetach(json);
           break;
         case DEBUGGER_COMMAND:
@@ -172,6 +173,9 @@
         case CLOSED:
           processClosed(json);
           break;
+        default:
+          System.out.println(message.getContent());
+          return;
       }
       return;
     }
@@ -264,6 +268,30 @@
     return result;
   }
 
+  /**
+   * Closes associated browser tab.
+   * @return terminate request result
+   */
+  public Result closeTab() {
+      if (attachState.get() != AttachState.NORMAL) {
+          toolHandler.onDebuggerDetached();
+          return Result.ILLEGAL_TAB_STATE;
+      }
+      
+      String command = V8DebuggerToolMessageFactory.terminate();
+      Result result;
+      try {
+          result = sendSimpleCommandSync(detachCallback, command);
+      } catch (AttachmentFailureException e) {
+          result = null;
+      } finally {
+          // Make sure line is cut
+          cutTheLineMyself();
+      }
+      
+      return result;
+  }
+
   private Result sendSimpleCommandSync(AtomicReference<ResultAwareCallback> callbackReference,
       String command) throws AttachmentFailureException {
     final Semaphore sem = new Semaphore(0);
@@ -448,6 +476,10 @@
       return createDebuggerMessage(DebuggerToolCommand.DETACH, null);
     }
 
+    static String terminate() {
+        return createDebuggerMessage(DebuggerToolCommand.TERMINATE, null);
+    }
+
     public static String debuggerCommand(String json) {
       return createDebuggerMessage(DebuggerToolCommand.DEBUGGER_COMMAND, json);
     }
diff -r 42f09aa2b24a org.chromium.sdk/src/org/chromium/sdk/internal/tools/v8/DebuggerToolCommand.java
--- a/org.chromium.sdk/src/org/chromium/sdk/internal/tools/v8/DebuggerToolCommand.java	Mon Apr 19 15:00:57 2010 -0700
+++ b/org.chromium.sdk/src/org/chromium/sdk/internal/tools/v8/DebuggerToolCommand.java	Wed Apr 21 09:29:57 2010 -0700
@@ -13,6 +13,8 @@
 public enum DebuggerToolCommand {
   ATTACH("attach"),
   DETACH("detach"),
+  TERMINATE("terminate"),
+  DISPATCH("dispatch"),
   DEBUGGER_COMMAND("debugger_command"),
   EVALUATE_JAVASCRIPT("evaluate_javascript"),
 
diff -r 42f09aa2b24a org.symbian.tools.wrttools.debug.core/my.txt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/org.symbian.tools.wrttools.debug.core/my.txt	Wed Apr 21 09:29:57 2010 -0700
@@ -0,0 +1,8 @@
+This is a patch to close tab on debugger request. I also have a patch for Chrome
+Developer Tools that I will submit later.
+
+Is there any documentation on Chrome APIs? I really doubt I used correct one to 
+close the tab.
+
+This is my first attempt to submit patch to Chromium so I would be greateful for
+any feedback.
\ No newline at end of file
diff -r 42f09aa2b24a org.symbian.tools.wrttools.debug.core/src/org/symbian/tools/wrttools/debug/internal/ChromeDebugUtils.java
--- a/org.symbian.tools.wrttools.debug.core/src/org/symbian/tools/wrttools/debug/internal/ChromeDebugUtils.java	Mon Apr 19 15:00:57 2010 -0700
+++ b/org.symbian.tools.wrttools.debug.core/src/org/symbian/tools/wrttools/debug/internal/ChromeDebugUtils.java	Wed Apr 21 09:29:57 2010 -0700
@@ -30,10 +30,25 @@
 			if (chromeExecutable.isFile()) {
 				return chromeExecutable.getAbsolutePath();
 			}
+			chromeExecutable = new File(file, getChromiumExecutable());
+			if (chromeExecutable.isFile()) {
+				return chromeExecutable.getAbsolutePath();
+			}
 		}
 		return null;
 	}
 
+	private static String getChromiumExecutable() {
+		// Add more ifs as we add support for new platforms
+		if (CoreUtil.isMac()) {
+			return "Chromium.app/Contents/MacOS/Chromium";
+		} else if (CoreUtil.isLinux()) {
+			return "chromium";
+		} else {
+			return "chromium.exe";
+		}
+	}
+
 	private static String getExecutable() {
 		// Add more ifs as we add support for new platforms
 		if (CoreUtil.isMac()) {
diff -r 42f09aa2b24a org.symbian.tools.wrttools.debug.core/src/org/symbian/tools/wrttools/debug/internal/launch/ChromeInstancesManager.java
--- a/org.symbian.tools.wrttools.debug.core/src/org/symbian/tools/wrttools/debug/internal/launch/ChromeInstancesManager.java	Mon Apr 19 15:00:57 2010 -0700
+++ b/org.symbian.tools.wrttools.debug.core/src/org/symbian/tools/wrttools/debug/internal/launch/ChromeInstancesManager.java	Wed Apr 21 09:29:57 2010 -0700
@@ -44,7 +44,8 @@
             "--disable-extenions", // Use standard UI, should also improve speed and stability
             "--disable-plugins", // Run faster!
             "--activate-on-launch", // Bring to front on Mac
-            "--always-enable-dev-tools", "--no-default-browser-check", // Our users don't need this nagging
+            "--exit-on-no-windows", // Bring to front on Mac
+            "--no-default-browser-check", // Our users don't need this nagging
             "--no-first-run", // We don't care
             "--app=%s" // Here we will have widget URI as --app argument
     };
diff -r 42f09aa2b24a org.symbian.tools.wrttools.debug.core/src/org/symbian/tools/wrttools/debug/internal/launch/WRTProjectWorkspaceBridge.java
--- a/org.symbian.tools.wrttools.debug.core/src/org/symbian/tools/wrttools/debug/internal/launch/WRTProjectWorkspaceBridge.java	Mon Apr 19 15:00:57 2010 -0700
+++ b/org.symbian.tools.wrttools.debug.core/src/org/symbian/tools/wrttools/debug/internal/launch/WRTProjectWorkspaceBridge.java	Wed Apr 21 09:29:57 2010 -0700
@@ -49,6 +49,10 @@
 			return new WrtLabelProvider();
 		}
 
+		public boolean canCloseTab() {
+			return true;
+		}
+
 	}
 
 //	public final static String DEBUG_MODEL_ID = VProjectWorkspaceBridge.DEBUG_MODEL_ID;
diff -r 42f09aa2b24a org.symbian.tools.wrttools.product/launch/WRT IDE Product (Mac OS X).launch
--- a/org.symbian.tools.wrttools.product/launch/WRT IDE Product (Mac OS X).launch	Mon Apr 19 15:00:57 2010 -0700
+++ b/org.symbian.tools.wrttools.product/launch/WRT IDE Product (Mac OS X).launch	Wed Apr 21 09:29:57 2010 -0700
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <launchConfiguration type="org.eclipse.pde.ui.RuntimeWorkbench">
 <booleanAttribute key="append.args" value="true"/>
 <booleanAttribute key="askclear" value="true"/>