Skip to content

Support getting the browser level ChromeDevToolsService #104

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ public interface ChromeService {
* @return Version info.
* @throws ChromeServiceException If request fails for any reason.
*/
ChromeVersion getVersion() throws ChromeServiceException;;
ChromeVersion getVersion() throws ChromeServiceException;

/**
* Creates a dev tools service to specified tab.
Expand All @@ -99,4 +99,21 @@ ChromeDevToolsService createDevToolsService(
* @return Dev tools.
*/
ChromeDevToolsService createDevToolsService(ChromeTab tab) throws ChromeServiceException;

/**
* Creates a dev tools service to the browser.
*
* @param chromeDevToolsServiceConfiguration Service configuration.
* @return Dev tools.
*/
ChromeDevToolsService createDevToolsService(
ChromeDevToolsServiceConfiguration chromeDevToolsServiceConfiguration)
throws ChromeServiceException;

/**
* Creates a dev tools service to the browser with default service configuration.
*
* @return Dev tools.
*/
ChromeDevToolsService createDevToolsService() throws ChromeServiceException;
}
Original file line number Diff line number Diff line change
Expand Up @@ -156,22 +156,40 @@ public ChromeVersion getVersion() throws ChromeServiceException {
}

@Override
public synchronized ChromeDevToolsService createDevToolsService(ChromeTab tab)
throws ChromeServiceException {
public ChromeDevToolsService createDevToolsService() throws ChromeServiceException {
return createDevToolsService(null, new ChromeDevToolsServiceConfiguration());
}

@Override
public ChromeDevToolsService createDevToolsService(ChromeTab tab) throws ChromeServiceException {
return createDevToolsService(tab, new ChromeDevToolsServiceConfiguration());
}

@Override
public ChromeDevToolsService createDevToolsService(
ChromeDevToolsServiceConfiguration chromeDevToolsServiceConfiguration)
throws ChromeServiceException {
return createDevToolsService(null, chromeDevToolsServiceConfiguration);
}

@Override
public synchronized ChromeDevToolsService createDevToolsService(
ChromeTab tab, ChromeDevToolsServiceConfiguration chromeDevToolsServiceConfiguration)
throws ChromeServiceException {
String id, webSocketDebuggerUrl;
if (tab == null) {
id = "browser";
webSocketDebuggerUrl = getVersion().getWebSocketDebuggerUrl();
} else {
id = tab.getId();
webSocketDebuggerUrl = tab.getWebSocketDebuggerUrl();
}
try {
if (isChromeDevToolsServiceCached(tab)) {
return getCachedChromeDevToolsService(tab);
if (isChromeDevToolsServiceCached(id)) {
return getCachedChromeDevToolsService(id);
}

// Connect to a tab via web socket
String webSocketDebuggerUrl = tab.getWebSocketDebuggerUrl();
WebSocketService webSocketService =
webSocketServiceFactory.createWebSocketService(webSocketDebuggerUrl);

Expand Down Expand Up @@ -199,7 +217,7 @@ public synchronized ChromeDevToolsService createDevToolsService(
commandInvocationHandler.setChromeDevToolsService(chromeDevToolsService);

// Cache it up.
cacheChromeDevToolsService(tab, chromeDevToolsService);
cacheChromeDevToolsService(id, chromeDevToolsService);

return chromeDevToolsService;
} catch (WebSocketServiceException ex) {
Expand Down Expand Up @@ -238,17 +256,16 @@ public void clearChromeDevToolsServiceCache(ChromeTab tab) {
}
}

private boolean isChromeDevToolsServiceCached(ChromeTab tab) {
return chromeDevToolServiceCache.get(tab.getId()) != null;
private boolean isChromeDevToolsServiceCached(String id) {
return chromeDevToolServiceCache.get(id) != null;
}

private ChromeDevToolsService getCachedChromeDevToolsService(ChromeTab tab) {
return chromeDevToolServiceCache.get(tab.getId());
private ChromeDevToolsService getCachedChromeDevToolsService(String id) {
return chromeDevToolServiceCache.get(id);
}

private void cacheChromeDevToolsService(
ChromeTab tab, ChromeDevToolsService chromeDevToolsService) {
chromeDevToolServiceCache.put(tab.getId(), chromeDevToolsService);
private void cacheChromeDevToolsService(String id, ChromeDevToolsService chromeDevToolsService) {
chromeDevToolServiceCache.put(id, chromeDevToolsService);
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -351,6 +351,36 @@ public void testGetDevTools()
assertNotNull(devTools);
}

@Test
public void testGetBrowserDevTools()
throws IOException, ChromeServiceException, WebSocketServiceException {
MockWebServer server = new MockWebServer();
String fixture = ChromeServiceImpl.inputStreamToString(getFixture("chrome/version.json"));
server.enqueue(new MockResponse().setBody(fixture));
server.start();

ChromeServiceImpl service =
new ChromeServiceImpl(server.getHostName(), server.getPort(), webSocketServiceFactory);

ObjectMapper mapper = new ObjectMapper();

expect(
webSocketServiceFactory.createWebSocketService(
mapper.readTree(fixture).path("webSocketDebuggerUrl").asText()))
.andReturn(webSocketService);

webSocketService.addMessageHandler(anyObject());

replayAll();

ChromeDevTools devTools = service.createDevToolsService();

verifyAll();

assertNotNull(devTools);
server.shutdown();
}

@Test
public void testGetDevToolsIsCachedPerTab()
throws IOException, ChromeServiceException, WebSocketServiceException {
Expand Down