Diff
Modified: branches/safari-604-branch/Source/WebKit/ChangeLog (219920 => 219921)
--- branches/safari-604-branch/Source/WebKit/ChangeLog 2017-07-26 09:51:39 UTC (rev 219920)
+++ branches/safari-604-branch/Source/WebKit/ChangeLog 2017-07-26 09:51:41 UTC (rev 219921)
@@ -1,5 +1,33 @@
2017-07-26 Jason Marcell <[email protected]>
+ Cherry-pick r219750. rdar://problem/33523870
+
+ 2017-07-21 Andy Estes <[email protected]>
+
+ [iOS] Adopt UIImagePickerControllerImageURL for photo uploads
+ https://bugs.webkit.org/show_bug.cgi?id=174723
+ <rdar://problem/33223962>
+
+ Reviewed by Joseph Pecoraro.
+
+ In iOS 11, use the URL provided by UIImagePickerControllerImageURL, if available, as the
+ file URL for photo uploads. Since we use the UIImagePickerController imageExportPreset of
+ UIImagePickerControllerImageURLExportPresetCompatible, UIKit will take care of converting
+ HEIF images to JPEG for us. For other types (GIF, JPEG, and PNG), it will preserve the
+ original format.
+
+ Since UIImagePickerController now provides GIF and PNG representations, we no longer need to
+ use PHImageManager to access the original assets. This patch removes the
+ PHAsset/PHImageManager code added in r185241.
+
+ * Platform/spi/ios/PhotosSPI.h: Removed.
+ * UIProcess/ios/forms/WKFileUploadPanel.mm:
+ (-[WKFileUploadPanel _uploadItemFromMediaInfo:successBlock:failureBlock:]):
+ (-[WKFileUploadPanel _uploadItemForImage:withAssetURL:successBlock:failureBlock:]): Deleted.
+ * WebKit.xcodeproj/project.pbxproj:
+
+2017-07-26 Jason Marcell <[email protected]>
+
Cherry-pick r219610. rdar://problem/33523847
2017-07-18 Said Abou-Hallawa <[email protected]>
Deleted: branches/safari-604-branch/Source/WebKit/Platform/spi/ios/PhotosSPI.h (219920 => 219921)
--- branches/safari-604-branch/Source/WebKit/Platform/spi/ios/PhotosSPI.h 2017-07-26 09:51:39 UTC (rev 219920)
+++ branches/safari-604-branch/Source/WebKit/Platform/spi/ios/PhotosSPI.h 2017-07-26 09:51:41 UTC (rev 219921)
@@ -1,47 +0,0 @@
-/*
- * Copyright (C) 2016 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#if PLATFORM(IOS)
-
-#import <Photos/Photos.h>
-
-#if USE(APPLE_INTERNAL_SDK)
-
-#import <Photos/Photos_Private.h>
-
-#else
-
-@interface PHAssetOriginalMetadataProperties
-@property (nonatomic, strong, readonly) NSString *originalFilename;
-@end
-
-@interface PHAsset ()
-- (PHAssetOriginalMetadataProperties *)originalMetadataProperties;
-- (void)fetchPropertySetsIfNeeded;
-@end
-
-#endif
-
-#endif
Modified: branches/safari-604-branch/Source/WebKit/UIProcess/ios/forms/WKFileUploadPanel.mm (219920 => 219921)
--- branches/safari-604-branch/Source/WebKit/UIProcess/ios/forms/WKFileUploadPanel.mm 2017-07-26 09:51:39 UTC (rev 219920)
+++ branches/safari-604-branch/Source/WebKit/UIProcess/ios/forms/WKFileUploadPanel.mm 2017-07-26 09:51:41 UTC (rev 219921)
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2014, 2016 Apple Inc. All rights reserved.
+ * Copyright (C) 2014-2017 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -32,7 +32,6 @@
#import "APIData.h"
#import "APIOpenPanelParameters.h"
#import "APIString.h"
-#import "PhotosSPI.h"
#import "UIKitSPI.h"
#import "WKContentViewInteraction.h"
#import "WKData.h"
@@ -41,23 +40,13 @@
#import "WebIconUtilities.h"
#import "WebOpenPanelResultListenerProxy.h"
#import "WebPageProxy.h"
-#import <AVFoundation/AVFoundation.h>
-#import <CoreMedia/CoreMedia.h>
#import <MobileCoreServices/MobileCoreServices.h>
#import <WebCore/LocalizedStrings.h>
#import <WebKit/WebNSFileManagerExtras.h>
#import <wtf/RetainPtr.h>
-#import <wtf/SoftLinking.h>
using namespace WebKit;
-SOFT_LINK_FRAMEWORK(Photos);
-SOFT_LINK_CLASS(Photos, PHAsset);
-SOFT_LINK_CLASS(Photos, PHImageManager);
-SOFT_LINK_CLASS(Photos, PHImageRequestOptions);
-SOFT_LINK_CONSTANT(Photos, PHImageRequestOptionsResizeModeNone, NSString *);
-SOFT_LINK_CONSTANT(Photos, PHImageRequestOptionsVersionCurrent, NSString *);
-
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
@@ -664,43 +653,6 @@
});
}
-- (void)_uploadItemForImage:(UIImage *)image withAssetURL:(NSURL *)assetURL successBlock:(void (^)(_WKFileUploadItem *))successBlock failureBlock:(void (^)(void))failureBlock
-{
- ASSERT_ARG(image, image);
- ASSERT_ARG(assetURL, assetURL);
-
- dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
- PHFetchResult *result = [getPHAssetClass() fetchAssetsWithALAssetURLs:@[assetURL] options:nil];
- if (!result.count) {
- LOG_ERROR("WKFileUploadPanel: Failed to fetch asset with URL %@", assetURL);
- [self _uploadItemForJPEGRepresentationOfImage:image successBlock:successBlock failureBlock:failureBlock];
- return;
- }
-
- PHAsset *firstAsset = result[0];
- [firstAsset fetchPropertySetsIfNeeded];
- NSString *originalFilename = [[firstAsset originalMetadataProperties] originalFilename];
- ASSERT(originalFilename);
-
- RetainPtr<PHImageRequestOptions> options = adoptNS([allocPHImageRequestOptionsInstance() init]);
- [options setVersion:PHImageRequestOptionsVersionCurrent];
- [options setSynchronous:YES];
- [options setResizeMode:PHImageRequestOptionsResizeModeNone];
-
- PHImageManager *manager = (PHImageManager *)[getPHImageManagerClass() defaultManager];
- [manager requestImageDataForAsset:firstAsset options:options.get() resultHandler:^(NSData *imageData, NSString *dataUTI, UIImageOrientation, NSDictionary *info)
- {
- if (!imageData) {
- LOG_ERROR("WKFileUploadPanel: Failed to request image data for asset with URL %@", assetURL);
- [self _uploadItemForJPEGRepresentationOfImage:image successBlock:successBlock failureBlock:failureBlock];
- return;
- }
-
- [self _uploadItemForImageData:imageData imageName:originalFilename successBlock:successBlock failureBlock:failureBlock];
- }];
- });
-}
-
- (void)_uploadItemFromMediaInfo:(NSDictionary *)info successBlock:(void (^)(_WKFileUploadItem *))successBlock failureBlock:(void (^)(void))failureBlock
{
NSString *mediaType = [info objectForKey:UIImagePickerControllerMediaType];
@@ -726,6 +678,20 @@
return;
}
+#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 110000
+ if (NSURL *imageURL = info[UIImagePickerControllerImageURL]) {
+ if (!imageURL.isFileURL) {
+ LOG_ERROR("WKFileUploadPanel: Expected image URL to be a file path, it was not");
+ ASSERT_NOT_REACHED();
+ failureBlock();
+ return;
+ }
+
+ successBlock(adoptNS([[_WKImageFileUploadItem alloc] initWithFileURL:imageURL]).get());
+ return;
+ }
+#endif
+
UIImage *originalImage = [info objectForKey:UIImagePickerControllerOriginalImage];
if (!originalImage) {
LOG_ERROR("WKFileUploadPanel: Expected image data but there was none");
@@ -734,14 +700,7 @@
return;
}
- // If we have an asset URL, try to upload the native image.
- NSURL *referenceURL = [info objectForKey:UIImagePickerControllerReferenceURL];
- if (referenceURL) {
- [self _uploadItemForImage:originalImage withAssetURL:referenceURL successBlock:successBlock failureBlock:failureBlock];
- return;
- }
-
- // Photos taken with the camera will not have an asset URL. Fall back to a JPEG representation.
+ // Photos taken with the camera will not have an image URL. Fall back to a JPEG representation.
[self _uploadItemForJPEGRepresentationOfImage:originalImage successBlock:successBlock failureBlock:failureBlock];
}
Modified: branches/safari-604-branch/Source/WebKit/WebKit.xcodeproj/project.pbxproj (219920 => 219921)
--- branches/safari-604-branch/Source/WebKit/WebKit.xcodeproj/project.pbxproj 2017-07-26 09:51:39 UTC (rev 219920)
+++ branches/safari-604-branch/Source/WebKit/WebKit.xcodeproj/project.pbxproj 2017-07-26 09:51:41 UTC (rev 219921)
@@ -3414,7 +3414,6 @@
539EB5461DC2EE40009D48CF /* NetworkDataTaskBlob.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = NetworkDataTaskBlob.cpp; path = NetworkProcess/NetworkDataTaskBlob.cpp; sourceTree = "<group>"; };
539EB5471DC2EE40009D48CF /* NetworkDataTaskBlob.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = NetworkDataTaskBlob.h; path = NetworkProcess/NetworkDataTaskBlob.h; sourceTree = "<group>"; };
53DEA3651DDE422E00E82648 /* json.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = json.hpp; path = NetworkProcess/capture/json.hpp; sourceTree = "<group>"; };
- 579D18B71CCFE34B00B1974C /* PhotosSPI.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PhotosSPI.h; sourceTree = "<group>"; };
5C052F241C6D3AB60076E919 /* AuthenticationManagerCocoa.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = AuthenticationManagerCocoa.mm; path = Authentication/cocoa/AuthenticationManagerCocoa.mm; sourceTree = "<group>"; };
5C0B17741E7C879C00E9123C /* NetworkSocketStreamMessageReceiver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = NetworkSocketStreamMessageReceiver.cpp; sourceTree = "<group>"; };
5C0B17751E7C879C00E9123C /* NetworkSocketStreamMessages.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NetworkSocketStreamMessages.h; sourceTree = "<group>"; };
@@ -8024,7 +8023,6 @@
07A8F3861E64A8F900B668E8 /* CelestialSPI.h */,
CE1A0BCD1A48E6C60054EF74 /* CorePDFSPI.h */,
CE1A0BCF1A48E6C60054EF74 /* ManagedConfigurationSPI.h */,
- 579D18B71CCFE34B00B1974C /* PhotosSPI.h */,
CE1A0BD01A48E6C60054EF74 /* TCCSPI.h */,
CE1A0BD11A48E6C60054EF74 /* TextInputSPI.h */,
CEE4AE2A1A5DCF430002F49B /* UIKitSPI.h */,