Correct ipv6 parsing bug in remote-debugging-address
Fixes a bug where ipv6 addresses are not accepted for the remote-debugger-address option. Before this change, neither --remote-debugging-address=::1 nor --remote-debugging-address=[::1] are accepted. The reason is that the address was parsed expecting a bracketed address but then is later wrapped in brackets again, resulting in invalid addresses such as [[::1]]. This change updates parsing so that the non-bracketed ip literal is accepted. It also adds integ tests to verify the chromedriver/devtools interaction when ip literals are specified. Bug: 1112509 Change-Id: I82756add5f576f3303a84cd3edcc84956c65a75e Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2424035 Commit-Queue: Satsuki Ueno <satsukiu@google.com> Reviewed-by: Shengfa Lin <shengfa@google.com> Reviewed-by: John Chen <johnchen@chromium.org> Reviewed-by: Eric Seckler <eseckler@chromium.org> Cr-Commit-Position: refs/heads/master@{#810281}
This commit is contained in:
@ -98,6 +98,7 @@ _OS_SPECIFIC_FILTER['win'] = [
|
|||||||
'ChromeDownloadDirTest.testFileDownloadAfterTabHeadless',
|
'ChromeDownloadDirTest.testFileDownloadAfterTabHeadless',
|
||||||
'ChromeDownloadDirTest.testFileDownloadWithClickHeadless',
|
'ChromeDownloadDirTest.testFileDownloadWithClickHeadless',
|
||||||
'ChromeDownloadDirTest.testFileDownloadWithGetHeadless',
|
'ChromeDownloadDirTest.testFileDownloadWithGetHeadless',
|
||||||
|
'RemoteBrowserTest.testConnectToRemoteBrowserLiteralAddressHeadless',
|
||||||
# HeadlessInvalidCertificateTest is sometimes flaky.
|
# HeadlessInvalidCertificateTest is sometimes flaky.
|
||||||
'HeadlessInvalidCertificateTest.*',
|
'HeadlessInvalidCertificateTest.*',
|
||||||
# Similar issues with HeadlessChromeDriverTest.
|
# Similar issues with HeadlessChromeDriverTest.
|
||||||
@ -4283,6 +4284,50 @@ class RemoteBrowserTest(ChromeDriverBaseTest):
|
|||||||
else: # Else clause gets invoked if "break" never happens.
|
else: # Else clause gets invoked if "break" never happens.
|
||||||
raise # This re-raises the most recent exception.
|
raise # This re-raises the most recent exception.
|
||||||
|
|
||||||
|
def testConnectToRemoteBrowserLiteralAddressHeadless(self):
|
||||||
|
debug_addrs = ['127.0.0.1', '::1']
|
||||||
|
debug_url_addrs = ['127.0.0.1', '[::1]']
|
||||||
|
|
||||||
|
for (debug_addr, debug_url_addr) in zip(debug_addrs, debug_url_addrs):
|
||||||
|
# Must use retries since there is an inherent race condition in port
|
||||||
|
# selection.
|
||||||
|
ports_generator = util.FindProbableFreePorts()
|
||||||
|
for _ in range(3):
|
||||||
|
port = ports_generator.next()
|
||||||
|
temp_dir = util.MakeTempDir()
|
||||||
|
print 'temp dir is ' + temp_dir
|
||||||
|
cmd = [_CHROME_BINARY,
|
||||||
|
'--headless',
|
||||||
|
'--remote-debugging-address=%s' % debug_addr,
|
||||||
|
'--remote-debugging-port=%d' % port,
|
||||||
|
'--user-data-dir=%s' % temp_dir,
|
||||||
|
'--use-mock-keychain']
|
||||||
|
process = subprocess.Popen(cmd)
|
||||||
|
try:
|
||||||
|
driver = self.CreateDriver(
|
||||||
|
debugger_address='%s:%d' % (debug_url_addr, port))
|
||||||
|
driver.ExecuteScript(
|
||||||
|
'console.info("%s")' % 'connecting at %d!' % port)
|
||||||
|
driver.Quit()
|
||||||
|
except:
|
||||||
|
continue
|
||||||
|
finally:
|
||||||
|
if process.poll() is None:
|
||||||
|
process.terminate()
|
||||||
|
# Wait for Chrome to exit here to prevent a race with Chrome to
|
||||||
|
# delete/modify the temporary user-data-dir.
|
||||||
|
# Maximum wait ~1 second.
|
||||||
|
for _ in range(20):
|
||||||
|
if process.poll() is not None:
|
||||||
|
break
|
||||||
|
print 'continuing to wait for Chrome to exit'
|
||||||
|
time.sleep(.05)
|
||||||
|
else:
|
||||||
|
process.kill()
|
||||||
|
break
|
||||||
|
else: # Else clause gets invoked if "break" never happens.
|
||||||
|
raise # This re-raises the most recent exception.
|
||||||
|
|
||||||
|
|
||||||
class LaunchDesktopTest(ChromeDriverBaseTest):
|
class LaunchDesktopTest(ChromeDriverBaseTest):
|
||||||
"""Tests that launching desktop Chrome works."""
|
"""Tests that launching desktop Chrome works."""
|
||||||
|
@ -715,7 +715,7 @@ int HeadlessShellMain(int argc, const char** argv) {
|
|||||||
address =
|
address =
|
||||||
command_line.GetSwitchValueASCII(switches::kRemoteDebuggingAddress);
|
command_line.GetSwitchValueASCII(switches::kRemoteDebuggingAddress);
|
||||||
net::IPAddress parsed_address;
|
net::IPAddress parsed_address;
|
||||||
if (!net::ParseURLHostnameToAddress(address, &parsed_address)) {
|
if (!parsed_address.AssignFromIPLiteral(address)) {
|
||||||
LOG(ERROR) << "Invalid devtools server address";
|
LOG(ERROR) << "Invalid devtools server address";
|
||||||
return EXIT_FAILURE;
|
return EXIT_FAILURE;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user