Changeset 85783 in webkit
- Timestamp:
- May 4, 2011 1:33:52 PM (13 years ago)
- Location:
- trunk/Source/WebKit2
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit2/ChangeLog
r85780 r85783 1 2011-05-04 Anders Carlsson <andersca@apple.com> 2 3 Reviewed by Dan Bernstein. 4 5 Can't save a link from "Save Linked File to Download" popup menu 6 https://bugs.webkit.org/show_bug.cgi?id=60190 7 <rdar://problem/9367927> 8 9 Make sure that suggestedFilenameForResourceWithURL and resourceDataForFrame both look 10 in the cache if the resource can't be found in the current web page. This matches WebKit1. 11 12 * WebProcess/WebPage/WebFrame.cpp: 13 (WebKit::WebFrame::suggestedFilenameForResourceWithURL): 14 Call WebPage::cachedSuggestedFilenameForURL if we can't find a resource in the page. 15 16 * WebProcess/WebPage/WebPage.cpp: 17 (WebKit::resourceDataForFrame): 18 Move code out from getResourceDataFromFrame. 19 20 (WebKit::WebPage::getResourceDataFromFrame): 21 Call resourceDataForFrame first and then cachedResponseDataForURL. 22 23 * WebProcess/WebPage/WebPage.h: 24 * WebProcess/WebPage/gtk/WebPageGtk.cpp: 25 (WebKit::WebPage::platformHasLocalDataForURL): 26 (WebKit::WebPage::cachedResponseMIMETypeForURL): 27 (WebKit::WebPage::platformCanHandleRequest): 28 (WebKit::WebPage::cachedSuggestedFilenameForURL): 29 (WebKit::WebPage::cachedResponseDataForURL): 30 Add stubs. 31 32 * WebProcess/WebPage/mac/WebPageMac.mm: 33 (WebKit::cachedResponseForURL): 34 Add helper function. 35 36 (WebKit::WebPage::cachedSuggestedFilenameForURL): 37 (WebKit::WebPage::cachedResponseMIMETypeForURL): 38 (WebKit::WebPage::cachedResponseDataForURL): 39 Call helper function. 40 41 * WebProcess/WebPage/qt/WebPageQt.cpp: 42 (WebKit::WebPage::platformHasLocalDataForURL): 43 (WebKit::WebPage::cachedResponseMIMETypeForURL): 44 (WebKit::WebPage::platformCanHandleRequest): 45 (WebKit::WebPage::cachedSuggestedFilenameForURL): 46 (WebKit::WebPage::cachedResponseDataForURL): 47 Add stubs. 48 49 * WebProcess/WebPage/win/WebPageWin.cpp: 50 (WebKit::cachedResponseForURL): 51 Add helper function. 52 53 (WebKit::WebPage::platformHasLocalDataForURL): 54 (WebKit::WebPage::cachedResponseMIMETypeForURL): 55 (WebKit::WebPage::cachedSuggestedFilenameForURL): 56 (WebKit::WebPage::cachedResponseDataForURL): 57 Call helper function. 58 1 59 2011-05-04 Simon Fraser <simon.fraser@apple.com> 2 60 -
trunk/Source/WebKit2/WebProcess/WebPage/WebFrame.cpp
r85484 r85783 641 641 // Next, try subresources. 642 642 RefPtr<ArchiveResource> resource = loader->subresource(url); 643 if ( !resource)644 return String();645 646 return resource->response().suggestedFilename();643 if (resource) 644 return resource->response().suggestedFilename(); 645 646 return page()->cachedSuggestedFilenameForURL(url); 647 647 } 648 648 -
trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp
r85689 r85783 1387 1387 } 1388 1388 1389 void WebPage::getResourceDataFromFrame(uint64_t frameID, const String& resourceURL, uint64_t callbackID) 1389 static PassRefPtr<SharedBuffer> resourceDataForFrame(Frame* frame, const KURL& resourceURL) 1390 { 1391 DocumentLoader* loader = frame->loader()->documentLoader(); 1392 if (!loader) 1393 return 0; 1394 1395 RefPtr<ArchiveResource> subresource = loader->subresource(resourceURL); 1396 if (!subresource) 1397 return 0; 1398 1399 return subresource->data(); 1400 } 1401 1402 void WebPage::getResourceDataFromFrame(uint64_t frameID, const String& resourceURLString, uint64_t callbackID) 1390 1403 { 1391 1404 CoreIPC::DataReference dataReference; 1405 KURL resourceURL(KURL(), resourceURLString); 1392 1406 1393 1407 RefPtr<SharedBuffer> buffer; 1394 1408 if (WebFrame* frame = WebProcess::shared().webFrame(frameID)) { 1395 if (DocumentLoader* loader = frame->coreFrame()->loader()->documentLoader()) { 1396 if (RefPtr<ArchiveResource> subresource = loader->subresource(KURL(KURL(), resourceURL))) { 1397 if ((buffer = subresource->data())) 1398 dataReference = CoreIPC::DataReference(reinterpret_cast<const uint8_t*>(buffer->data()), buffer->size()); 1399 } 1409 buffer = resourceDataForFrame(frame->coreFrame(), resourceURL); 1410 if (!buffer) { 1411 // Try to get the resource data from the cache. 1412 buffer = cachedResponseDataForURL(resourceURL); 1400 1413 } 1414 1415 if (buffer) 1416 dataReference = CoreIPC::DataReference(reinterpret_cast<const uint8_t*>(buffer->data()), buffer->size()); 1401 1417 } 1402 1418 -
trunk/Source/WebKit2/WebProcess/WebPage/WebPage.h
r85356 r85783 292 292 bool hasLocalDataForURL(const WebCore::KURL&); 293 293 String cachedResponseMIMETypeForURL(const WebCore::KURL&); 294 294 String cachedSuggestedFilenameForURL(const WebCore::KURL&); 295 PassRefPtr<WebCore::SharedBuffer> cachedResponseDataForURL(const WebCore::KURL&); 296 295 297 static bool canHandleRequest(const WebCore::ResourceRequest&); 296 298 -
trunk/Source/WebKit2/WebProcess/WebPage/gtk/WebPageGtk.cpp
r82929 r85783 104 104 } 105 105 106 bool WebPage::platformHasLocalDataForURL(const WebCore::KURL&)106 bool WebPage::platformHasLocalDataForURL(const KURL&) 107 107 { 108 // FIXME: Implement109 108 notImplemented(); 110 109 return false; 111 110 } 112 111 113 String WebPage::cachedResponseMIMETypeForURL(const WebCore::KURL&)112 String WebPage::cachedResponseMIMETypeForURL(const KURL&) 114 113 { 115 // FIXME: Implement114 notImplemented(); 116 115 return String(); 117 116 } 118 117 119 bool WebPage::platformCanHandleRequest(const WebCore::ResourceRequest&)118 bool WebPage::platformCanHandleRequest(const ResourceRequest&) 120 119 { 121 // FIXME: Implement120 notImplemented(); 122 121 return true; 123 122 } 124 123 124 String WebPage::cachedSuggestedFilenameForURL(const KURL&) 125 { 126 notImplemented(); 127 return String(); 128 } 129 130 PassRefPtr<SharedBuffer> WebPage::cachedResponseDataForURL(const KURL&) 131 { 132 notImplemented(); 133 return 0; 134 } 135 125 136 } // namespace WebKit -
trunk/Source/WebKit2/WebProcess/WebPage/mac/WebPageMac.mm
r85366 r85783 634 634 } 635 635 636 String WebPage::cachedResponseMIMETypeForURL(const WebCore::KURL& url)637 { 638 NSMutableURLRequest* request = [[NSMutableURLRequest alloc] initWithURL:url];639 [request setValue:(NSString*)userAgent() forHTTPHeaderField:@"User-Agent"];640 NSCachedURLResponse *cachedResponse; 636 static NSCachedURLResponse *cachedResponseForURL(WebPage* webPage, const KURL& url) 637 { 638 RetainPtr<NSMutableURLRequest> request(AdoptNS, [[NSMutableURLRequest alloc] initWithURL:url]); 639 [request.get() setValue:(NSString *)webPage->userAgent() forHTTPHeaderField:@"User-Agent"]; 640 641 641 #if USE(CFURLSTORAGESESSIONS) 642 642 if (CFURLStorageSessionRef storageSession = ResourceHandle::privateBrowsingStorageSession()) 643 cachedResponse = WKCachedResponseForRequest(storageSession, request); 644 else 643 return WKCachedResponseForRequest(storageSession, request.get()); 645 644 #endif 646 cachedResponse = [[NSURLCache sharedURLCache] cachedResponseForRequest:request]; 647 [request release]; 648 649 return [[cachedResponse response] MIMEType]; 645 646 return [[NSURLCache sharedURLCache] cachedResponseForRequest:request.get()]; 647 } 648 649 String WebPage::cachedSuggestedFilenameForURL(const KURL& url) 650 { 651 return [[cachedResponseForURL(this, url) response] suggestedFilename]; 652 } 653 654 String WebPage::cachedResponseMIMETypeForURL(const KURL& url) 655 { 656 return [[cachedResponseForURL(this, url) response] MIMEType]; 657 } 658 659 PassRefPtr<SharedBuffer> WebPage::cachedResponseDataForURL(const KURL& url) 660 { 661 return SharedBuffer::wrapNSData([cachedResponseForURL(this, url) data]); 650 662 } 651 663 -
trunk/Source/WebKit2/WebProcess/WebPage/qt/WebPageQt.cpp
r81105 r85783 28 28 #include "WebPage.h" 29 29 30 #include "NotImplemented.h" 30 31 #include "WebEvent.h" 31 32 #include <WebCore/FocusController.h> … … 266 267 } 267 268 268 bool WebPage::platformHasLocalDataForURL(const WebCore::KURL&)269 { 270 // FIXME: Implement269 bool WebPage::platformHasLocalDataForURL(const KURL&) 270 { 271 notImplemented(); 271 272 return false; 272 273 } 273 274 274 String WebPage::cachedResponseMIMETypeForURL(const WebCore::KURL&)275 { 276 // FIXME: Implement275 String WebPage::cachedResponseMIMETypeForURL(const KURL&) 276 { 277 notImplemented(); 277 278 return String(); 278 279 } 279 280 280 bool WebPage::platformCanHandleRequest(const WebCore::ResourceRequest&)281 { 282 // FIXME: Implement281 bool WebPage::platformCanHandleRequest(const ResourceRequest&) 282 { 283 notImplemented(); 283 284 return true; 284 285 } 285 286 287 String WebPage::cachedSuggestedFilenameForURL(const KURL&) 288 { 289 notImplemented(); 290 return String(); 291 } 292 293 PassRefPtr<SharedBuffer> WebPage::cachedResponseDataForURL(const KURL&) 294 { 295 notImplemented(); 296 return 0; 297 } 298 286 299 } // namespace WebKit -
trunk/Source/WebKit2/WebProcess/WebPage/win/WebPageWin.cpp
r84101 r85783 261 261 } 262 262 263 bool WebPage::platformHasLocalDataForURL(const WebCore::KURL& url)264 { 265 #if USE(CFNETWORK) 263 #if USE(CFNETWORK) 264 static RetainPtr<CFCachedURLResponseRef> cachedResponseForURL(WebPage* webPage, const KURL& url) 265 { 266 266 RetainPtr<CFURLRef> cfURL(AdoptCF, url.createCFURL()); 267 267 RetainPtr<CFMutableURLRequestRef> request(AdoptCF, CFURLRequestCreateMutable(0, cfURL.get(), kCFURLRequestCachePolicyReloadIgnoringCache, 60, 0)); 268 269 RetainPtr<CFStringRef> userAgent(AdoptCF, userAgent().createCFString());268 269 RetainPtr<CFStringRef> userAgent(AdoptCF, webPage->userAgent().createCFString()); 270 270 CFURLRequestSetHTTPHeaderFieldValue(request.get(), CFSTR("User-Agent"), userAgent.get()); 271 271 … … 278 278 cache.adoptCF(CFURLCacheCopySharedURLCache()); 279 279 280 RetainPtr<CFCachedURLResponseRef> response(AdoptCF, CFURLCacheCopyResponseForRequest(cache.get(), request.get())); 281 return response; 280 RetainPtr<CFCachedURLResponseRef> response(AdoptCF, CFURLCacheCopyResponseForRequest(cache.get(), request.get())); 281 return response; 282 } 283 #endif 284 285 bool WebPage::platformHasLocalDataForURL(const KURL& url) 286 { 287 #if USE(CFNETWORK) 288 return cachedResponseForURL(this, url); 282 289 #else 283 290 return false; … … 285 292 } 286 293 287 String WebPage::cachedResponseMIMETypeForURL(const WebCore::KURL& url) 288 { 289 #if USE(CFNETWORK) 290 RetainPtr<CFURLRef> cfURL(AdoptCF, url.createCFURL()); 291 RetainPtr<CFMutableURLRequestRef> request(AdoptCF, CFURLRequestCreateMutable(0, cfURL.get(), kCFURLRequestCachePolicyReloadIgnoringCache, 60, 0)); 292 293 RetainPtr<CFStringRef> userAgent(AdoptCF, userAgent().createCFString()); 294 CFURLRequestSetHTTPHeaderFieldValue(request.get(), CFSTR("User-Agent"), userAgent.get()); 295 296 RetainPtr<CFURLCacheRef> cache; 297 #if USE(CFURLSTORAGESESSIONS) 298 if (CFURLStorageSessionRef storageSession = ResourceHandle::privateBrowsingStorageSession()) 299 cache.adoptCF(wkCopyURLCache(storageSession)); 300 else 301 #endif 302 cache.adoptCF(CFURLCacheCopySharedURLCache()); 303 304 RetainPtr<CFCachedURLResponseRef> cachedResponse(AdoptCF, CFURLCacheCopyResponseForRequest(cache.get(), request.get())); 305 294 String WebPage::cachedResponseMIMETypeForURL(const KURL& url) 295 { 296 #if USE(CFNETWORK) 297 RetainPtr<CFCachedURLResponseRef> cachedResponse = cachedResponseForURL(this, url); 306 298 CFURLResponseRef response = CFCachedURLResponseGetWrappedResponse(cachedResponse.get()); 307 308 299 return response ? CFURLResponseGetMIMEType(response) : String(); 309 300 #else 310 301 return String(); 311 302 #endif 303 } 304 305 String WebPage::cachedSuggestedFilenameForURL(const KURL& url) 306 { 307 #if USE(CFNETWORK) 308 RetainPtr<CFCachedURLResponseRef> cachedResponse = cachedResponseForURL(this, url); 309 CFURLResponseRef response = CFCachedURLResponseGetWrappedResponse(cachedResponse.get()); 310 if (!response) 311 return String(); 312 RetainPtr<CFStringRef> suggestedFilename(AdoptCF, CFURLResponseCopySuggestedFilename(response)); 313 314 return suggestedFilename.get(); 315 #else 316 return String(); 317 #endif 318 } 319 320 PassRefPtr<SharedBuffer> WebPage::cachedResponseDataForURL(const KURL& url) 321 { 322 RetainPtr<CFCachedURLResponseRef> cachedResponse = cachedResponseForURL(this, url); 323 CFDataRef data = CFCachedURLResponseGetReceiverData(cachedResponse.get()); 324 if (!data) 325 return 0; 326 327 return SharedBuffer::wrapCFData(data); 312 328 } 313 329
Note: See TracChangeset
for help on using the changeset viewer.