Title: [199669] trunk/Source
Revision
199669
Author
[email protected]
Date
2016-04-18 08:36:34 -0700 (Mon, 18 Apr 2016)

Log Message

Unreviewed, rolling out r199644.

Seems to have caused a 1-2% regression on warm PLT

Reverted changeset:

"[WK2][iOS] Do not dlopen() QuickLook in the NetworkProcess"
https://bugs.webkit.org/show_bug.cgi?id=156639
http://trac.webkit.org/changeset/199644

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (199668 => 199669)


--- trunk/Source/WebCore/ChangeLog	2016-04-18 15:33:30 UTC (rev 199668)
+++ trunk/Source/WebCore/ChangeLog	2016-04-18 15:36:34 UTC (rev 199669)
@@ -1,3 +1,15 @@
+2016-04-18  Chris Dumez  <[email protected]>
+
+        Unreviewed, rolling out r199644.
+
+        Seems to have caused a 1-2% regression on warm PLT
+
+        Reverted changeset:
+
+        "[WK2][iOS] Do not dlopen() QuickLook in the NetworkProcess"
+        https://bugs.webkit.org/show_bug.cgi?id=156639
+        http://trac.webkit.org/changeset/199644
+
 2016-04-17  Darin Adler  <[email protected]>
 
         Get rid of IDBAny

Modified: trunk/Source/WebCore/platform/network/cf/SynchronousResourceHandleCFURLConnectionDelegate.cpp (199668 => 199669)


--- trunk/Source/WebCore/platform/network/cf/SynchronousResourceHandleCFURLConnectionDelegate.cpp	2016-04-18 15:33:30 UTC (rev 199668)
+++ trunk/Source/WebCore/platform/network/cf/SynchronousResourceHandleCFURLConnectionDelegate.cpp	2016-04-18 15:36:34 UTC (rev 199669)
@@ -166,10 +166,9 @@
 #endif
 
 #if USE(QUICK_LOOK)
-    if (auto quickLookHandle = QuickLookHandle::createIfNecessary(*m_handle, this, cfResponse)) {
-        cfResponse = quickLookHandle->cfResponse();
-        m_handle->setQuickLookHandle(WTFMove(quickLookHandle));
-    }
+    m_handle->setQuickLookHandle(QuickLookHandle::create(m_handle, this, cfResponse));
+    if (m_handle->quickLookHandle())
+        cfResponse = m_handle->quickLookHandle()->cfResponse();
 #endif
     
     ResourceResponse resourceResponse(cfResponse);

Modified: trunk/Source/WebCore/platform/network/ios/QuickLook.h (199668 => 199669)


--- trunk/Source/WebCore/platform/network/ios/QuickLook.h	2016-04-18 15:33:30 UTC (rev 199668)
+++ trunk/Source/WebCore/platform/network/ios/QuickLook.h	2016-04-18 15:36:34 UTC (rev 199669)
@@ -78,13 +78,14 @@
 class QuickLookHandle {
     WTF_MAKE_NONCOPYABLE(QuickLookHandle);
 public:
-    static std::unique_ptr<QuickLookHandle> createIfNecessary(ResourceHandle&, NSURLConnection *, NSURLResponse *, id delegate);
+    WEBCORE_EXPORT static bool shouldCreateForMIMEType(const String&);
+
+    static std::unique_ptr<QuickLookHandle> create(ResourceHandle*, NSURLConnection *, NSURLResponse *, id delegate);
 #if USE(CFNETWORK)
-    static std::unique_ptr<QuickLookHandle> createIfNecessary(ResourceHandle&, SynchronousResourceHandleCFURLConnectionDelegate*, CFURLResponseRef);
+    static std::unique_ptr<QuickLookHandle> create(ResourceHandle*, SynchronousResourceHandleCFURLConnectionDelegate*, CFURLResponseRef);
 #endif
-
     // FIXME: Use of ResourceLoader here is a platform violation.
-    WEBCORE_EXPORT static std::unique_ptr<QuickLookHandle> createIfNecessary(ResourceLoader&, NSURLResponse *);
+    WEBCORE_EXPORT static std::unique_ptr<QuickLookHandle> create(ResourceLoader&, const ResourceResponse&);
 
     WEBCORE_EXPORT ~QuickLookHandle();
 
@@ -107,7 +108,6 @@
     QLPreviewConverter *converter() const { return m_converter.get(); }
 
 private:
-    static std::unique_ptr<QuickLookHandle> create(ResourceHandle&, NSURLConnection *, NSURLResponse *, id delegate);
     QuickLookHandle(NSURL *, NSURLConnection *, NSURLResponse *, id delegate);
 
     RetainPtr<NSURL> m_firstRequestURL;

Modified: trunk/Source/WebCore/platform/network/ios/QuickLook.mm (199668 => 199669)


--- trunk/Source/WebCore/platform/network/ios/QuickLook.mm	2016-04-18 15:33:30 UTC (rev 199668)
+++ trunk/Source/WebCore/platform/network/ios/QuickLook.mm	2016-04-18 15:36:34 UTC (rev 199669)
@@ -36,14 +36,10 @@
 #import "ResourceHandle.h"
 #import "ResourceLoader.h"
 #import "RuntimeApplicationChecks.h"
-#import "SubresourceLoader.h"
 #import "SynchronousResourceHandleCFURLConnectionDelegate.h"
-#import "UTIUtilities.h"
 #import "WebCoreResourceHandleAsDelegate.h"
-#import "WebCoreSystemInterface.h"
 #import "WebCoreURLResponseIOS.h"
 #import <Foundation/Foundation.h>
-#import <MobileCoreServices/MobileCoreServices.h>
 #import <wtf/NeverDestroyed.h>
 #import <wtf/StdLibExtras.h>
 #import <wtf/Threading.h>
@@ -52,14 +48,6 @@
 
 #import "QuickLookSoftLink.h"
 
-SOFT_LINK_FRAMEWORK(MobileCoreServices)
-
-SOFT_LINK(MobileCoreServices, UTTypeCreatePreferredIdentifierForTag, CFStringRef, (CFStringRef inTagClass, CFStringRef inTag, CFStringRef inConformingToUTI), (inTagClass, inTag, inConformingToUTI))
-
-SOFT_LINK_CONSTANT(MobileCoreServices, kUTTagClassFilenameExtension, CFStringRef)
-
-#define kUTTagClassFilenameExtension getkUTTagClassFilenameExtension()
-
 using namespace WebCore;
 
 NSSet *WebCore::QLPreviewGetSupportedMIMETypesSet()
@@ -108,43 +96,6 @@
     return contentDictionary;
 }
 
-// We must ensure that the MIME type is correct, so that QuickLook's web plugin is called when needed.
-// We filter the basic MIME types so that we don't do unnecessary work in standard browsing situations.
-static RetainPtr<CFStringRef> adjustMIMETypeForQuickLook(CFURLResponseRef cfResponse)
-{
-    RetainPtr<CFStringRef> mimeType = CFURLResponseGetMIMEType(cfResponse);
-    if (!shouldUseQuickLookForMIMEType(mimeType.get()))
-        return mimeType;
-
-    RetainPtr<CFStringRef> suggestedFilename = adoptCF(CFURLResponseCopySuggestedFilename(cfResponse));
-    RetainPtr<CFStringRef> quickLookMIMEType = adoptCF((CFStringRef)QLTypeCopyBestMimeTypeForFileNameAndMimeType((NSString *)suggestedFilename.get(), (NSString *)mimeType.get()));
-    if (!quickLookMIMEType) {
-        auto url = ""
-        if (![(NSURL *)url isFileURL])
-            return mimeType;
-        RetainPtr<CFStringRef> extension = adoptCF(CFURLCopyPathExtension(url));
-        if (!extension)
-            return mimeType;
-        RetainPtr<CFStringRef> uti = adoptCF(UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, extension.get(), nullptr));
-        quickLookMIMEType = mimeTypeFromUTITree(uti.get());
-        if (!quickLookMIMEType)
-            return mimeType;
-    }
-
-    if (!mimeType || CFStringCompare(mimeType.get(), quickLookMIMEType.get(), kCFCompareCaseInsensitive) != kCFCompareEqualTo) {
-        CFURLResponseSetMIMEType(cfResponse, quickLookMIMEType.get());
-        return quickLookMIMEType;
-    }
-
-    return mimeType;
-}
-
-static bool shouldCreateForResponse(CFURLResponseRef cfResponse)
-{
-    RetainPtr<CFStringRef> mimeType = adjustMIMETypeForQuickLook(cfResponse);
-    return [QLPreviewGetSupportedMIMETypesSet() containsObject:(NSString *)mimeType.get()];
-}
-
 void WebCore::addQLPreviewConverterWithFileForURL(NSURL *url, id converter, NSString *fileName)
 {
     ASSERT(url);
@@ -445,35 +396,29 @@
     LOG(Network, "QuickLookHandle::QuickLookHandle() - previewFileName: %s", [m_converter previewFileName]);
 }
 
-static bool shouldCreate(ResourceHandle& handle, CFURLResponseRef response)
+std::unique_ptr<QuickLookHandle> QuickLookHandle::create(ResourceHandle* handle, NSURLConnection *connection, NSURLResponse *nsResponse, id delegate)
 {
-    return handle.firstRequest().requester() == ResourceRequest::Requester::Main && shouldCreateForResponse(response);
-}
+    ASSERT_ARG(handle, handle);
+    if (handle->firstRequest().requester() != ResourceRequest::Requester::Main || ![QLPreviewGetSupportedMIMETypesSet() containsObject:[nsResponse MIMEType]])
+        return nullptr;
 
-std::unique_ptr<QuickLookHandle> QuickLookHandle::create(ResourceHandle& handle, NSURLConnection *connection, NSURLResponse *response, id delegate)
-{
-    std::unique_ptr<QuickLookHandle> quickLookHandle(new QuickLookHandle([handle.firstRequest().nsURLRequest(DoNotUpdateHTTPBody) URL], connection, response, delegate));
-    handle.client()->didCreateQuickLookHandle(*quickLookHandle);
+    std::unique_ptr<QuickLookHandle> quickLookHandle(new QuickLookHandle([handle->firstRequest().nsURLRequest(DoNotUpdateHTTPBody) URL], connection, nsResponse, delegate));
+    handle->client()->didCreateQuickLookHandle(*quickLookHandle);
     return quickLookHandle;
 }
 
-std::unique_ptr<QuickLookHandle> QuickLookHandle::createIfNecessary(ResourceHandle& handle, NSURLConnection *connection, NSURLResponse *response, id delegate)
-{
-    if (!shouldCreate(handle, response._CFURLResponse))
-        return nullptr;
-
-    return create(handle, connection, response, delegate);
-}
-
 #if USE(CFNETWORK)
-std::unique_ptr<QuickLookHandle> QuickLookHandle::createIfNecessary(ResourceHandle& handle, SynchronousResourceHandleCFURLConnectionDelegate* connectionDelegate, CFURLResponseRef cfResponse)
+std::unique_ptr<QuickLookHandle> QuickLookHandle::create(ResourceHandle* handle, SynchronousResourceHandleCFURLConnectionDelegate* connectionDelegate, CFURLResponseRef cfResponse)
 {
-    if (!shouldCreate(handle, cfResponse))
+    ASSERT_ARG(handle, handle);
+    if (handle->firstRequest().requester() != ResourceRequest::Requester::Main || ![QLPreviewGetSupportedMIMETypesSet() containsObject:(NSString *)CFURLResponseGetMIMEType(cfResponse)])
         return nullptr;
 
-    NSURLResponse *response = [NSURLResponse _responseWithCFURLResponse:cfResponse];
+    NSURLResponse *nsResponse = [NSURLResponse _responseWithCFURLResponse:cfResponse];
     WebQuickLookHandleAsDelegate *delegate = [[[WebQuickLookHandleAsDelegate alloc] initWithConnectionDelegate:connectionDelegate] autorelease];
-    return create(handle, nil, response, delegate);
+    std::unique_ptr<QuickLookHandle> quickLookHandle(new QuickLookHandle([handle->firstRequest().nsURLRequest(DoNotUpdateHTTPBody) URL], nil, nsResponse, delegate));
+    handle->client()->didCreateQuickLookHandle(*quickLookHandle);
+    return quickLookHandle;
 }
 
 CFURLResponseRef QuickLookHandle::cfResponse()
@@ -482,17 +427,17 @@
 }
 #endif
 
-std::unique_ptr<QuickLookHandle> QuickLookHandle::createIfNecessary(ResourceLoader& loader, NSURLResponse *response)
+bool QuickLookHandle::shouldCreateForMIMEType(const String& mimeType)
 {
-    bool isMainResourceLoad = loader.documentLoader()->mainResourceLoader() == &loader;
-    if (!isMainResourceLoad)
-        return nullptr;
+    return [QLPreviewGetSupportedMIMETypesSet() containsObject:mimeType];
+}
 
-    if (!shouldCreateForResponse(response._CFURLResponse))
-        return nullptr;
+std::unique_ptr<QuickLookHandle> QuickLookHandle::create(ResourceLoader& loader, const ResourceResponse& response)
+{
+    ASSERT(shouldCreateForMIMEType(response.mimeType()));
 
     RetainPtr<WebResourceLoaderQuickLookDelegate> delegate = adoptNS([[WebResourceLoaderQuickLookDelegate alloc] initWithResourceLoader:&loader]);
-    std::unique_ptr<QuickLookHandle> quickLookHandle(new QuickLookHandle([loader.originalRequest().nsURLRequest(DoNotUpdateHTTPBody) URL], nil, response, delegate.get()));
+    std::unique_ptr<QuickLookHandle> quickLookHandle(new QuickLookHandle([loader.originalRequest().nsURLRequest(DoNotUpdateHTTPBody) URL], nil, response.nsURLResponse(), delegate.get()));
     [delegate setQuickLookHandle:quickLookHandle.get()];
     loader.didCreateQuickLookHandle(*quickLookHandle);
     return quickLookHandle;

Modified: trunk/Source/WebCore/platform/network/ios/WebCoreURLResponseIOS.mm (199668 => 199669)


--- trunk/Source/WebCore/platform/network/ios/WebCoreURLResponseIOS.mm	2016-04-18 15:33:30 UTC (rev 199668)
+++ trunk/Source/WebCore/platform/network/ios/WebCoreURLResponseIOS.mm	2016-04-18 15:36:34 UTC (rev 199669)
@@ -28,7 +28,22 @@
 
 #import "config.h"
 #import "WebCoreURLResponseIOS.h"
+#import "UTIUtilities.h"
+#import "WebCoreSystemInterface.h"
 
+#import "QuickLook.h"
+#import "QuickLookSoftLink.h"
+#import "SoftLinking.h"
+#import <MobileCoreServices/MobileCoreServices.h>
+
+SOFT_LINK_FRAMEWORK(MobileCoreServices)
+
+SOFT_LINK(MobileCoreServices, UTTypeCreatePreferredIdentifierForTag, CFStringRef, (CFStringRef inTagClass, CFStringRef inTag, CFStringRef inConformingToUTI), (inTagClass, inTag, inConformingToUTI))
+
+SOFT_LINK_CONSTANT(MobileCoreServices, kUTTagClassFilenameExtension, CFStringRef)
+
+#define kUTTagClassFilenameExtension getkUTTagClassFilenameExtension()
+
 namespace WebCore {
 
 void adjustMIMETypeIfNecessary(CFURLResponseRef cfResponse)
@@ -38,6 +53,27 @@
     if (!updatedMIMEType)
         updatedMIMEType = defaultMIMEType().createCFString();
 
+#if USE(QUICK_LOOK)
+    // We must ensure that the MIME type is correct, so that QuickLook's web plugin is called when needed.
+    // We filter the basic MIME types so that we don't do unnecessary work in standard browsing situations.
+    if (shouldUseQuickLookForMIMEType((NSString *)updatedMIMEType.get())) {
+        RetainPtr<CFStringRef> suggestedFilename = adoptCF(CFURLResponseCopySuggestedFilename(cfResponse));
+        RetainPtr<CFStringRef> quickLookMIMEType = adoptCF((CFStringRef)QLTypeCopyBestMimeTypeForFileNameAndMimeType((NSString *)suggestedFilename.get(), (NSString *)mimeType.get()));
+        if (!quickLookMIMEType) {
+            auto url = ""
+            if ([(NSURL *)url isFileURL]) {
+                RetainPtr<CFStringRef> extension = adoptCF(CFURLCopyPathExtension(url));
+                if (extension) {
+                    RetainPtr<CFStringRef> uti = adoptCF(UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, extension.get(), nullptr));
+                    quickLookMIMEType = mimeTypeFromUTITree(uti.get());
+                }
+            }
+        }
+
+        if (quickLookMIMEType)
+            updatedMIMEType = quickLookMIMEType;
+    }
+#endif // USE(QUICK_LOOK)
     if (!mimeType || CFStringCompare(mimeType.get(), updatedMIMEType.get(), kCFCompareCaseInsensitive) != kCFCompareEqualTo)
         CFURLResponseSetMIMEType(cfResponse, updatedMIMEType.get());
 }

Modified: trunk/Source/WebCore/platform/network/mac/WebCoreResourceHandleAsDelegate.mm (199668 => 199669)


--- trunk/Source/WebCore/platform/network/mac/WebCoreResourceHandleAsDelegate.mm	2016-04-18 15:33:30 UTC (rev 199668)
+++ trunk/Source/WebCore/platform/network/mac/WebCoreResourceHandleAsDelegate.mm	2016-04-18 15:36:34 UTC (rev 199669)
@@ -162,10 +162,9 @@
 #endif
 
 #if USE(QUICK_LOOK)
-    if (auto quickLookHandle = QuickLookHandle::createIfNecessary(*m_handle, connection, r, self)) {
-        r = quickLookHandle->nsResponse();
-        m_handle->setQuickLookHandle(WTFMove(quickLookHandle));
-    }
+    m_handle->setQuickLookHandle(QuickLookHandle::create(m_handle, connection, r, self));
+    if (m_handle->quickLookHandle())
+        r = m_handle->quickLookHandle()->nsResponse();
 #endif
     
     ResourceResponse resourceResponse(r);

Modified: trunk/Source/WebKit2/ChangeLog (199668 => 199669)


--- trunk/Source/WebKit2/ChangeLog	2016-04-18 15:33:30 UTC (rev 199668)
+++ trunk/Source/WebKit2/ChangeLog	2016-04-18 15:36:34 UTC (rev 199669)
@@ -1,3 +1,15 @@
+2016-04-18  Chris Dumez  <[email protected]>
+
+        Unreviewed, rolling out r199644.
+
+        Seems to have caused a 1-2% regression on warm PLT
+
+        Reverted changeset:
+
+        "[WK2][iOS] Do not dlopen() QuickLook in the NetworkProcess"
+        https://bugs.webkit.org/show_bug.cgi?id=156639
+        http://trac.webkit.org/changeset/199644
+
 2016-04-18  Carlos Garcia Campos  <[email protected]>
 
         Pending API Request URL is wrong after reloading

Modified: trunk/Source/WebKit2/WebProcess/Network/WebResourceLoader.cpp (199668 => 199669)


--- trunk/Source/WebKit2/WebProcess/Network/WebResourceLoader.cpp	2016-04-18 15:33:30 UTC (rev 199668)
+++ trunk/Source/WebKit2/WebProcess/Network/WebResourceLoader.cpp	2016-04-18 15:36:34 UTC (rev 199669)
@@ -114,12 +114,12 @@
     // Refrain from calling didReceiveResponse if QuickLook will convert this response, since the MIME type of the
     // converted resource isn't yet known. WebResourceLoaderQuickLookDelegate will later call didReceiveResponse upon
     // receiving the converted data.
-    if (auto quickLookHandle = QuickLookHandle::createIfNecessary(*m_coreLoader, response.nsURLResponse())) {
-        m_coreLoader->documentLoader()->setQuickLookHandle(WTFMove(quickLookHandle));
+    bool isMainLoad = m_coreLoader->documentLoader()->mainResourceLoader() == m_coreLoader;
+    if (isMainLoad && QuickLookHandle::shouldCreateForMIMEType(response.mimeType())) {
+        m_coreLoader->documentLoader()->setQuickLookHandle(QuickLookHandle::create(*m_coreLoader, response));
         shoudCallCoreLoaderDidReceiveResponse = false;
     }
 #endif
-
     if (shoudCallCoreLoaderDidReceiveResponse)
         m_coreLoader->didReceiveResponse(response);
 
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to