/* * Copyright 2009 Google Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. */ package com.google.jstestdriver.browser; import com.google.inject.Inject; import com.google.jstestdriver.BrowserInfo; import com.google.jstestdriver.CapturedBrowsers; import com.google.jstestdriver.FileUploader; import com.google.jstestdriver.SlaveBrowser; import com.google.jstestdriver.SlaveBrowser.BrowserState; import com.google.jstestdriver.Time; import com.google.jstestdriver.annotations.BrowserTimeout; import com.google.jstestdriver.model.HandlerPathPrefix; import com.google.jstestdriver.runner.RunnerType; import com.google.jstestdriver.server.handlers.CaptureHandler; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * Creates SlaveBrowsers. * * @author jeremiele@google.com (Jeremie Lenfant-Engelmann) */ public class BrowserHunter { private static final Logger logger = LoggerFactory.getLogger(BrowserHunter.class.getName()); private final CapturedBrowsers capturedBrowsers; private final long browserTimeout; private final HandlerPathPrefix prefix; private final Time time; @Inject public BrowserHunter(CapturedBrowsers capturedBrowsers, @BrowserTimeout long browserTimeout, HandlerPathPrefix prefix, Time time) { this.capturedBrowsers = capturedBrowsers; this.browserTimeout = browserTimeout; this.prefix = prefix; this.time = time; } public SlaveBrowser captureBrowser(String name, String version, String os) { return captureBrowser(capturedBrowsers.getUniqueId(), name, version, os, browserTimeout, CaptureHandler.QUIRKS, RunnerType.CLIENT, FileUploader.CHUNK_SIZE); } /** * Begins tracking a browser in the CapturedBrowsers collection. */ public SlaveBrowser captureBrowser(String rawId, String name, String version, String os) { return captureBrowser(rawId, name, version, os, browserTimeout, CaptureHandler.QUIRKS, RunnerType.CLIENT, FileUploader.CHUNK_SIZE); } public SlaveBrowser captureBrowser(String rawId, String name, String version, String os, Long browserTimeout, String mode, RunnerType type, Integer uploadSize) { BrowserInfo browserInfo = new BrowserInfo(); final Long id = parseBrowserId(rawId); browserInfo.setId(id); browserInfo.setName(name); browserInfo.setVersion(version); browserInfo.setOs(os); browserInfo.setUploadSize(uploadSize != null ? uploadSize : FileUploader.CHUNK_SIZE); // TODO(corysmith):move all browser timeout configuration to the proper place. // TODO(corysmith):figure out where that is. long computedBrowserTimeout = computeTimeout(browserTimeout); SlaveBrowser slave = new SlaveBrowser(time, id.toString(), browserInfo, computedBrowserTimeout, prefix, mode, type, BrowserState.CAPTURED, time.now()); capturedBrowsers.addSlave(slave); logger.debug("Browser Captured: {}", slave); logger.info("Browser Captured: {} version {} ({})", new Object[] {name, version, id}); return slave; } private long computeTimeout(Long browserTimeout) { return browserTimeout == null ? this.browserTimeout : browserTimeout; } private Long parseBrowserId(String id) { if (id == null) { return Long.parseLong(capturedBrowsers.getUniqueId()); } return Long.parseLong(id); } public boolean isBrowserCaptured(String id) { return capturedBrowsers.getBrowser(id) != null; } public void freeBrowser(String id) { capturedBrowsers.removeSlave(id); } }