~ubuntu-branches/ubuntu/karmic/gears/karmic

« back to all changes in this revision

Viewing changes to gears/localserver/ie/urlmon_utils.cc

  • Committer: Bazaar Package Importer
  • Author(s): Stefan Lesicnik
  • Date: 2009-04-30 19:15:25 UTC
  • Revision ID: james.westby@ubuntu.com-20090430191525-0790sb5wzg8ou0xb
Tags: upstream-0.5.21.0~svn3334+dfsg
ImportĀ upstreamĀ versionĀ 0.5.21.0~svn3334+dfsg

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
// Copyright 2007, Google Inc.
 
2
//
 
3
// Redistribution and use in source and binary forms, with or without 
 
4
// modification, are permitted provided that the following conditions are met:
 
5
//
 
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.
 
14
//
 
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.
 
25
 
 
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"
 
30
 
 
31
 
 
32
#ifdef DEBUG
 
33
void TraceBindFlags(DWORD flags) {
 
34
  LOG16((L"  "));
 
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"));
 
83
  LOG16((L"\n"));
 
84
}
 
85
#endif
 
86
 
 
87
#ifdef DEBUG
 
88
const char16 *GetBindStatusLabel(DWORD status) {
 
89
  const char16 *kUnknownStatus = L"Unknown status";
 
90
  const char16 *kBindStatusLabels[] = {
 
91
      kUnknownStatus,
 
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
 
139
    };
 
140
 
 
141
  if (status > ARRAYSIZE(kBindStatusLabels) - 1) {
 
142
    return kUnknownStatus;
 
143
  } else {
 
144
    return kBindStatusLabels[status];
 
145
  }
 
146
}
 
147
 
 
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";
 
151
 
 
152
// String constants for various options passed to IWinInetInfo::QueryOption,
 
153
// Used for logging
 
154
static const char16 *kWinInetInfoOptionLabels[] = {
 
155
    //
 
156
    // options manifests for Internet{Query|Set}Option
 
157
    //
 
158
    kUndefined,
 
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
 
168
    kUndefined,
 
169
    L"INTERNET_OPTION_LISTEN_TIMEOUT",  //          11
 
170
    L"INTERNET_OPTION_READ_BUFFER_SIZE",  //        12
 
171
    L"INTERNET_OPTION_WRITE_BUFFER_SIZE",  //       13
 
172
    kUndefined,
 
173
    L"INTERNET_OPTION_ASYNC_ID",  //                15
 
174
    L"INTERNET_OPTION_ASYNC_PRIORITY",  //          16
 
175
    kUndefined,
 
176
    kUndefined,
 
177
    kUndefined,
 
178
    kUndefined,
 
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
 
183
    kUndefined,
 
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
 
219
    kUndefined,
 
220
    L"INTERNET_OPTION_ERROR_MASK",  //              62
 
221
    L"INTERNET_OPTION_FROM_CACHE_TIMEOUT",  //      63
 
222
    L"INTERNET_OPTION_BYPASS_EDITED_ENTRY",  //     64
 
223
    kUndefined,
 
224
    kUndefined,
 
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
 
229
    kUndefined,
 
230
    kUndefined,
 
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
 
254
  };
 
255
#endif  // DEBUG
 
256
 
 
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[] = {
 
264
  //
 
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.
 
268
  //
 
269
  // The HTTP_QUERY_RAW_HEADERS info level is provided for clients
 
270
  // that choose to perform their own header parsing.
 
271
  //
 
272
  // See http://www.ietf.org/rfc/rfc2616.txt for http header infomation.
 
273
  //
 
274
  {L"HTTP_QUERY_MIME_VERSION",                // 0
 
275
   NULL},
 
276
  {L"HTTP_QUERY_CONTENT_TYPE",                // 1
 
277
   HttpConstants::kContentTypeHeader},
 
278
  {L"HTTP_QUERY_CONTENT_TRANSFER_ENCODING",   // 2
 
279
   NULL},
 
280
  {L"HTTP_QUERY_CONTENT_ID",                  // 3
 
281
   NULL},
 
282
  {L"HTTP_QUERY_CONTENT_DESCRIPTION",         // 4
 
283
   NULL},
 
284
  {L"HTTP_QUERY_CONTENT_LENGTH",              // 5
 
285
   HttpConstants::kContentLengthHeader},
 
286
  {L"HTTP_QUERY_CONTENT_LANGUAGE",            // 6
 
287
   NULL},
 
288
  {L"HTTP_QUERY_ALLOW",                       // 7
 
289
   NULL},
 
290
  {L"HTTP_QUERY_PUBLIC",                      // 8
 
291
   L"Public"},
 
292
  {L"HTTP_QUERY_DATE",                        // 9
 
293
   L"Date"},
 
294
  {L"HTTP_QUERY_EXPIRES",                     // 10
 
295
   L"Expires"},
 
296
  {L"HTTP_QUERY_LAST_MODIFIED",               // 11
 
297
   HttpConstants::kLastModifiedHeader},   
 
298
  {L"HTTP_QUERY_MESSAGE_ID",                  // 12
 
299
   NULL},
 
300
  {L"HTTP_QUERY_URI",                         // 13
 
301
   HttpConstants::kUriHeader},
 
302
  {L"HTTP_QUERY_DERIVED_FROM",                // 14
 
303
   NULL},
 
304
  {L"HTTP_QUERY_COST",                        // 15
 
305
   NULL},
 
306
  {L"HTTP_QUERY_LINK",                        // 16
 
307
   NULL},
 
308
  {L"HTTP_QUERY_PRAGMA",                      // 17
 
309
   HttpConstants::kPragmaHeader},
 
310
  {L"HTTP_QUERY_VERSION",                     // 18 part of status line
 
311
   NULL},
 
312
  {L"HTTP_QUERY_STATUS_CODE",                 // 19  part of status line
 
313
   NULL},
 
314
  {L"HTTP_QUERY_STATUS_TEXT",                 // 20  part of status line
 
315
   NULL},
 
316
  {L"HTTP_QUERY_RAW_HEADERS",                 // 21  all headers as ASCIIZ
 
317
   NULL},
 
318
  {L"HTTP_QUERY_RAW_HEADERS_CRLF",            // 22  all headers
 
319
   NULL},
 
320
  {L"HTTP_QUERY_CONNECTION",                  // 23
 
321
   NULL},
 
322
  {L"HTTP_QUERY_ACCEPT",                      // 24
 
323
   NULL},
 
324
  {L"HTTP_QUERY_ACCEPT_CHARSET",              // 25
 
325
   NULL},
 
326
  {L"HTTP_QUERY_ACCEPT_ENCODING",             // 26
 
327
   NULL},
 
328
  {L"HTTP_QUERY_ACCEPT_LANGUAGE",             // 27
 
329
   NULL},
 
330
  {L"HTTP_QUERY_AUTHORIZATION",               // 28
 
331
   NULL},
 
332
  {L"HTTP_QUERY_CONTENT_ENCODING",            // 29
 
333
   NULL},
 
334
  {L"HTTP_QUERY_FORWARDED",                   // 30
 
335
   NULL},
 
336
  {L"HTTP_QUERY_FROM",                        // 31
 
337
   NULL},   
 
338
  {L"HTTP_QUERY_IF_MODIFIED_SINCE",           // 32
 
339
   NULL},
 
340
  {L"HTTP_QUERY_LOCATION",                    // 33
 
341
   NULL},
 
342
  {L"HTTP_QUERY_ORIG_URI",                    // 34
 
343
   NULL},
 
344
  {L"HTTP_QUERY_REFERER",                     // 35
 
345
   L"Referer"},
 
346
  {L"HTTP_QUERY_RETRY_AFTER",                 // 36
 
347
   NULL},
 
348
  {L"HTTP_QUERY_SERVER",                      // 37
 
349
   L"Server"},
 
350
  {L"HTTP_QUERY_TITLE",                       // 38
 
351
   NULL},
 
352
  {L"HTTP_QUERY_USER_AGENT",                  // 39
 
353
   L"User-Agent"},
 
354
  {L"HTTP_QUERY_WWW_AUTHENTICATE",            // 40
 
355
   NULL},
 
356
  {L"HTTP_QUERY_PROXY_AUTHENTICATE",          // 41
 
357
   NULL},
 
358
  {L"HTTP_QUERY_ACCEPT_RANGES",               // 42
 
359
   NULL},
 
360
  {L"HTTP_QUERY_SET_COOKIE",                  // 43
 
361
   L"Set-Cookie"},
 
362
  {L"HTTP_QUERY_COOKIE",                      // 44
 
363
   L"Cookie"},
 
364
  {L"HTTP_QUERY_REQUEST_METHOD",              // 45  GET/POST etc.
 
365
   NULL},
 
366
  {L"HTTP_QUERY_REFRESH",                     // 46
 
367
   NULL},
 
368
  {L"HTTP_QUERY_CONTENT_DISPOSITION",         // 47
 
369
   HttpConstants::kContentDispositionHeader},
 
370
  //
 
371
  // HTTP 1.1 defined headers
 
372
  //
 
373
  {L"HTTP_QUERY_AGE",                         // 48
 
374
   NULL},
 
375
  {L"HTTP_QUERY_CACHE_CONTROL",               // 49
 
376
   HttpConstants::kCacheControlHeader},
 
377
  {L"HTTP_QUERY_CONTENT_BASE",   //                 50
 
378
   NULL},
 
379
  {L"HTTP_QUERY_CONTENT_LOCATION",   //             51
 
380
   NULL},
 
381
  {L"HTTP_QUERY_CONTENT_MD5",   //                  52
 
382
   NULL},
 
383
  {L"HTTP_QUERY_CONTENT_RANGE",   //                53
 
384
   NULL},
 
385
  {L"HTTP_QUERY_ETAG",   //                      54
 
386
   L"ETag"},
 
387
  {L"HTTP_QUERY_HOST",   //                      55
 
388
   L"Host"},
 
389
  {L"HTTP_QUERY_IF_MATCH",   //                     56
 
390
   NULL},
 
391
  {L"HTTP_QUERY_IF_NONE_MATCH",   //                57
 
392
   NULL},
 
393
  {L"HTTP_QUERY_IF_RANGE",   //                     58
 
394
   NULL},
 
395
  {L"HTTP_QUERY_IF_UNMODIFIED_SINCE",   //          59
 
396
   NULL},
 
397
  {L"HTTP_QUERY_MAX_FORWARDS",   //                 60
 
398
   NULL},
 
399
  {L"HTTP_QUERY_PROXY_AUTHORIZATION",   //          61
 
400
   NULL},
 
401
  {L"HTTP_QUERY_RANGE",   //                        62
 
402
   NULL},
 
403
  {L"HTTP_QUERY_TRANSFER_ENCODING",   //            63
 
404
   NULL},
 
405
  {L"HTTP_QUERY_UPGRADE",   //                      64
 
406
   NULL},
 
407
  {L"HTTP_QUERY_VARY",   //                      65
 
408
   L"Vary"},
 
409
  {L"HTTP_QUERY_VIA",   //                        66
 
410
   L"Via"},
 
411
  {L"HTTP_QUERY_WARNING",   //                      67
 
412
   NULL},
 
413
  {L"HTTP_QUERY_EXPECT",   //                       68
 
414
   NULL},
 
415
  {L"HTTP_QUERY_PROXY_CONNECTION",   //             69
 
416
   NULL},
 
417
  {L"HTTP_QUERY_UNLESS_MODIFIED_SINCE",   //        70
 
418
   NULL},
 
419
  {L"HTTP_QUERY_ECHO_REQUEST",   //                 71
 
420
   NULL},
 
421
  {L"HTTP_QUERY_ECHO_REPLY",  //                   72
 
422
   NULL}, 
 
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
 
426
   NULL},
 
427
  {L"HTTP_QUERY_ECHO_HEADERS_CRLF",   //            74
 
428
   NULL},
 
429
  {L"HTTP_QUERY_PROXY_SUPPORT",   //                75
 
430
   NULL},
 
431
  {L"HTTP_QUERY_AUTHENTICATION_INFO",   //          76
 
432
   NULL},
 
433
  {L"HTTP_QUERY_PASSPORT_URLS",   //                77
 
434
   NULL},
 
435
  {L"HTTP_QUERY_PASSPORT_CONFIG",   //              78
 
436
   NULL},
 
437
};
 
438
 
 
439
#ifdef DEBUG
 
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;
 
445
  } else {
 
446
    return kWinInetInfoOptionLabels[option];
 
447
  }
 
448
}
 
449
 
 
450
 
 
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;
 
456
  } else {
 
457
    return kHttpQueryInfoOptions[option].label;
 
458
  }
 
459
}
 
460
 
 
461
 
 
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",
 
469
        L"QUERY_REFRESH",
 
470
        L"QUERY_RECOMBINE",
 
471
        L"QUERY_CAN_NAVIGATE",
 
472
        L"QUERY_USES_NETWORK",
 
473
        L"QUERY_IS_CACHED",
 
474
        L"QUERY_IS_INSTALLEDENTRY",
 
475
        L"QUERY_IS_CACHED_OR_MAPPED",
 
476
        L"QUERY_USES_CACHE",
 
477
        L"QUERY_IS_SECURE",
 
478
        L"QUERY_IS_SAFE",
 
479
        L"QUERY_USES_HISTORYFOLDER"
 
480
      };
 
481
  return ((option > 0) && (option <= QUERY_USES_HISTORYFOLDER))
 
482
         ? kQueryOptionLabels[option]
 
483
         : kQueryOptionLabels[0];
 
484
}
 
485
 
 
486
#endif  // DEBUG
 
487
 
 
488
 
 
489
const char16 *GetWinInetHttpInfoHeaderName(DWORD option) {
 
490
  if (option > ARRAYSIZE(kHttpQueryInfoOptions) - 1) {
 
491
    return NULL;
 
492
  } else {
 
493
    return kHttpQueryInfoOptions[option].header_name;
 
494
  }
 
495
}