1
// Copyright 2007, Google Inc.
3
// Redistribution and use in source and binary forms, with or without
4
// modification, are permitted provided that the following conditions are met:
6
// 1. Redistributions of source code must retain the above copyright notice,
7
// this list of conditions and the following disclaimer.
8
// 2. Redistributions in binary form must reproduce the above copyright notice,
9
// this list of conditions and the following disclaimer in the documentation
10
// and/or other materials provided with the distribution.
11
// 3. Neither the name of Google Inc. nor the names of its contributors may be
12
// used to endorse or promote products derived from this software without
13
// specific prior written permission.
15
// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
16
// WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
17
// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
18
// EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
19
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
20
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
21
// OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
22
// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
23
// OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
24
// ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26
#include "gears/base/common/common.h" // for ARRAYSIZE
27
#include "gears/localserver/common/http_constants.h"
28
#include "gears/localserver/ie/urlmon_utils.h"
29
#include "third_party/passthru_app/urlmon_ie7_extras.h"
33
void TraceBindFlags(DWORD flags) {
35
if (flags & BINDF_ASYNCHRONOUS)
36
LOG16((L"BINDF_ASYNCHRONOUS, "));
37
if (flags & BINDF_ASYNCSTORAGE)
38
LOG16((L"BINDF_ASYNCSTORAGE, "));
39
if (flags & BINDF_NOPROGRESSIVERENDERING)
40
LOG16((L"BINDF_NOPROGRESSIVERENDERING, "));
41
if (flags & BINDF_OFFLINEOPERATION)
42
LOG16((L"BINDF_OFFLINEOPERATION, "));
43
if (flags & BINDF_GETNEWESTVERSION)
44
LOG16((L"BINDF_GETNEWESTVERSION, "));
45
if (flags & BINDF_NOWRITECACHE)
46
LOG16((L"BINDF_NOWRITECACHE, "));
47
if (flags & BINDF_NEEDFILE)
48
LOG16((L"BINDF_NEEDFILE, "));
49
if (flags & BINDF_PULLDATA)
50
LOG16((L"BINDF_PULLDATA, "));
51
if (flags & BINDF_IGNORESECURITYPROBLEM)
52
LOG16((L"BINDF_IGNORESECURITYPROBLEM, "));
53
if (flags & BINDF_RESYNCHRONIZE)
54
LOG16((L"BINDF_RESYNCHRONIZE, "));
55
if (flags & BINDF_HYPERLINK)
56
LOG16((L"BINDF_HYPERLINK, "));
57
if (flags & BINDF_NO_UI)
58
LOG16((L"BINDF_NO_UI, "));
59
if (flags & BINDF_SILENTOPERATION)
60
LOG16((L"BINDF_SILENTOPERATION, "));
61
if (flags & BINDF_PRAGMA_NO_CACHE)
62
LOG16((L"BINDF_PRAGMA_NO_CACHE, "));
63
if (flags & BINDF_GETCLASSOBJECT)
64
LOG16((L"BINDF_GETCLASSOBJECT, "));
65
if (flags & BINDF_RESERVED_1)
66
LOG16((L"BINDF_RESERVED_1, "));
67
if (flags & BINDF_FREE_THREADED)
68
LOG16((L"BINDF_FREE_THREADED, "));
69
if (flags & BINDF_DIRECT_READ)
70
LOG16((L"BINDF_DIRECT_READ, "));
71
if (flags & BINDF_FORMS_SUBMIT)
72
LOG16((L"BINDF_FORMS_SUBMIT, "));
73
if (flags & BINDF_GETFROMCACHE_IF_NET_FAIL)
74
LOG16((L"BINDF_GETFROMCACHE_IF_NET_FAIL, "));
75
if (flags & BINDF_FROMURLMON)
76
LOG16((L"BINDF_FROMURLMON, "));
77
if (flags & BINDF_FWD_BACK)
78
LOG16((L"BINDF_FWD_BACK, "));
79
if (flags & BINDF_PREFERDEFAULTHANDLER)
80
LOG16((L"BINDF_PREFERDEFAULTHANDLER, "));
81
if (flags & BINDF_ENFORCERESTRICTED)
82
LOG16((L"BINDF_ENFORCERESTRICTED"));
88
const char16 *GetBindStatusLabel(DWORD status) {
89
const char16 *kUnknownStatus = L"Unknown status";
90
const char16 *kBindStatusLabels[] = {
92
L"BINDSTATUS_FINDINGRESOURCE", //", // 1,
93
L"BINDSTATUS_CONNECTING", // BINDSTATUS_FINDINGRESOURCE + 1,
94
L"BINDSTATUS_REDIRECTING", // BINDSTATUS_CONNECTING + 1,
95
L"BINDSTATUS_BEGINDOWNLOADDATA", // BINDSTATUS_REDIRECTING + 1,
96
L"BINDSTATUS_DOWNLOADINGDATA", // BINDSTATUS_BEGINDOWNLOADDATA + 1,
97
L"BINDSTATUS_ENDDOWNLOADDATA", // BINDSTATUS_DOWNLOADINGDATA + 1,
98
L"BINDSTATUS_BEGINDOWNLOADCOMPONENTS", // BINDSTATUS_ENDDOWNLOADDATA + 1,
99
L"BINDSTATUS_INSTALLINGCOMPONENTS", // BINDSTATUS_BEGINDOWNLOADCOMPONENTS + 1,
100
L"BINDSTATUS_ENDDOWNLOADCOMPONENTS", // BINDSTATUS_INSTALLINGCOMPONENTS + 1,
101
L"BINDSTATUS_USINGCACHEDCOPY", // BINDSTATUS_ENDDOWNLOADCOMPONENTS + 1,
102
L"BINDSTATUS_SENDINGREQUEST", // BINDSTATUS_USINGCACHEDCOPY + 1,
103
L"BINDSTATUS_CLASSIDAVAILABLE", // BINDSTATUS_SENDINGREQUEST + 1,
104
L"BINDSTATUS_MIMETYPEAVAILABLE", // BINDSTATUS_CLASSIDAVAILABLE + 1,
105
L"BINDSTATUS_CACHEFILENAMEAVAILABLE", // BINDSTATUS_MIMETYPEAVAILABLE + 1,
106
L"BINDSTATUS_BEGINSYNCOPERATION", // BINDSTATUS_CACHEFILENAMEAVAILABLE + 1,
107
L"BINDSTATUS_ENDSYNCOPERATION", // BINDSTATUS_BEGINSYNCOPERATION + 1,
108
L"BINDSTATUS_BEGINUPLOADDATA", // BINDSTATUS_ENDSYNCOPERATION + 1,
109
L"BINDSTATUS_UPLOADINGDATA", // BINDSTATUS_BEGINUPLOADDATA + 1,
110
L"BINDSTATUS_ENDUPLOADDATA", // BINDSTATUS_UPLOADINGDATA + 1,
111
L"BINDSTATUS_PROTOCOLCLASSID", // BINDSTATUS_ENDUPLOADDATA + 1,
112
L"BINDSTATUS_ENCODING", // BINDSTATUS_PROTOCOLCLASSID + 1,
113
L"BINDSTATUS_VERIFIEDMIMETYPEAVAILABLE", // BINDSTATUS_ENCODING + 1,
114
L"BINDSTATUS_CLASSINSTALLLOCATION", // BINDSTATUS_VERIFIEDMIMETYPEAVAILABLE + 1,
115
L"BINDSTATUS_DECODING", // BINDSTATUS_CLASSINSTALLLOCATION + 1,
116
L"BINDSTATUS_LOADINGMIMEHANDLER", // BINDSTATUS_DECODING + 1,
117
L"BINDSTATUS_CONTENTDISPOSITIONATTACH", // BINDSTATUS_LOADINGMIMEHANDLER + 1,
118
L"BINDSTATUS_FILTERREPORTMIMETYPE", // BINDSTATUS_CONTENTDISPOSITIONATTACH + 1,
119
L"BINDSTATUS_CLSIDCANINSTANTIATE", // BINDSTATUS_FILTERREPORTMIMETYPE + 1,
120
L"BINDSTATUS_IUNKNOWNAVAILABLE", // BINDSTATUS_CLSIDCANINSTANTIATE + 1,
121
L"BINDSTATUS_DIRECTBIND", // BINDSTATUS_IUNKNOWNAVAILABLE + 1,
122
L"BINDSTATUS_RAWMIMETYPE", // BINDSTATUS_DIRECTBIND + 1,
123
L"BINDSTATUS_PROXYDETECTING", // BINDSTATUS_RAWMIMETYPE + 1,
124
L"BINDSTATUS_ACCEPTRANGES", // BINDSTATUS_PROXYDETECTING + 1,
125
L"BINDSTATUS_COOKIE_SENT", // BINDSTATUS_ACCEPTRANGES + 1,
126
L"BINDSTATUS_COMPACT_POLICY_RECEIVED", // BINDSTATUS_COOKIE_SENT + 1,
127
L"BINDSTATUS_COOKIE_SUPPRESSED", // BINDSTATUS_COMPACT_POLICY_RECEIVED + 1,
128
L"BINDSTATUS_COOKIE_STATE_UNKNOWN", // BINDSTATUS_COOKIE_SUPPRESSED + 1,
129
L"BINDSTATUS_COOKIE_STATE_ACCEPT", // BINDSTATUS_COOKIE_STATE_UNKNOWN + 1,
130
L"BINDSTATUS_COOKIE_STATE_REJECT", // BINDSTATUS_COOKIE_STATE_ACCEPT + 1,
131
L"BINDSTATUS_COOKIE_STATE_PROMPT", // BINDSTATUS_COOKIE_STATE_REJECT + 1,
132
L"BINDSTATUS_COOKIE_STATE_LEASH", // BINDSTATUS_COOKIE_STATE_PROMPT + 1,
133
L"BINDSTATUS_COOKIE_STATE_DOWNGRADE", // BINDSTATUS_COOKIE_STATE_LEASH + 1,
134
L"BINDSTATUS_POLICY_HREF", // BINDSTATUS_COOKIE_STATE_DOWNGRADE + 1,
135
L"BINDSTATUS_P3P_HEADER", // BINDSTATUS_POLICY_HREF + 1,
136
L"BINDSTATUS_SESSION_COOKIE_RECEIVED", // BINDSTATUS_P3P_HEADER + 1,
137
L"BINDSTATUS_PERSISTENT_COOKIE_RECEIVED", // BINDSTATUS_SESSION_COOKIE_RECEIVED + 1,
138
L"BINDSTATUS_SESSION_COOKIES_ALLOWED", // BINDSTATUS_PERSISTENT_COOKIE_RECEIVED + 1
141
if (status > ARRAYSIZE(kBindStatusLabels) - 1) {
142
return kUnknownStatus;
144
return kBindStatusLabels[status];
148
static const char16 *kUnknownOption = L"Unknown option";
149
static const char16 *kUndefined = L"Undefined";
150
static const char16 *kWinInetLockHandle = L"WININETINFO_OPTION_LOCK_HANDLE";
152
// String constants for various options passed to IWinInetInfo::QueryOption,
154
static const char16 *kWinInetInfoOptionLabels[] = {
156
// options manifests for Internet{Query|Set}Option
159
L"INTERNET_OPTION_CALLBACK", // 1
160
L"INTERNET_OPTION_CONNECT_TIMEOUT", // 2
161
L"INTERNET_OPTION_CONNECT_RETRIES", // 3
162
L"INTERNET_OPTION_CONNECT_BACKOFF", // 4
163
L"INTERNET_OPTION_SEND_TIMEOUT", // 5
164
L"INTERNET_OPTION_RECEIVE_TIMEOUT", // 6
165
L"INTERNET_OPTION_DATA_SEND_TIMEOUT", // 7
166
L"INTERNET_OPTION_DATA_RECEIVE_TIMEOUT", // 8
167
L"INTERNET_OPTION_HANDLE_TYPE", // 9
169
L"INTERNET_OPTION_LISTEN_TIMEOUT", // 11
170
L"INTERNET_OPTION_READ_BUFFER_SIZE", // 12
171
L"INTERNET_OPTION_WRITE_BUFFER_SIZE", // 13
173
L"INTERNET_OPTION_ASYNC_ID", // 15
174
L"INTERNET_OPTION_ASYNC_PRIORITY", // 16
179
L"INTERNET_OPTION_PARENT_HANDLE", // 21
180
L"INTERNET_OPTION_KEEP_CONNECTION", // 22
181
L"INTERNET_OPTION_REQUEST_FLAGS", // 23
182
L"INTERNET_OPTION_EXTENDED_ERROR", // 24
184
L"INTERNET_OPTION_OFFLINE_MODE", // 26
185
L"INTERNET_OPTION_CACHE_STREAM_HANDLE", // 27
186
L"INTERNET_OPTION_USERNAME", // 28
187
L"INTERNET_OPTION_PASSWORD", // 29
188
L"INTERNET_OPTION_ASYNC", // 30
189
L"INTERNET_OPTION_SECURITY_FLAGS", // 31
190
L"INTERNET_OPTION_SECURITY_CERTIFICATE_STRUCT", // 32
191
L"INTERNET_OPTION_DATAFILE_NAME", // 33
192
L"INTERNET_OPTION_URL", // 34
193
L"INTERNET_OPTION_SECURITY_CERTIFICATE", // 35
194
L"INTERNET_OPTION_SECURITY_KEY_BITNESS", // 36
195
L"INTERNET_OPTION_REFRESH", // 37
196
L"INTERNET_OPTION_PROXY", // 38
197
L"INTERNET_OPTION_SETTINGS_CHANGED", // 39
198
L"INTERNET_OPTION_VERSION", // 40
199
L"INTERNET_OPTION_USER_AGENT", // 41
200
L"INTERNET_OPTION_END_BROWSER_SESSION", // 42
201
L"INTERNET_OPTION_PROXY_USERNAME", // 43
202
L"INTERNET_OPTION_PROXY_PASSWORD", // 44
203
L"INTERNET_OPTION_CONTEXT_VALUE", // 45
204
L"INTERNET_OPTION_CONNECT_LIMIT", // 46
205
L"INTERNET_OPTION_SECURITY_SELECT_CLIENT_CERT", // 47
206
L"INTERNET_OPTION_POLICY", // 48
207
L"INTERNET_OPTION_DISCONNECTED_TIMEOUT", // 49
208
L"INTERNET_OPTION_CONNECTED_STATE", // 50
209
L"INTERNET_OPTION_IDLE_STATE", // 51
210
L"INTERNET_OPTION_OFFLINE_SEMANTICS", // 52
211
L"INTERNET_OPTION_SECONDARY_CACHE_KEY", // 53
212
L"INTERNET_OPTION_CALLBACK_FILTER", // 54
213
L"INTERNET_OPTION_CONNECT_TIME", // 55
214
L"INTERNET_OPTION_SEND_THROUGHPUT", // 56
215
L"INTERNET_OPTION_RECEIVE_THROUGHPUT", // 57
216
L"INTERNET_OPTION_REQUEST_PRIORITY", // 58
217
L"INTERNET_OPTION_HTTP_VERSION", // 59
218
L"INTERNET_OPTION_RESET_URLCACHE_SESSION", // 60
220
L"INTERNET_OPTION_ERROR_MASK", // 62
221
L"INTERNET_OPTION_FROM_CACHE_TIMEOUT", // 63
222
L"INTERNET_OPTION_BYPASS_EDITED_ENTRY", // 64
225
L"INTERNET_OPTION_DIAGNOSTIC_SOCKET_INFO", // 67
226
L"INTERNET_OPTION_CODEPAGE", // 68
227
L"INTERNET_OPTION_CACHE_TIMESTAMPS", // 69
228
L"INTERNET_OPTION_DISABLE_AUTODIAL", // 70
231
L"INTERNET_OPTION_MAX_CONNS_PER_SERVER", // 73
232
L"INTERNET_OPTION_MAX_CONNS_PER_1_0_SERVER", // 74
233
L"INTERNET_OPTION_PER_CONNECTION_OPTION", // 75
234
L"INTERNET_OPTION_DIGEST_AUTH_UNLOAD", // 76
235
L"INTERNET_OPTION_IGNORE_OFFLINE", // 77
236
L"INTERNET_OPTION_IDENTITY", // 78
237
L"INTERNET_OPTION_REMOVE_IDENTITY", // 79
238
L"INTERNET_OPTION_ALTER_IDENTITY", // 80
239
L"INTERNET_OPTION_SUPPRESS_BEHAVIOR", // 81
240
L"INTERNET_OPTION_AUTODIAL_MODE", // 82
241
L"INTERNET_OPTION_AUTODIAL_CONNECTION", // 83
242
L"INTERNET_OPTION_CLIENT_CERT_CONTEXT", // 84
243
L"INTERNET_OPTION_AUTH_FLAGS", // 85
244
L"INTERNET_OPTION_COOKIES_3RD_PARTY", // 86
245
L"INTERNET_OPTION_DISABLE_PASSPORT_AUTH", // 87
246
L"INTERNET_OPTION_SEND_UTF8_SERVERNAME_TO_PROXY", // 88
247
L"INTERNET_OPTION_EXEMPT_CONNECTION_LIMIT", // 89
248
L"INTERNET_OPTION_ENABLE_PASSPORT_AUTH", // 90
249
L"INTERNET_OPTION_HIBERNATE_INACTIVE_WORKER_THREADS", // 91
250
L"INTERNET_OPTION_ACTIVATE_WORKER_THREADS", // 92
251
L"INTERNET_OPTION_RESTORE_WORKER_THREAD_DEFAULTS", // 93
252
L"INTERNET_OPTION_SOCKET_SEND_BUFFER_LENGTH", // 94
253
L"INTERNET_OPTION_PROXY_SETTINGS_CHANGED", // 95
257
// String constants for various options passed to IWinInetHttpInfo::QueryInfo
258
// Used for logging and to map from option code to an HTTP header name
259
// TODO(michaeln): fill in more header_names here
260
static const struct {
261
const char16 *label; // string representation of the option param
262
const char16 *header_name; // a corresponding http header
263
} kHttpQueryInfoOptions[] = {
265
// HttpQueryInfo info levels. Generally, there is one info level
266
// for each potential RFC822/HTTP/MIME header that an HTTP server
267
// may send as part of a request response.
269
// The HTTP_QUERY_RAW_HEADERS info level is provided for clients
270
// that choose to perform their own header parsing.
272
// See http://www.ietf.org/rfc/rfc2616.txt for http header infomation.
274
{L"HTTP_QUERY_MIME_VERSION", // 0
276
{L"HTTP_QUERY_CONTENT_TYPE", // 1
277
HttpConstants::kContentTypeHeader},
278
{L"HTTP_QUERY_CONTENT_TRANSFER_ENCODING", // 2
280
{L"HTTP_QUERY_CONTENT_ID", // 3
282
{L"HTTP_QUERY_CONTENT_DESCRIPTION", // 4
284
{L"HTTP_QUERY_CONTENT_LENGTH", // 5
285
HttpConstants::kContentLengthHeader},
286
{L"HTTP_QUERY_CONTENT_LANGUAGE", // 6
288
{L"HTTP_QUERY_ALLOW", // 7
290
{L"HTTP_QUERY_PUBLIC", // 8
292
{L"HTTP_QUERY_DATE", // 9
294
{L"HTTP_QUERY_EXPIRES", // 10
296
{L"HTTP_QUERY_LAST_MODIFIED", // 11
297
HttpConstants::kLastModifiedHeader},
298
{L"HTTP_QUERY_MESSAGE_ID", // 12
300
{L"HTTP_QUERY_URI", // 13
301
HttpConstants::kUriHeader},
302
{L"HTTP_QUERY_DERIVED_FROM", // 14
304
{L"HTTP_QUERY_COST", // 15
306
{L"HTTP_QUERY_LINK", // 16
308
{L"HTTP_QUERY_PRAGMA", // 17
309
HttpConstants::kPragmaHeader},
310
{L"HTTP_QUERY_VERSION", // 18 part of status line
312
{L"HTTP_QUERY_STATUS_CODE", // 19 part of status line
314
{L"HTTP_QUERY_STATUS_TEXT", // 20 part of status line
316
{L"HTTP_QUERY_RAW_HEADERS", // 21 all headers as ASCIIZ
318
{L"HTTP_QUERY_RAW_HEADERS_CRLF", // 22 all headers
320
{L"HTTP_QUERY_CONNECTION", // 23
322
{L"HTTP_QUERY_ACCEPT", // 24
324
{L"HTTP_QUERY_ACCEPT_CHARSET", // 25
326
{L"HTTP_QUERY_ACCEPT_ENCODING", // 26
328
{L"HTTP_QUERY_ACCEPT_LANGUAGE", // 27
330
{L"HTTP_QUERY_AUTHORIZATION", // 28
332
{L"HTTP_QUERY_CONTENT_ENCODING", // 29
334
{L"HTTP_QUERY_FORWARDED", // 30
336
{L"HTTP_QUERY_FROM", // 31
338
{L"HTTP_QUERY_IF_MODIFIED_SINCE", // 32
340
{L"HTTP_QUERY_LOCATION", // 33
342
{L"HTTP_QUERY_ORIG_URI", // 34
344
{L"HTTP_QUERY_REFERER", // 35
346
{L"HTTP_QUERY_RETRY_AFTER", // 36
348
{L"HTTP_QUERY_SERVER", // 37
350
{L"HTTP_QUERY_TITLE", // 38
352
{L"HTTP_QUERY_USER_AGENT", // 39
354
{L"HTTP_QUERY_WWW_AUTHENTICATE", // 40
356
{L"HTTP_QUERY_PROXY_AUTHENTICATE", // 41
358
{L"HTTP_QUERY_ACCEPT_RANGES", // 42
360
{L"HTTP_QUERY_SET_COOKIE", // 43
362
{L"HTTP_QUERY_COOKIE", // 44
364
{L"HTTP_QUERY_REQUEST_METHOD", // 45 GET/POST etc.
366
{L"HTTP_QUERY_REFRESH", // 46
368
{L"HTTP_QUERY_CONTENT_DISPOSITION", // 47
369
HttpConstants::kContentDispositionHeader},
371
// HTTP 1.1 defined headers
373
{L"HTTP_QUERY_AGE", // 48
375
{L"HTTP_QUERY_CACHE_CONTROL", // 49
376
HttpConstants::kCacheControlHeader},
377
{L"HTTP_QUERY_CONTENT_BASE", // 50
379
{L"HTTP_QUERY_CONTENT_LOCATION", // 51
381
{L"HTTP_QUERY_CONTENT_MD5", // 52
383
{L"HTTP_QUERY_CONTENT_RANGE", // 53
385
{L"HTTP_QUERY_ETAG", // 54
387
{L"HTTP_QUERY_HOST", // 55
389
{L"HTTP_QUERY_IF_MATCH", // 56
391
{L"HTTP_QUERY_IF_NONE_MATCH", // 57
393
{L"HTTP_QUERY_IF_RANGE", // 58
395
{L"HTTP_QUERY_IF_UNMODIFIED_SINCE", // 59
397
{L"HTTP_QUERY_MAX_FORWARDS", // 60
399
{L"HTTP_QUERY_PROXY_AUTHORIZATION", // 61
401
{L"HTTP_QUERY_RANGE", // 62
403
{L"HTTP_QUERY_TRANSFER_ENCODING", // 63
405
{L"HTTP_QUERY_UPGRADE", // 64
407
{L"HTTP_QUERY_VARY", // 65
409
{L"HTTP_QUERY_VIA", // 66
411
{L"HTTP_QUERY_WARNING", // 67
413
{L"HTTP_QUERY_EXPECT", // 68
415
{L"HTTP_QUERY_PROXY_CONNECTION", // 69
417
{L"HTTP_QUERY_UNLESS_MODIFIED_SINCE", // 70
419
{L"HTTP_QUERY_ECHO_REQUEST", // 71
421
{L"HTTP_QUERY_ECHO_REPLY", // 72
423
// These are the set of headers that should be added back to a request when
424
// re-doing a request after a RETRY_WITH response.
425
{L"HTTP_QUERY_ECHO_HEADERS", // 73
427
{L"HTTP_QUERY_ECHO_HEADERS_CRLF", // 74
429
{L"HTTP_QUERY_PROXY_SUPPORT", // 75
431
{L"HTTP_QUERY_AUTHENTICATION_INFO", // 76
433
{L"HTTP_QUERY_PASSPORT_URLS", // 77
435
{L"HTTP_QUERY_PASSPORT_CONFIG", // 78
440
const char16 *GetWinInetInfoLabel(DWORD option) {
441
if (option == WININETINFO_OPTION_LOCK_HANDLE) {
442
return kWinInetLockHandle;
443
} else if (option > ARRAYSIZE(kWinInetInfoOptionLabels) - 1) {
444
return kUnknownOption;
446
return kWinInetInfoOptionLabels[option];
451
const char16 *GetWinInetHttpInfoLabel(DWORD option) {
452
if (option == WININETINFO_OPTION_LOCK_HANDLE) {
453
return kWinInetLockHandle;
454
} else if (option > ARRAYSIZE(kHttpQueryInfoOptions) - 1) {
455
return kUnknownOption;
457
return kHttpQueryInfoOptions[option].label;
462
const char16 *GetProtocolInfoLabel(QUERYOPTION option) {
463
static const char16* kQueryOptionLabels[] = {
464
L"QUERY_OPTION_INVALID",
465
L"QUERY_EXPIRATION_DATE",
466
L"QUERY_TIME_OF_LAST_CHANGE",
467
L"QUERY_CONTENT_ENCODING",
468
L"QUERY_CONTENT_TYPE",
471
L"QUERY_CAN_NAVIGATE",
472
L"QUERY_USES_NETWORK",
474
L"QUERY_IS_INSTALLEDENTRY",
475
L"QUERY_IS_CACHED_OR_MAPPED",
479
L"QUERY_USES_HISTORYFOLDER"
481
return ((option > 0) && (option <= QUERY_USES_HISTORYFOLDER))
482
? kQueryOptionLabels[option]
483
: kQueryOptionLabels[0];
489
const char16 *GetWinInetHttpInfoHeaderName(DWORD option) {
490
if (option > ARRAYSIZE(kHttpQueryInfoOptions) - 1) {
493
return kHttpQueryInfoOptions[option].header_name;