plugins/org.symbian.tools.tmw.debug/src/org/symbian/tools/wrttools/debug/internal/launch/ChromeInstancesManager.java
changeset 471 06589bf52fa7
parent 470 d4809db37847
child 472 bd9f2d7c64a6
--- a/plugins/org.symbian.tools.tmw.debug/src/org/symbian/tools/wrttools/debug/internal/launch/ChromeInstancesManager.java	Thu Aug 19 17:48:04 2010 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,178 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 Symbian Foundation and/or its subsidiary(-ies).
- * All rights reserved.
- * This component and the accompanying materials are made available
- * under the terms of the License "Eclipse Public License v1.0"
- * which accompanies this distribution, and is available
- * at the URL "http://www.eclipse.org/legal/epl-v10.html".
- *
- * Initial Contributors:
- * Symbian Foundation - initial contribution.
- * Contributors:
- * Description:
- * Overview:
- * Details:
- * Platforms/Drives/Compatibility:
- * Assumptions/Requirement/Pre-requisites:
- * Failures and causes:
- *******************************************************************************/
-package org.symbian.tools.wrttools.debug.internal.launch;
-
-import java.io.File;
-import java.io.FileFilter;
-import java.io.IOException;
-import java.text.MessageFormat;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
-
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Path;
-import org.eclipse.core.runtime.Status;
-import org.symbian.tools.wrttools.debug.internal.Activator;
-import org.symbian.tools.wrttools.debug.internal.ChromeDebugUtils;
-import org.symbian.tools.wrttools.util.CoreUtil;
-
-public class ChromeInstancesManager {
-    private static final String[] CHROME_ARGS = { "%s", "--remote-shell-port=%d", // Here we will set port
-            "--user-data-dir=%s", // Here we will set profile folder so user settings have no effect
-            "--disk-cache-dir=%s", // We don't care
-            "--disable-web-security", // Widgets can use network now
-            "--disable-extenions", // Use standard UI, should also improve speed and stability
-            "--activate-on-launch", // Bring to front on Mac
-            "--disable-geolocation", // Use our own Geolocation (needed to emulate Geolocation in phonegap) 
-            "--disable-local-storage", // Disable local storage (needed to emulate Geolocation in phonegap) 
-            "--disable-session-storage", // Disable local storage (needed to emulate Geolocation in phonegap) 
-            "--no-default-browser-check", // Our users don't need this nagging
-            "--disable-hang-monitor", // Fix for Bug 2682 - The debugger should disable "unresponsive" error message from chrome
-            "--no-first-run", // We don't care
-            "--app=%s" // Here we will have widget URI as --app argument
-    };
-    private final Map<Object, Process> chromes = Collections.synchronizedMap(new HashMap<Object, Process>());
-
-    private static final int EXECUTIBLE_INDEX = 0;
-    private static final int PORT_INDEX = 1;
-    private static final int USER_DATA_INDEX = 2;
-    private static final int CACHE_INDEX = 3;
-    private static final int URL_INDEX = CHROME_ARGS.length - 1;
-
-    private int profileNum = 0;
-
-    public void startChrome(final Object key, int port, final String url) throws CoreException {
-        final String browserExecutable = ChromeDebugUtils.getChromeExecutible();
-        if (browserExecutable == null) {
-            throw createCoreException("No Chrome browser available", null);
-        }
-
-        String[] commandline = new String[CHROME_ARGS.length];
-        System.arraycopy(CHROME_ARGS, 0, commandline, 0, CHROME_ARGS.length);
-        commandline[EXECUTIBLE_INDEX] = String.format(CHROME_ARGS[EXECUTIBLE_INDEX], browserExecutable);
-        commandline[PORT_INDEX] = String.format(CHROME_ARGS[PORT_INDEX], port);
-        commandline[USER_DATA_INDEX] = String.format(CHROME_ARGS[USER_DATA_INDEX], getChromeProfilePath());
-        commandline[CACHE_INDEX] = String.format(CHROME_ARGS[CACHE_INDEX], getChromeCachePath());
-        commandline[URL_INDEX] = String.format(CHROME_ARGS[URL_INDEX], url);
-        
-        // 2. Start Chrome
-        try {
-            Process process = Runtime.getRuntime().exec(commandline);
-            chromes.put(key, process);
-        } catch (IOException e) {
-            StringBuilder builder = new StringBuilder();
-            for (String string : commandline) {
-                builder.append(" ").append(string);
-            }
-            throw createCoreException("Cannot execute: {0}", builder.toString().trim(), e);
-        }
-
-    }
-
-    private String getChromeCachePath() {
-        return getChromeSpecialDir(".chromecache");
-    }
-
-    /**
-     * Terminate Chrome instance associated with given key.
-     */
-    public synchronized void stopChrome(final Object key) {
-
-    }
-
-    public synchronized void forgetChrome(final Object key) {
-
-    }
-
-    public synchronized void shutdown() {
-        String dir = getChromeSpecialDir("");
-        File directory = new File(dir);
-        File[] files = directory.listFiles(new FileFilter() {
-            public boolean accept(File pathname) {
-                return pathname.isDirectory() && pathname.getName().matches("\\.chr\\d{3}")
-                        && !isChromeRunning(pathname);
-            }
-        });
-        boolean removedAll = true;
-        for (File file : files) {
-            removedAll = delete(file) && removedAll;
-        }
-        if (removedAll) {
-            String cachePath = getChromeCachePath();
-            delete(new File(cachePath));
-        }
-
-    }
-
-    private boolean delete(File file) {
-        if (!file.exists()) {
-            return true;
-        } else if (file.isDirectory()) {
-            File[] files = file.listFiles();
-            for (File f : files) {
-                if (!delete(f)) {
-                    return false;
-                }
-            }
-        }
-        return file.delete();
-    }
-
-    private CoreException createCoreException(String pattern, String arg, Throwable exeption) {
-        return createCoreException(MessageFormat.format(pattern, arg), exeption);
-    }
-
-    private CoreException createCoreException(String message, Throwable exeption) {
-        return new CoreException(new Status(IStatus.ERROR, Activator.PLUGIN_ID, message, exeption));
-    }
-
-    private String getChromeProfilePath() {
-        while (true) {
-            String dir = getChromeSpecialDir(String.format(".chr%03d", profileNum++));
-            if (!new File(dir).exists()) {
-                return dir;
-            }
-        }
-    }
-
-    private boolean isChromeRunning(File pathname) {
-        File file = new File(pathname, "Default/Cookies");
-        try {
-            // Note: it is ok to delete cookies file - if it can be deleted then Chrome is not running.
-            // If Chrome is running then we will not be able to delete the file.
-            // We do not need to preserve state between launches. So it is ok to delete coockies.
-            return file.exists() && !file.delete();
-        } catch (Exception e) {
-            Activator.log(e);
-            return true;
-        }
-    }
-
-    private String getChromeSpecialDir(String subdir) {
-        IPath location = ResourcesPlugin.getWorkspace().getRoot().getLocation();
-        if (CoreUtil.isLinux() && location.toString().length() > 50) {
-            location = new Path(System.getProperty("user.home")).append(".wrtdebug");
-        }
-        return location.append(subdir).toOSString();
-    }
-}