Modified: trunk/Source/WebCore/ChangeLog (210788 => 210789)
--- trunk/Source/WebCore/ChangeLog 2017-01-16 21:11:53 UTC (rev 210788)
+++ trunk/Source/WebCore/ChangeLog 2017-01-16 22:14:27 UTC (rev 210789)
@@ -1,3 +1,44 @@
+2017-01-16 Andy Estes <aes...@apple.com>
+
+ [QuickLook] Do some cleanup in QuickLookHandle
+ https://bugs.webkit.org/show_bug.cgi?id=166864
+
+ Reviewed by Darin Adler.
+
+ * loader/ios/QuickLook.h: Stopped including QuickLookHandleClient.h and forward-declared
+ instead; changed setClient() to take a Ref<QuickLookHandleClient>&&; renamed nsResponse() to
+ previewResponse(); changed QuickLookHandle() to take a ResourceLoader& and const
+ ResourceResponse&; gave m_delegate a stronger type; removed unused m_quicklookFileHandle;
+ initialized m_finishedLoadingDataIntoConverter to false.
+ (WebCore::QuickLookHandle::firstRequestURL): Stopped exporting.
+ (WebCore::QuickLookHandle::setClient): Moved definition out-of-line.
+ * loader/ios/QuickLook.mm: Renamed WebResourceLoaderQuickLookDelegate to
+ WebPreviewConverterDelegate and stopped conforming to NSURLConnectionDelegate and
+ WebCoreResourceLoaderDelegate; removed @property quickLookHandle and initialized
+ _quickLookHandle in the initializer instead.
+ (-[WebPreviewConverter initWithResourceLoader:quickLookHandle:]): Changed to take references
+ to resourceLoader and quickLookHandle.
+ (-[WebPreviewConverter _sendDidReceiveResponseIfNecessary]): Stoped checking for a nil
+ _quickLookHandle, since it is never nil.
+ (-[WebResourceLoaderQuickLookDelegate connection:didReceiveDataArray:]): Deleted.
+ QLPreviewConverter never calls this method.
+ (-[WebPreviewConverter connection:didReceiveData:lengthReceived:]): Stopped checking for a
+ nil _resourceLoader, since it is never nil.
+ (-[WebPreviewConverter connectionDidFinishLoading:]): Ditto.
+ (-[WebPreviewConverter connection:didFailWithError:]): Ditto.
+ (WebCore::emptyClient): Changed to return a reference.
+ (WebCore::QuickLookHandle::QuickLookHandle): Moved creation of the delegate,
+ firstRequestURL, and response to here from QuickLookHandle::create(). Called
+ ResourceLoader::didCreateQuickLookHandle() here instead of in QuickLookHandle::create().
+ (WebCore::QuickLookHandle::create): Used std::make_unique to create the QuickLookHandle.
+ (WebCore::QuickLookHandle::didFinishLoading): Set m_finishedLoadingDataIntoConverter to true
+ instead of YES.
+ (WebCore::QuickLookHandle::setClient): Moved the client rvalue reference into m_client.
+ (WebCore::QuickLookHandle::~QuickLookHandle): Stopped clearing m_converter and calling
+ -detachHandle.
+ (WebCore::QuickLookHandle::previewRequestURL): Used dot syntax.
+ (WebCore::QuickLookHandle::previewResponse): Renamed from nsResponse().
+
2017-01-16 Simon Fraser <simon.fra...@apple.com>
Remove CSSPropertyNames.in from the project. It's not used any more,
Modified: trunk/Source/WebCore/loader/ios/QuickLook.h (210788 => 210789)
--- trunk/Source/WebCore/loader/ios/QuickLook.h 2017-01-16 21:11:53 UTC (rev 210788)
+++ trunk/Source/WebCore/loader/ios/QuickLook.h 2017-01-16 22:14:27 UTC (rev 210789)
@@ -27,16 +27,14 @@
#if USE(QUICK_LOOK)
-#include "QuickLookHandleClient.h"
#include <objc/objc.h>
#include <wtf/Forward.h>
-#include <wtf/RefPtr.h>
+#include <wtf/Ref.h>
#include <wtf/RetainPtr.h>
OBJC_CLASS NSArray;
OBJC_CLASS NSData;
OBJC_CLASS NSDictionary;
-OBJC_CLASS NSFileHandle;
OBJC_CLASS NSSet;
OBJC_CLASS NSString;
OBJC_CLASS NSURL;
@@ -43,9 +41,11 @@
OBJC_CLASS NSURLRequest;
OBJC_CLASS NSURLResponse;
OBJC_CLASS QLPreviewConverter;
+OBJC_CLASS WebPreviewConverterDelegate;
namespace WebCore {
+class QuickLookHandleClient;
class ResourceLoader;
class ResourceResponse;
class SharedBuffer;
@@ -82,28 +82,27 @@
bool didFinishLoading();
void didFail();
- WEBCORE_EXPORT NSURLResponse *nsResponse();
+ WEBCORE_EXPORT void setClient(Ref<QuickLookHandleClient>&&);
- void setClient(PassRefPtr<QuickLookHandleClient> client) { m_client = client; }
-
WEBCORE_EXPORT String previewFileName() const;
WEBCORE_EXPORT String previewUTI() const;
+ WEBCORE_EXPORT NSURL *previewRequestURL() const;
+ NSURLResponse *previewResponse() const;
NSURL *firstRequestURL() const { return m_firstRequestURL.get(); }
- WEBCORE_EXPORT NSURL *previewRequestURL() const;
QLPreviewConverter *converter() const { return m_converter.get(); }
private:
- QuickLookHandle(NSURL *, NSURLResponse *, id delegate);
+ friend std::unique_ptr<QuickLookHandle> std::make_unique<QuickLookHandle>(ResourceLoader&, const ResourceResponse&);
+ QuickLookHandle(ResourceLoader&, const ResourceResponse&);
void didReceiveDataArray(NSArray *);
RetainPtr<NSURL> m_firstRequestURL;
+ RetainPtr<WebPreviewConverterDelegate> m_delegate;
RetainPtr<QLPreviewConverter> m_converter;
- RetainPtr<id> m_delegate;
- bool m_finishedLoadingDataIntoConverter;
- RetainPtr<NSFileHandle *> m_quicklookFileHandle;
- RetainPtr<NSURLResponse> m_nsResponse;
- RefPtr<QuickLookHandleClient> m_client;
+ RetainPtr<NSURLResponse> m_previewResponse;
+ Ref<QuickLookHandleClient> m_client;
+ bool m_finishedLoadingDataIntoConverter { false };
};
} // namespace WebCore
Modified: trunk/Source/WebCore/loader/ios/QuickLook.mm (210788 => 210789)
--- trunk/Source/WebCore/loader/ios/QuickLook.mm 2017-01-16 21:11:53 UTC (rev 210788)
+++ trunk/Source/WebCore/loader/ios/QuickLook.mm 2017-01-16 22:14:27 UTC (rev 210789)
@@ -31,11 +31,10 @@
#import "FileSystemIOS.h"
#import "Logging.h"
#import "NSFileManagerSPI.h"
+#import "QuickLookHandleClient.h"
#import "ResourceError.h"
#import "ResourceLoader.h"
#import "SharedBuffer.h"
-#import "WebCoreResourceHandleAsDelegate.h"
-#import <Foundation/Foundation.h>
#import <wtf/NeverDestroyed.h>
#import <wtf/Vector.h>
#import <wtf/text/WTFString.h>
@@ -179,41 +178,42 @@
return previewProtocol.get().data();
}
-@interface WebResourceLoaderQuickLookDelegate : NSObject <NSURLConnectionDelegate, WebCoreResourceLoaderDelegate> {
+@interface WebPreviewConverterDelegate : NSObject {
RefPtr<ResourceLoader> _resourceLoader;
+ QuickLookHandle* _quickLookHandle;
BOOL _hasSentDidReceiveResponse;
BOOL _hasFailed;
}
-@property (nonatomic) QuickLookHandle* quickLookHandle;
@end
-@implementation WebResourceLoaderQuickLookDelegate
+@implementation WebPreviewConverterDelegate
-- (id)initWithResourceLoader:(PassRefPtr<ResourceLoader>)resourceLoader
+- (id)initWithResourceLoader:(ResourceLoader&)resourceLoader quickLookHandle:(QuickLookHandle&)quickLookHandle
{
self = [super init];
if (!self)
return nil;
- _resourceLoader = resourceLoader;
+ _resourceLoader = &resourceLoader;
+ _quickLookHandle = &quickLookHandle;
return self;
}
- (void)_sendDidReceiveResponseIfNecessary
{
- if (_hasSentDidReceiveResponse || _hasFailed || !_quickLookHandle)
+ if (_hasSentDidReceiveResponse || _hasFailed)
return;
// QuickLook might fail to convert a document without calling connection:didFailWithError: (see <rdar://problem/17927972>).
// A nil MIME type is an indication of such a failure, so stop loading the resource and ignore subsequent delegate messages.
- NSURLResponse *nsResponse = _quickLookHandle->nsResponse();
- if (![nsResponse MIMEType]) {
+ NSURLResponse *previewResponse = _quickLookHandle->previewResponse();
+ if (!previewResponse.MIMEType) {
_hasFailed = YES;
_resourceLoader->didFail(_resourceLoader->cannotShowURLError());
return;
}
- ResourceResponse response(nsResponse);
+ ResourceResponse response { previewResponse };
response.setIsQuickLook(true);
_hasSentDidReceiveResponse = YES;
@@ -220,28 +220,9 @@
_resourceLoader->didReceiveResponse(response);
}
-#if USE(NETWORK_CFDATA_ARRAY_CALLBACK)
-- (void)connection:(NSURLConnection *)connection didReceiveDataArray:(NSArray *)dataArray
-{
- UNUSED_PARAM(connection);
- if (!_resourceLoader)
- return;
-
- [self _sendDidReceiveResponseIfNecessary];
- if (_hasFailed)
- return;
-
- if (_resourceLoader)
- _resourceLoader->didReceiveDataArray(reinterpret_cast<CFArrayRef>(dataArray));
-}
-#endif
-
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data lengthReceived:(long long)lengthReceived
{
UNUSED_PARAM(connection);
- if (!_resourceLoader)
- return;
-
[self _sendDidReceiveResponseIfNecessary];
if (_hasFailed)
return;
@@ -248,17 +229,14 @@
// QuickLook code sends us a nil data at times. The check below is the same as the one in
// ResourceHandleMac.cpp added for a different bug.
- if (![data length])
- return;
-
- if (_resourceLoader)
- _resourceLoader->didReceiveData(reinterpret_cast<const char*>([data bytes]), [data length], lengthReceived, DataPayloadBytes);
+ if (auto dataLength = data.length)
+ _resourceLoader->didReceiveData(reinterpret_cast<const char*>(data.bytes), dataLength, lengthReceived, DataPayloadBytes);
}
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
UNUSED_PARAM(connection);
- if (!_resourceLoader || _hasFailed)
+ if (_hasFailed)
return;
ASSERT(_hasSentDidReceiveResponse);
@@ -268,21 +246,11 @@
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
UNUSED_PARAM(connection);
-
[self _sendDidReceiveResponseIfNecessary];
- if (_hasFailed)
- return;
-
- if (_resourceLoader)
- _resourceLoader->didFail(ResourceError(error));
+ if (!_hasFailed)
+ _resourceLoader->didFail(error);
}
-- (void)detachHandle
-{
- _resourceLoader = nullptr;
- _quickLookHandle = nullptr;
-}
-
@end
namespace WebCore {
@@ -305,21 +273,21 @@
return success ? uniqueContentPath : nil;
}
-static inline QuickLookHandleClient* emptyClient()
+static inline QuickLookHandleClient& emptyClient()
{
- static NeverDestroyed<QuickLookHandleClient> emptyClient;
- return &emptyClient.get();
+ static auto& emptyClient = adoptRef(*new QuickLookHandleClient()).leakRef();
+ return emptyClient;
}
-QuickLookHandle::QuickLookHandle(NSURL *firstRequestURL, NSURLResponse *nsResponse, id delegate)
- : m_firstRequestURL(firstRequestURL)
- , m_converter(adoptNS([allocQLPreviewConverterInstance() initWithConnection:nil delegate:delegate response:nsResponse options:nil]))
- , m_delegate(delegate)
- , m_finishedLoadingDataIntoConverter(false)
- , m_nsResponse([m_converter previewResponse])
- , m_client(emptyClient())
+QuickLookHandle::QuickLookHandle(ResourceLoader& loader, const ResourceResponse& response)
+ : m_firstRequestURL { loader.originalRequest().nsURLRequest(DoNotUpdateHTTPBody).URL }
+ , m_delegate { adoptNS([[WebPreviewConverterDelegate alloc] initWithResourceLoader:loader quickLookHandle:*this]) }
+ , m_converter { adoptNS([allocQLPreviewConverterInstance() initWithConnection:nil delegate:m_delegate.get() response:response.nsURLResponse() options:nil]) }
+ , m_previewResponse { [m_converter previewResponse] }
+ , m_client { emptyClient() }
{
LOG(Network, "QuickLookHandle::QuickLookHandle() - previewFileName: %s", [m_converter previewFileName]);
+ loader.didCreateQuickLookHandle(*this);
}
bool QuickLookHandle::shouldCreateForMIMEType(const String& mimeType)
@@ -330,19 +298,9 @@
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], response.nsURLResponse(), delegate.get()));
- [delegate setQuickLookHandle:quickLookHandle.get()];
- loader.didCreateQuickLookHandle(*quickLookHandle);
- return quickLookHandle;
+ return std::make_unique<QuickLookHandle>(loader, response);
}
-NSURLResponse *QuickLookHandle::nsResponse()
-{
- return m_nsResponse.get();
-}
-
bool QuickLookHandle::didReceiveData(const char* data, unsigned length)
{
if (m_finishedLoadingDataIntoConverter)
@@ -375,7 +333,7 @@
return false;
LOG(Network, "QuickLookHandle::didFinishLoading()");
- m_finishedLoadingDataIntoConverter = YES;
+ m_finishedLoadingDataIntoConverter = true;
[m_converter finishedAppendingData];
m_client->didFinishLoading();
return true;
@@ -389,12 +347,14 @@
m_converter = nullptr;
}
+void QuickLookHandle::setClient(Ref<QuickLookHandleClient>&& client)
+{
+ m_client = WTFMove(client);
+}
+
QuickLookHandle::~QuickLookHandle()
{
LOG(Network, "QuickLookHandle::~QuickLookHandle()");
- m_converter = nullptr;
-
- [m_delegate detachHandle];
}
String QuickLookHandle::previewFileName() const
@@ -409,9 +369,14 @@
NSURL *QuickLookHandle::previewRequestURL() const
{
- return [[m_converter previewRequest] URL];
+ return [m_converter previewRequest].URL;
}
+NSURLResponse *QuickLookHandle::previewResponse() const
+{
+ return m_previewResponse.get();
}
+}
+
#endif // USE(QUICK_LOOK)
Modified: trunk/Source/WebKit/mac/ChangeLog (210788 => 210789)
--- trunk/Source/WebKit/mac/ChangeLog 2017-01-16 21:11:53 UTC (rev 210788)
+++ trunk/Source/WebKit/mac/ChangeLog 2017-01-16 22:14:27 UTC (rev 210789)
@@ -1,3 +1,14 @@
+2017-01-16 Andy Estes <aes...@apple.com>
+
+ [QuickLook] Do some cleanup in QuickLookHandle
+ https://bugs.webkit.org/show_bug.cgi?id=166864
+
+ Reviewed by Darin Adler.
+
+ * WebCoreSupport/WebFrameLoaderClient.mm:
+ (WebFrameLoaderClient::didCreateQuickLookHandle): Changed to pass a
+ Ref<QuickLookHandleClient>&& to QuickLookHandle::setClient().
+
2017-01-15 Tim Horton <timothy_hor...@apple.com>
De-duplicate more (nearly) identical code in Editor(Mac|IOS).mm
Modified: trunk/Source/WebKit/mac/WebCoreSupport/WebFrameLoaderClient.mm (210788 => 210789)
--- trunk/Source/WebKit/mac/WebCoreSupport/WebFrameLoaderClient.mm 2017-01-16 21:11:53 UTC (rev 210788)
+++ trunk/Source/WebKit/mac/WebCoreSupport/WebFrameLoaderClient.mm 2017-01-16 22:14:27 UTC (rev 210789)
@@ -152,6 +152,7 @@
#import <WebCore/FileSystemIOS.h>
#import <WebCore/NSFileManagerSPI.h>
#import <WebCore/QuickLook.h>
+#import <WebCore/QuickLookHandleClient.h>
#endif
#if HAVE(APP_LINKS)
@@ -2283,7 +2284,7 @@
removeQLPreviewConverterForURL(m_firstRequestURL.get());
}
};
- handle.setClient(adoptRef(new QuickLookDocumentWriter(handle)));
+ handle.setClient(adoptRef(*new QuickLookDocumentWriter(handle)));
}
#endif