Changeset 174889 in webkit


Ignore:
Timestamp:
Oct 20, 2014 10:17:32 AM (10 years ago)
Author:
Antti Koivisto
Message:

Avoid unnecessary NSURLResponse construction for QuickLook on iOS
https://bugs.webkit.org/show_bug.cgi?id=137876

Reviewed by Andy Estes.

Source/WebCore:

QuickLook specific code path creates NSURLResponse in the web process for every response.
It is rarely needed so this is unnecessary work.

  • WebCore.exp.in:
  • platform/network/ios/QuickLook.h:
  • platform/network/ios/QuickLook.mm:

(WebCore::isMainResourceLoader):
(WebCore::QuickLookHandle::shouldCreateForMIMEType):

Separate function for testing if QuickLookHandle is needed.

(WebCore::QuickLookHandle::create):

Switch the interface to take ResourceResponse.

Source/WebKit2:

  • WebProcess/Network/WebResourceLoader.cpp:

(WebKit::WebResourceLoader::didReceiveResponse):

Switch to the modified QuickLookHandle interface that does not need NSURLResponse.

Location:
trunk/Source
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r174888 r174889  
     12014-10-19  Antti Koivisto  <antti@apple.com>
     2
     3        Avoid unnecessary NSURLResponse construction for QuickLook on iOS
     4        https://bugs.webkit.org/show_bug.cgi?id=137876
     5
     6        Reviewed by Andy Estes.
     7
     8        QuickLook specific code path creates NSURLResponse in the web process for every response.
     9        It is rarely needed so this is unnecessary work.
     10
     11        * WebCore.exp.in:
     12        * platform/network/ios/QuickLook.h:
     13        * platform/network/ios/QuickLook.mm:
     14        (WebCore::isMainResourceLoader):
     15        (WebCore::QuickLookHandle::shouldCreateForMIMEType):
     16
     17            Separate function for testing if QuickLookHandle is needed.
     18
     19        (WebCore::QuickLookHandle::create):
     20
     21            Switch the interface to take ResourceResponse.
     22
    1232014-10-20  Andy Estes  <aestes@apple.com>
    224
  • trunk/Source/WebCore/WebCore.exp.in

    r174791 r174889  
    33353335__ZN7WebCore15QuickLookHandle14didReceiveDataEPK8__CFData
    33363336__ZN7WebCore15QuickLookHandle16didFinishLoadingEv
    3337 __ZN7WebCore15QuickLookHandle6createEPNS_14ResourceLoaderEP13NSURLResponse
     3337__ZN7WebCore15QuickLookHandle23shouldCreateForMIMETypeERKN3WTF6StringE
     3338__ZN7WebCore15QuickLookHandle6createERNS_14ResourceLoaderERKNS_16ResourceResponseE
    33383339__ZN7WebCore15QuickLookHandle7didFailEv
    33393340__ZN7WebCore15QuickLookHandleD1Ev
  • trunk/Source/WebCore/platform/network/ios/QuickLook.h

    r172862 r174889  
    5555class ResourceHandle;
    5656class ResourceLoader;
     57class ResourceResponse;
    5758class SynchronousResourceHandleCFURLConnectionDelegate;
    5859
     
    8384    WTF_MAKE_NONCOPYABLE(QuickLookHandle);
    8485public:
     86    WEBCORE_EXPORT static bool shouldCreateForMIMEType(const String&);
     87
    8588    static std::unique_ptr<QuickLookHandle> create(ResourceHandle*, NSURLConnection *, NSURLResponse *, id delegate);
    8689#if USE(CFNETWORK)
    8790    static std::unique_ptr<QuickLookHandle> create(ResourceHandle*, SynchronousResourceHandleCFURLConnectionDelegate*, CFURLResponseRef);
    8891#endif
    89     WEBCORE_EXPORT static std::unique_ptr<QuickLookHandle> create(ResourceLoader*, NSURLResponse *);
     92    // FIXME: Use of ResourceLoader here is a platform violation.
     93    WEBCORE_EXPORT static std::unique_ptr<QuickLookHandle> create(ResourceLoader&, const ResourceResponse&);
     94
    9095    WEBCORE_EXPORT ~QuickLookHandle();
    9196
  • trunk/Source/WebCore/platform/network/ios/QuickLook.mm

    r173710 r174889  
    489489#endif
    490490
    491 static inline bool isMainResourceLoader(ResourceLoader* loader)
    492 {
    493     return loader->documentLoader()->mainResourceLoader() == loader;
    494 }
    495 
    496 std::unique_ptr<QuickLookHandle> QuickLookHandle::create(ResourceLoader* loader, NSURLResponse *response)
    497 {
    498     ASSERT_ARG(loader, loader);
    499     if (!isMainResourceLoader(loader) || ![WebCore::QLPreviewGetSupportedMIMETypesSet() containsObject:[response MIMEType]])
    500         return nullptr;
    501 
    502     RetainPtr<WebResourceLoaderQuickLookDelegate> delegate = adoptNS([[WebResourceLoaderQuickLookDelegate alloc] initWithResourceLoader:loader]);
    503     std::unique_ptr<QuickLookHandle> quickLookHandle(new QuickLookHandle([loader->originalRequest().nsURLRequest(DoNotUpdateHTTPBody) URL], nil, response, delegate.get()));
     491bool QuickLookHandle::shouldCreateForMIMEType(const String& mimeType)
     492{
     493    return [WebCore::QLPreviewGetSupportedMIMETypesSet() containsObject:mimeType];
     494}
     495
     496std::unique_ptr<QuickLookHandle> QuickLookHandle::create(ResourceLoader& loader, const ResourceResponse& response)
     497{
     498    ASSERT(shouldCreateForMIMEType(response.mimeType()));
     499
     500    RetainPtr<WebResourceLoaderQuickLookDelegate> delegate = adoptNS([[WebResourceLoaderQuickLookDelegate alloc] initWithResourceLoader:&loader]);
     501    std::unique_ptr<QuickLookHandle> quickLookHandle(new QuickLookHandle([loader.originalRequest().nsURLRequest(DoNotUpdateHTTPBody) URL], nil, response.nsURLResponse(), delegate.get()));
    504502    [delegate setQuickLookHandle:quickLookHandle.get()];
    505     loader->didCreateQuickLookHandle(*quickLookHandle);
     503    loader.didCreateQuickLookHandle(*quickLookHandle);
    506504    return WTF::move(quickLookHandle);
    507505}
  • trunk/Source/WebKit2/ChangeLog

    r174885 r174889  
     12014-10-19  Antti Koivisto  <antti@apple.com>
     2
     3        Avoid unnecessary NSURLResponse construction for QuickLook on iOS
     4        https://bugs.webkit.org/show_bug.cgi?id=137876
     5
     6        Reviewed by Andy Estes.
     7
     8        * WebProcess/Network/WebResourceLoader.cpp:
     9        (WebKit::WebResourceLoader::didReceiveResponse):
     10
     11            Switch to the modified QuickLookHandle interface that does not need NSURLResponse.
     12
    1132014-10-16  Andy Estes  <aestes@apple.com>
    214
  • trunk/Source/WebKit2/WebProcess/Network/WebResourceLoader.cpp

    r173516 r174889  
    113113        return;
    114114
     115    bool shoudCallCoreLoaderDidReceiveResponse = true;
    115116#if USE(QUICK_LOOK)
    116117    // Refrain from calling didReceiveResponse if QuickLook will convert this response, since the MIME type of the
    117118    // converted resource isn't yet known. WebResourceLoaderQuickLookDelegate will later call didReceiveResponse upon
    118119    // receiving the converted data.
    119     m_coreLoader->documentLoader()->setQuickLookHandle(QuickLookHandle::create(resourceLoader(), response.nsURLResponse()));
    120     if (!m_coreLoader->documentLoader()->quickLookHandle())
    121 #endif
     120    bool isMainLoad = m_coreLoader->documentLoader()->mainResourceLoader() == m_coreLoader;
     121    if (isMainLoad && QuickLookHandle::shouldCreateForMIMEType(response.mimeType())) {
     122        m_coreLoader->documentLoader()->setQuickLookHandle(QuickLookHandle::create(*m_coreLoader, response));
     123        shoudCallCoreLoaderDidReceiveResponse = false;
     124    }
     125#endif
     126    if (shoudCallCoreLoaderDidReceiveResponse)
    122127        m_coreLoader->didReceiveResponse(response);
    123128
Note: See TracChangeset for help on using the changeset viewer.