- Revision
- 239442
- Author
- [email protected]
- Date
- 2018-12-20 09:35:17 -0800 (Thu, 20 Dec 2018)
Log Message
Unparented WKWebView can't retrieve main resource data for a main frame plugin
https://bugs.webkit.org/show_bug.cgi?id=192923
<rdar://problem/46859068>
Reviewed by Wenson Hsieh.
Source/WebKit:
* WebProcess/Plugins/PluginView.cpp:
(WebKit::PluginView::liveResourceData const):
If the WKWebView is unparented, we may not immediately initialize the plugin.
In that case, PluginView holds on to the backing data until the plugin
is initialized. If a WKWebView API client asks for the backing data
for the plugin during this time, we should return it, instead of bailing.
Tools:
* TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
* TestWebKitAPI/WebKitCocoa/GetResourceData.mm:
Add a test ensuring that both parented and unparented WKWebViews can
retrieve main resource data when loading a PDF.
Modified Paths
Added Paths
Diff
Modified: trunk/Source/WebKit/ChangeLog (239441 => 239442)
--- trunk/Source/WebKit/ChangeLog 2018-12-20 16:28:55 UTC (rev 239441)
+++ trunk/Source/WebKit/ChangeLog 2018-12-20 17:35:17 UTC (rev 239442)
@@ -1,3 +1,18 @@
+2018-12-20 Tim Horton <[email protected]>
+
+ Unparented WKWebView can't retrieve main resource data for a main frame plugin
+ https://bugs.webkit.org/show_bug.cgi?id=192923
+ <rdar://problem/46859068>
+
+ Reviewed by Wenson Hsieh.
+
+ * WebProcess/Plugins/PluginView.cpp:
+ (WebKit::PluginView::liveResourceData const):
+ If the WKWebView is unparented, we may not immediately initialize the plugin.
+ In that case, PluginView holds on to the backing data until the plugin
+ is initialized. If a WKWebView API client asks for the backing data
+ for the plugin during this time, we should return it, instead of bailing.
+
2018-12-20 Wenson Hsieh <[email protected]>
[iOS] Focusing an editable element should scroll to reveal the selection
Modified: trunk/Source/WebKit/WebProcess/Plugins/PluginView.cpp (239441 => 239442)
--- trunk/Source/WebKit/WebProcess/Plugins/PluginView.cpp 2018-12-20 16:28:55 UTC (rev 239441)
+++ trunk/Source/WebKit/WebProcess/Plugins/PluginView.cpp 2018-12-20 17:35:17 UTC (rev 239442)
@@ -997,9 +997,13 @@
RefPtr<SharedBuffer> PluginView::liveResourceData() const
{
- if (!m_isInitialized || !m_plugin)
- return 0;
+ if (!m_isInitialized || !m_plugin) {
+ if (m_manualStreamData && m_manualStreamState == ManualStreamState::Finished)
+ return m_manualStreamData;
+ return nullptr;
+ }
+
return m_plugin->liveResourceData();
}
Modified: trunk/Tools/ChangeLog (239441 => 239442)
--- trunk/Tools/ChangeLog 2018-12-20 16:28:55 UTC (rev 239441)
+++ trunk/Tools/ChangeLog 2018-12-20 17:35:17 UTC (rev 239442)
@@ -1,3 +1,16 @@
+2018-12-20 Tim Horton <[email protected]>
+
+ Unparented WKWebView can't retrieve main resource data for a main frame plugin
+ https://bugs.webkit.org/show_bug.cgi?id=192923
+ <rdar://problem/46859068>
+
+ Reviewed by Wenson Hsieh.
+
+ * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
+ * TestWebKitAPI/WebKitCocoa/GetResourceData.mm:
+ Add a test ensuring that both parented and unparented WKWebViews can
+ retrieve main resource data when loading a PDF.
+
2018-12-20 Carlos Garcia Campos <[email protected]>
[GTK][WPE] Bump webkitgtk-test-fonts to 0.0.8
Modified: trunk/Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj (239441 => 239442)
--- trunk/Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj 2018-12-20 16:28:55 UTC (rev 239441)
+++ trunk/Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj 2018-12-20 17:35:17 UTC (rev 239442)
@@ -88,6 +88,7 @@
2D4CF8BD1D8360CC0001CE8D /* WKThumbnailView.mm in Sources */ = {isa = PBXBuildFile; fileRef = 2D4CF8BC1D8360CC0001CE8D /* WKThumbnailView.mm */; };
2D51A0C71C8BF00C00765C45 /* DOMHTMLVideoElementWrapper.mm in Sources */ = {isa = PBXBuildFile; fileRef = 2D51A0C51C8BF00400765C45 /* DOMHTMLVideoElementWrapper.mm */; };
2D838B1F1EEF3A5C009B980E /* WKContentViewEditingActions.mm in Sources */ = {isa = PBXBuildFile; fileRef = 2D838B1E1EEF3A5B009B980E /* WKContentViewEditingActions.mm */; };
+ 2DADF26321CB8F32003D3E3A /* GetResourceData.mm in Sources */ = {isa = PBXBuildFile; fileRef = 2DADF26221CB8F32003D3E3A /* GetResourceData.mm */; };
2DB0232F1E4E871800707123 /* InteractionDeadlockAfterCrash.mm in Sources */ = {isa = PBXBuildFile; fileRef = 2DB0232E1E4E871800707123 /* InteractionDeadlockAfterCrash.mm */; };
2DB647881F4163D60051A89E /* WKWebViewDoesNotLogDuringInitialization.mm in Sources */ = {isa = PBXBuildFile; fileRef = 2DB647871F4161F70051A89E /* WKWebViewDoesNotLogDuringInitialization.mm */; };
2DC4CF771D2D9DD800ECCC94 /* DataDetection.mm in Sources */ = {isa = PBXBuildFile; fileRef = 2DC4CF761D2D9DD800ECCC94 /* DataDetection.mm */; };
@@ -1382,6 +1383,7 @@
2D8104CB1BEC13E70020DA46 /* FindInPage.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = FindInPage.mm; sourceTree = "<group>"; };
2D838B1E1EEF3A5B009B980E /* WKContentViewEditingActions.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WKContentViewEditingActions.mm; sourceTree = "<group>"; };
2D9A53AE1B31FA8D0074D5AA /* ShrinkToFit.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = ShrinkToFit.mm; sourceTree = "<group>"; };
+ 2DADF26221CB8F32003D3E3A /* GetResourceData.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = GetResourceData.mm; sourceTree = "<group>"; };
2DB0232E1E4E871800707123 /* InteractionDeadlockAfterCrash.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = InteractionDeadlockAfterCrash.mm; sourceTree = "<group>"; };
2DB647871F4161F70051A89E /* WKWebViewDoesNotLogDuringInitialization.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = WKWebViewDoesNotLogDuringInitialization.mm; sourceTree = "<group>"; };
2DC4CF761D2D9DD800ECCC94 /* DataDetection.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = DataDetection.mm; sourceTree = "<group>"; };
@@ -2445,6 +2447,7 @@
CDE195B31CFE0ADE0053D256 /* FullscreenTopContentInset.mm */,
631EFFF51E7B5E8D00D2EBB8 /* Geolocation.mm */,
07E1F6A01FFC3A080096C7EC /* GetDisplayMedia.mm */,
+ 2DADF26221CB8F32003D3E3A /* GetResourceData.mm */,
51AF23DE1EF1A3720072F281 /* IconLoadingDelegate.mm */,
510477751D298E03009747EB /* IDBDeleteRecovery.mm */,
5110FCEF1E01CBAA006F8D0B /* IDBIndexUpgradeToV2.mm */,
@@ -3969,6 +3972,7 @@
07E1F6A31FFC4B760096C7EC /* GetDisplayMedia.mm in Sources */,
7CCE7EF91A411AE600447C4C /* GetInjectedBundleInitializationUserDataCallback.cpp in Sources */,
7CCE7EE21A411A9A00447C4C /* GetPIDAfterAbortedProcessLaunch.cpp in Sources */,
+ 2DADF26321CB8F32003D3E3A /* GetResourceData.mm in Sources */,
07CE1CF31F06A7E000BF89F5 /* GetUserMediaNavigation.mm in Sources */,
07E499911F9E56DF002F1EF3 /* GetUserMediaReprompt.mm in Sources */,
316BDBAC1E7207F100DE0D5A /* GPULegacyBuffer.mm in Sources */,
Added: trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/GetResourceData.mm (0 => 239442)
--- trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/GetResourceData.mm (rev 0)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/GetResourceData.mm 2018-12-20 17:35:17 UTC (rev 239442)
@@ -0,0 +1,76 @@
+/*
+ * Copyright (C) 2018 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. AND ITS CONTRIBUTORS ``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 ITS 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.
+ */
+
+#import "config.h"
+#import <WebKit/WKFoundation.h>
+
+#if PLATFORM(MAC) && WK_API_ENABLED
+
+#import "PlatformUtilities.h"
+#import "Test.h"
+#import "TestNavigationDelegate.h"
+#import "TestWKWebView.h"
+#import <WebKit/WKWebViewPrivate.h>
+#import <wtf/RetainPtr.h>
+
+TEST(WebKit, GetPDFResourceData)
+{
+ auto configuration = adoptNS([[WKWebViewConfiguration alloc] init]);
+ auto webView = adoptNS([[TestWKWebView alloc] initWithFrame:CGRectMake(0, 0, 100, 100) configuration:configuration.get() addToWindow:YES]);
+
+ NSURLRequest *request = [NSURLRequest requestWithURL:[[NSBundle mainBundle] URLForResource:@"test" withExtension:@"pdf" subdirectory:@"TestWebKitAPI.resources"]];
+ [webView loadRequest:request];
+
+ [webView _test_waitForDidFinishNavigation];
+
+ __block bool isDone;
+ [webView _getMainResourceDataWithCompletionHandler:^(NSData *data, NSError *error) {
+ EXPECT_EQ(data.length, 10820UL);
+ isDone = true;
+ }];
+
+ TestWebKitAPI::Util::run(&isDone);
+}
+
+TEST(WebKit, GetPDFResourceDataInUnparentedWebView)
+{
+ auto configuration = adoptNS([[WKWebViewConfiguration alloc] init]);
+ auto webView = adoptNS([[TestWKWebView alloc] initWithFrame:CGRectMake(0, 0, 100, 100) configuration:configuration.get() addToWindow:NO]);
+
+ NSURLRequest *request = [NSURLRequest requestWithURL:[[NSBundle mainBundle] URLForResource:@"test" withExtension:@"pdf" subdirectory:@"TestWebKitAPI.resources"]];
+ [webView loadRequest:request];
+
+ [webView _test_waitForDidFinishNavigation];
+
+ __block bool isDone;
+ [webView _getMainResourceDataWithCompletionHandler:^(NSData *data, NSError *error) {
+ EXPECT_EQ(data.length, 10820UL);
+ isDone = true;
+ }];
+
+ TestWebKitAPI::Util::run(&isDone);
+}
+
+#endif