Support setting static headers to be sent with every web driver request.
PiperOrigin-RevId: 294479855
diff --git a/lib/async_html.dart b/lib/async_html.dart
index c3740ff..ec38faf 100644
--- a/lib/async_html.dart
+++ b/lib/async_html.dart
@@ -36,9 +36,13 @@
Future<core.WebDriver> createDriver(
{Uri uri,
Map<String, dynamic> desired,
- WebDriverSpec spec = WebDriverSpec.Auto}) =>
- core.createDriver((prefix) => AsyncXhrRequestClient(prefix),
- uri: uri, desired: desired, spec: spec);
+ WebDriverSpec spec = WebDriverSpec.Auto,
+ Map<String, String> webDriverHeaders = const {}}) =>
+ core.createDriver(
+ (prefix) => AsyncXhrRequestClient(prefix, headers: webDriverHeaders),
+ uri: uri,
+ desired: desired,
+ spec: spec);
/// Creates an async WebDriver from existing session using
/// [AsyncXhrRequestClient].
diff --git a/lib/async_io.dart b/lib/async_io.dart
index b88ad3e..a2f0508 100644
--- a/lib/async_io.dart
+++ b/lib/async_io.dart
@@ -38,9 +38,13 @@
Future<core.WebDriver> createDriver(
{Uri uri,
Map<String, dynamic> desired,
- core.WebDriverSpec spec = core.WebDriverSpec.Auto}) =>
- core.createDriver((prefix) => AsyncIoRequestClient(prefix),
- uri: uri, desired: desired, spec: spec);
+ core.WebDriverSpec spec = core.WebDriverSpec.Auto,
+ Map<String, String> webDriverHeaders = const {}}) =>
+ core.createDriver(
+ (prefix) => AsyncIoRequestClient(prefix, headers: webDriverHeaders),
+ uri: uri,
+ desired: desired,
+ spec: spec);
/// Creates an async WebDriver from existing session using
/// [AsyncIoRequestClient].
diff --git a/lib/src/request/async_io_request_client.dart b/lib/src/request/async_io_request_client.dart
index 8e0cc08..73a6109 100644
--- a/lib/src/request/async_io_request_client.dart
+++ b/lib/src/request/async_io_request_client.dart
@@ -10,10 +10,13 @@
/// Async request client using dart:io package.
class AsyncIoRequestClient extends AsyncRequestClient {
final HttpClient client = HttpClient();
+ final Map<String, String> _headers;
final Lock _lock = Lock();
- AsyncIoRequestClient(Uri prefix) : super(prefix);
+ AsyncIoRequestClient(Uri prefix, {Map<String, String> headers = const {}})
+ : _headers = headers,
+ super(prefix);
@override
Future<WebDriverResponse> sendRaw(WebDriverRequest request) async {
@@ -33,6 +36,7 @@
}
httpRequest.followRedirects = true;
+ _headers.forEach(httpRequest.headers.add);
httpRequest.headers.add(HttpHeaders.acceptHeader, 'application/json');
httpRequest.headers.add(HttpHeaders.acceptCharsetHeader, utf8.name);
httpRequest.headers.add(HttpHeaders.cacheControlHeader, 'no-cache');
diff --git a/lib/src/request/async_xhr_request_client.dart b/lib/src/request/async_xhr_request_client.dart
index e898546..8eceda6 100644
--- a/lib/src/request/async_xhr_request_client.dart
+++ b/lib/src/request/async_xhr_request_client.dart
@@ -11,8 +11,11 @@
/// On the low level, it's using XMLHttpRequest object (XHR).
class AsyncXhrRequestClient extends AsyncRequestClient {
final Lock _lock = Lock();
+ final Map<String, String> _headers;
- AsyncXhrRequestClient(Uri prefix) : super(prefix);
+ AsyncXhrRequestClient(Uri prefix, {Map<String, String> headers = const {}})
+ : _headers = headers,
+ super(prefix);
@override
Future<WebDriverResponse> sendRaw(WebDriverRequest request) async {
@@ -20,6 +23,7 @@
final headers = {
'Accept': 'application/json',
+ ..._headers,
};
HttpRequest httpRequest;
diff --git a/lib/src/request/sync_http_request_client.dart b/lib/src/request/sync_http_request_client.dart
index 8676eb9..e9dc718 100644
--- a/lib/src/request/sync_http_request_client.dart
+++ b/lib/src/request/sync_http_request_client.dart
@@ -7,7 +7,10 @@
/// Sync request client using sync_http package.
class SyncHttpRequestClient extends SyncRequestClient {
- SyncHttpRequestClient(Uri prefix) : super(prefix);
+ final Map<String, String> _headers;
+ SyncHttpRequestClient(Uri prefix, {Map<String, String> headers = const {}})
+ : _headers = headers,
+ super(prefix);
@override
WebDriverResponse sendRaw(WebDriverRequest request) {
@@ -27,6 +30,7 @@
break;
}
+ _headers.forEach(httpRequest.headers.add);
httpRequest.headers.add(HttpHeaders.acceptHeader, 'application/json');
httpRequest.headers.add(HttpHeaders.cacheControlHeader, 'no-cache');
diff --git a/lib/sync_io.dart b/lib/sync_io.dart
index b3fdd88..9d2b896 100644
--- a/lib/sync_io.dart
+++ b/lib/sync_io.dart
@@ -31,9 +31,13 @@
core.WebDriver createDriver(
{Uri uri,
Map<String, dynamic> desired,
- core.WebDriverSpec spec = core.WebDriverSpec.Auto}) =>
- core.createDriver((prefix) => SyncHttpRequestClient(prefix),
- uri: uri, desired: desired, spec: spec);
+ core.WebDriverSpec spec = core.WebDriverSpec.Auto,
+ Map<String, String> webDriverHeaders = const {}}) =>
+ core.createDriver(
+ (prefix) => SyncHttpRequestClient(prefix, headers: webDriverHeaders),
+ uri: uri,
+ desired: desired,
+ spec: spec);
/// Creates a sync WebDriver from existing session using
/// [SyncHttpRequestClient].