Changeset 68147 in webkit
- Timestamp:
- Sep 23, 2010 9:12:57 AM (14 years ago)
- Location:
- trunk/WebCore
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/WebCore/ChangeLog
r68146 r68147 1 2010-09-23 Patrick Gansterer <paroga@webkit.org> 2 3 Reviewed by Adam Roben. 4 5 Cleanup network communication code in ResourceHandleWin 6 https://bugs.webkit.org/show_bug.cgi?id=46200 7 8 Add logic for request handling directly into ResourceHandle::start and fix style. 9 Use Unicode instead of ASCII Windows API functions. 10 11 * platform/network/ResourceHandleInternal.h: 12 (WebCore::ResourceHandleInternal::ResourceHandleInternal): 13 * platform/network/win/ResourceHandleWin.cpp: 14 (WebCore::ResourceHandle::onRequestComplete): 15 (WebCore::ResourceHandle::start): 16 1 17 2010-09-23 Luiz Agostini <luiz.agostini@openbossa.org> 2 18 -
trunk/WebCore/platform/network/ResourceHandleInternal.h
r68144 r68147 97 97 , m_jobId(0) 98 98 , m_threadId(0) 99 , m_internetHandle(0) 100 , m_connectHandle(0) 101 , m_requestHandle(0) 99 102 , m_sentEndRequest(false) 100 103 , m_bytesRemainingToWrite(0) … … 170 173 unsigned m_jobId; 171 174 DWORD m_threadId; 175 HINTERNET m_internetHandle; 176 HINTERNET m_connectHandle; 177 HINTERNET m_requestHandle; 172 178 bool m_sentEndRequest; 173 179 Vector<char> m_formData; -
trunk/WebCore/platform/network/win/ResourceHandleWin.cpp
r68144 r68147 382 382 } 383 383 384 PlatformDataStruct platformData; 385 platformData.errorString = 0; 386 platformData.error = 0; 387 platformData.loaded = ok; 388 389 if (!ok) { 390 int error = GetLastError(); 391 if (error == ERROR_IO_PENDING) 392 return; 393 DWORD errorStringChars = 0; 394 if (!InternetGetLastResponseInfo(&platformData.error, 0, &errorStringChars)) { 395 if (GetLastError() == ERROR_INSUFFICIENT_BUFFER) { 396 platformData.errorString = new TCHAR[errorStringChars]; 397 InternetGetLastResponseInfo(&platformData.error, platformData.errorString, &errorStringChars); 398 } 399 } 400 #ifdef RESOURCE_LOADER_DEBUG 401 char buf[64]; 402 _snprintf(buf, sizeof(buf), "Load error: %i\n", error); 403 OutputDebugStringA(buf); 404 #endif 405 } 406 407 if (d->m_secondaryHandle) 408 InternetCloseHandle(d->m_secondaryHandle); 409 InternetCloseHandle(d->m_resourceHandle); 384 if (!ok && GetLastError() == ERROR_IO_PENDING) 385 return; 410 386 411 387 client()->didFinishLoading(this, 0); 412 delete this; 388 InternetCloseHandle(d->m_requestHandle); 389 InternetCloseHandle(d->m_connectHandle); 390 deref(); // balances ref in start 391 return; 413 392 } 414 393 … … 468 447 bool ResourceHandle::start(NetworkingContext* context) 469 448 { 470 ref();471 449 if (request().url().isLocalFile()) { 450 ref(); // balanced by deref in fileLoadTimer 472 451 d->m_fileLoadTimer.startOneShot(0.0); 473 452 return true; 474 } else { 475 static HINTERNET internetHandle = 0; 476 if (!internetHandle) { 477 String userAgentStr = context->userAgent() + String("", 1); 478 LPCWSTR userAgent = reinterpret_cast<const WCHAR*>(userAgentStr.characters()); 479 // leak the Internet for now 480 internetHandle = InternetOpen(userAgent, INTERNET_OPEN_TYPE_PRECONFIG, 0, 0, INTERNET_FLAG_ASYNC); 481 } 482 if (!internetHandle) { 483 delete this; 484 return false; 485 } 486 static INTERNET_STATUS_CALLBACK callbackHandle = 487 InternetSetStatusCallback(internetHandle, transferJobStatusCallback); 488 489 initializeOffScreenResourceHandleWindow(); 490 d->m_jobId = addToOutstandingJobs(this); 491 492 DWORD flags = 493 INTERNET_FLAG_KEEP_CONNECTION | 494 INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTPS | 495 INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTP; 496 497 // For form posting, we can't use InternetOpenURL. We have to use 498 // InternetConnect followed by HttpSendRequest. 499 HINTERNET urlHandle; 500 String referrer = context->referrer(); 501 if (request().httpMethod() == "POST") { 502 d->m_postReferrer = referrer; 503 String host = request().url().host(); 504 urlHandle = InternetConnectA(internetHandle, host.latin1().data(), 505 request().url().port(), 506 NULL, // no username 507 NULL, // no password 508 INTERNET_SERVICE_HTTP, 509 flags, (DWORD_PTR)d->m_jobId); 510 } else { 511 String urlStr = request().url().string(); 512 int fragmentIndex = urlStr.find('#'); 513 if (fragmentIndex != -1) 514 urlStr = urlStr.left(fragmentIndex); 515 String headers; 516 if (!referrer.isEmpty()) 517 headers += String("Referer: ") + referrer + "\r\n"; 518 519 urlHandle = InternetOpenUrlA(internetHandle, urlStr.latin1().data(), 520 headers.latin1().data(), headers.length(), 521 flags, (DWORD_PTR)d->m_jobId); 522 } 523 524 if (urlHandle == INVALID_HANDLE_VALUE) { 525 delete this; 526 return false; 527 } 528 d->m_threadId = GetCurrentThreadId(); 529 530 return true; 531 } 453 } 454 455 if (!d->m_internetHandle) 456 d->m_internetHandle = asynchronousInternetHandle(context->userAgent()); 457 458 if (!d->m_internetHandle) 459 return false; 460 461 DWORD flags = INTERNET_FLAG_KEEP_CONNECTION 462 | INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTPS 463 | INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTP; 464 465 d->m_connectHandle = InternetConnectW(d->m_internetHandle, firstRequest().url().host().charactersWithNullTermination(), firstRequest().url().port(), 466 0, 0, INTERNET_SERVICE_HTTP, flags, reinterpret_cast<DWORD_PTR>(this)); 467 468 if (!d->m_connectHandle) 469 return false; 470 471 String urlStr = firstRequest().url().path(); 472 String urlQuery = firstRequest().url().query(); 473 474 if (!urlQuery.isEmpty()) { 475 urlStr.append('?'); 476 urlStr.append(urlQuery); 477 } 478 479 String httpMethod = firstRequest().httpMethod(); 480 String httpReferrer = firstRequest().httpReferrer(); 481 482 LPCWSTR httpAccept[] = { L"*/*", 0 }; 483 484 d->m_requestHandle = HttpOpenRequestW(d->m_connectHandle, httpMethod.charactersWithNullTermination(), urlStr.charactersWithNullTermination(), 485 0, httpReferrer.charactersWithNullTermination(), httpAccept, flags, reinterpret_cast<DWORD_PTR>(this)); 486 487 if (!d->m_requestHandle) { 488 InternetCloseHandle(d->m_connectHandle); 489 return false; 490 } 491 492 INTERNET_BUFFERSW internetBuffers; 493 ZeroMemory(&internetBuffers, sizeof(internetBuffers)); 494 internetBuffers.dwStructSize = sizeof(internetBuffers); 495 496 HttpSendRequestExW(d->m_requestHandle, &internetBuffers, 0, 0, reinterpret_cast<DWORD_PTR>(this)); 497 498 ref(); // balanced by deref in onRequestComplete 499 500 return true; 532 501 } 533 502
Note: See TracChangeset
for help on using the changeset viewer.