All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.openqa.selenium.server.CommandHolder Maven / Gradle / Ivy

Go to download

Selenium automates browsers. That's it! What you do with that power is entirely up to you.

There is a newer version: 3.9.1
Show newest version
// Licensed to the Software Freedom Conservancy (SFC) under one
// or more contributor license agreements.  See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership.  The SFC licenses this file
// to you 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 org.openqa.selenium.server;

import java.util.logging.Logger;

/**
 * 

* Holds the command to be next run in the browser *

* * @author Jennifer Bevan * @version $Revision: 734 $ */ public class CommandHolder { private static final Logger log = Logger.getLogger(CommandHolder.class.getName()); private static final int defaultTimeout = 10; // seconds private static final RemoteCommand poisonCommand = new DefaultRemoteCommand( "CommandHolder.POISON", "", ""); protected static final String RETRY_CMD_STRING = "retryLast"; protected static final RemoteCommand retryCommand = new DefaultRemoteCommand(RETRY_CMD_STRING, "", "", ""); private final String queueId; private final SingleEntryAsyncQueue queue; public CommandHolder(String queueId) { this(queueId, defaultTimeout); } public CommandHolder(String queueId, int timeoutInSeconds) { this.queueId = queueId; queue = new SingleEntryAsyncQueue<>(timeoutInSeconds); queue.setPoison(poisonCommand); } /** * Get, and remove from the holder, the next command to run. If the next command doesn't show up * within timeoutInSeconds seconds, then return a "retry" command. * * @return the next command to execute. */ public RemoteCommand getCommand() { RemoteCommand command; log.fine(hdr() + "called"); command = queue.pollToGetContentUntilTimeout(); if (null == command) { // if there is no new command, send a retryLast. // Purpose: to get around the 2-connections per host issue // by sending a request in response to the frame's looking for // work -- this allows frame to close the connection. command = retryCommand; } else if (queue.isPoison(command)) { // if the queue was poisoned, just exit with a null command. command = null; } log.fine(hdr() + "-> " + ((null == command) ? "null" : command.toString())); return command; } public boolean putCommand(RemoteCommand cmd) { log.fine(hdr()); return queue.putContent(cmd); } public boolean isEmpty() { return queue.isEmpty(); } public RemoteCommand peek() { return queue.peek(); } public void poisonPollers() { log.fine(hdr() + " poisoning pollers"); queue.poisonPollers(); } private String hdr() { return "\t" + CommandQueue.getIdentification("commandHolder", queueId) + " getCommand() "; } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy