Diff
Modified: trunk/Source/WebKit2/ChangeLog (160615 => 160616)
--- trunk/Source/WebKit2/ChangeLog 2013-12-15 06:20:05 UTC (rev 160615)
+++ trunk/Source/WebKit2/ChangeLog 2013-12-15 06:32:27 UTC (rev 160616)
@@ -1,3 +1,24 @@
+2013-12-14 Yongjun Zhang <yongjun_zh...@apple.com>
+
+ Add page load delegate for WebProcessPlugInBrowsingContextController.
+ https://bugs.webkit.org/show_bug.cgi?id=125697
+
+ Add page load delegate for WebProcessPlugInBrowsingContextController so that a
+ WebProcess injected bundle can listen to page load events.
+
+ Reviewed by Sam Weinig.
+
+ * WebKit2.xcodeproj/project.pbxproj:
+ * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInLoadDelegate.h: Added.
+ * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.h:
+ * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm:
+ (didStartProvisionalLoadForFrame):
+ (didFinishLoadForFrame):
+ (globalObjectIsAvailableForFrame):
+ (setUpPageLoaderClient):
+ (-[WKWebProcessPlugInBrowserContextController loadDelegate]):
+ (-[WKWebProcessPlugInBrowserContextController setLoadDelegate:]):
+
2013-12-14 Dan Bernstein <m...@apple.com>
[iOS] Implement NetworkProcess::allowSpecificHTTPSCertificateForHost
Modified: trunk/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj (160615 => 160616)
--- trunk/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj 2013-12-15 06:20:05 UTC (rev 160615)
+++ trunk/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj 2013-12-15 06:32:27 UTC (rev 160616)
@@ -332,6 +332,7 @@
1CA8B954127C891500576C2B /* WebInspectorMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1C8E2DAD1278C5B200BC7BD0 /* WebInspectorMac.mm */; };
1CB75C941701E880009F809F /* DockRight.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 1CB75C931701E880009F809F /* DockRight.pdf */; };
1CBC945E16515ED200D68AAE /* DockBottom.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 1CBC945D16515ED200D68AAE /* DockBottom.pdf */; };
+ 1F335BC0185B84F0001A201A /* WKWebProcessPlugInLoadDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F335BBF185B84D8001A201A /* WKWebProcessPlugInLoadDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; };
1F7506AD1859161C00EC0FF7 /* WKWebProcessPlugInFrame.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1F01816A1858DC1500F92884 /* WKWebProcessPlugInFrame.mm */; };
1F7506AE1859162200EC0FF7 /* WKWebProcessPlugInHitTestResult.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1F01816D1858DC1600F92884 /* WKWebProcessPlugInHitTestResult.mm */; };
1F7506AF1859162800EC0FF7 /* WKWebProcessPlugInNodeHandle.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1F0181701858DC1600F92884 /* WKWebProcessPlugInNodeHandle.mm */; };
@@ -1902,6 +1903,7 @@
1F0181721858DC1600F92884 /* WKWebProcessPlugInScriptWorld.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WKWebProcessPlugInScriptWorld.h; sourceTree = "<group>"; };
1F0181731858DC1600F92884 /* WKWebProcessPlugInScriptWorld.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WKWebProcessPlugInScriptWorld.mm; sourceTree = "<group>"; };
1F0181741858DC1600F92884 /* WKWebProcessPlugInScriptWorldInternal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WKWebProcessPlugInScriptWorldInternal.h; sourceTree = "<group>"; };
+ 1F335BBF185B84D8001A201A /* WKWebProcessPlugInLoadDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WKWebProcessPlugInLoadDelegate.h; sourceTree = "<group>"; };
290F4271172A0C7400939FF0 /* ChildProcessSupplement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ChildProcessSupplement.h; sourceTree = "<group>"; };
293EBEA91627D9C9005F89F1 /* WKDOMText.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WKDOMText.h; sourceTree = "<group>"; };
293EBEAA1627D9C9005F89F1 /* WKDOMText.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WKDOMText.mm; sourceTree = "<group>"; };
@@ -3747,6 +3749,7 @@
1F01816C1858DC1500F92884 /* WKWebProcessPlugInHitTestResult.h */,
1F01816D1858DC1600F92884 /* WKWebProcessPlugInHitTestResult.mm */,
1F01816E1858DC1600F92884 /* WKWebProcessPlugInHitTestResultInternal.h */,
+ 1F335BBF185B84D8001A201A /* WKWebProcessPlugInLoadDelegate.h */,
1F01816F1858DC1600F92884 /* WKWebProcessPlugInNodeHandle.h */,
1F0181701858DC1600F92884 /* WKWebProcessPlugInNodeHandle.mm */,
1F0181711858DC1600F92884 /* WKWebProcessPlugInNodeHandleInternal.h */,
@@ -5781,6 +5784,7 @@
378E1A4E18208D700031007A /* WKNSURL.h in Headers */,
512935E41288D97800A4B695 /* InjectedBundlePageContextMenuClient.h in Headers */,
E1EE53E311F8CFC000CCBEE4 /* InjectedBundlePageEditorClient.h in Headers */,
+ 1F335BC0185B84F0001A201A /* WKWebProcessPlugInLoadDelegate.h in Headers */,
BC14E10A120B905E00826C0C /* InjectedBundlePageFormClient.h in Headers */,
1A445BA5184D5FDA004B3414 /* WKContextConnectionClient.h in Headers */,
CD5C66A1134B9D38004FE2A8 /* InjectedBundlePageFullScreenClient.h in Headers */,
Copied: trunk/Source/WebKit2/WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInLoadDelegate.h (from rev 160615, trunk/Source/WebKit2/WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.h) (0 => 160616)
--- trunk/Source/WebKit2/WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInLoadDelegate.h (rev 0)
+++ trunk/Source/WebKit2/WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInLoadDelegate.h 2013-12-15 06:32:27 UTC (rev 160616)
@@ -0,0 +1,36 @@
+/*
+ * Copyright (C) 2013 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 <Foundation/Foundation.h>
+
+@class WKWebProcessPlugInBrowsingContextController;
+@class WKWebProcessPlugInFrame;
+@class WKWebProcessPlugInScriptWorld;
+
+@protocol WKWebProcessPlugInLoadDelegate <NSObject>
+@optional
+- (void)webProcessPlugInBrowserContextController:(WKWebProcessPlugInBrowserContextController*)controller didStartProvisionalLoadForFrame:(WKWebProcessPlugInFrame *)frame;
+- (void)webProcessPlugInBrowserContextController:(WKWebProcessPlugInBrowserContextController*)controller didFinishLoadForFrame:(WKWebProcessPlugInFrame *)frame;
+- (void)webProcessPlugInBrowserContextController:(WKWebProcessPlugInBrowserContextController*)controller globalObjectIsAvailableForFrame:(WKWebProcessPlugInFrame *)frame inScriptWorld:(WKWebProcessPlugInScriptWorld *)scriptWorld;
+@end
Modified: trunk/Source/WebKit2/WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.h (160615 => 160616)
--- trunk/Source/WebKit2/WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.h 2013-12-15 06:20:05 UTC (rev 160615)
+++ trunk/Source/WebKit2/WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.h 2013-12-15 06:32:27 UTC (rev 160616)
@@ -31,6 +31,7 @@
@class WKDOMDocument;
@class WKDOMRange;
+@protocol WKWebProcessPlugInLoadDelegate;
WK_API_CLASS
@interface WKWebProcessPlugInBrowserContextController : NSObject
@@ -39,6 +40,8 @@
@property(readonly) WKDOMRange *selectedRange;
+@property (weak) id <WKWebProcessPlugInLoadDelegate> loadDelegate;
+
@end
#endif // WK_API_ENABLED
Modified: trunk/Source/WebKit2/WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm (160615 => 160616)
--- trunk/Source/WebKit2/WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm 2013-12-15 06:20:05 UTC (rev 160615)
+++ trunk/Source/WebKit2/WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm 2013-12-15 06:32:27 UTC (rev 160616)
@@ -34,7 +34,11 @@
#import "WKBundlePagePrivate.h"
#import "WKDOMInternals.h"
#import "WKRetainPtr.h"
+#import "WKWebProcessPluginFrameInternal.h"
#import "WKWebProcessPlugInInternal.h"
+#import "WKWebProcessPlugInLoadDelegate.h"
+#import "WKWebProcessPlugInScriptWorldInternal.h"
+#import "WeakObjCPtr.h"
#import "WebPage.h"
#import "WebProcess.h"
#import <WebCore/Document.h>
@@ -45,8 +49,65 @@
@implementation WKWebProcessPlugInBrowserContextController {
API::ObjectStorage<WebPage> _page;
+ WeakObjCPtr<id <WKWebProcessPlugInLoadDelegate>> _loadDelegate;
}
+static void didStartProvisionalLoadForFrame(WKBundlePageRef page, WKBundleFrameRef frame, WKTypeRef* userDataRef, const void *clientInfo)
+{
+ WKWebProcessPlugInBrowserContextController *pluginContextController = (WKWebProcessPlugInBrowserContextController *)clientInfo;
+ auto loadDelegate = pluginContextController->_loadDelegate.get();
+
+ if ([loadDelegate respondsToSelector:@selector(webProcessPlugInBrowserContextController:didStartProvisionalLoadForFrame:)])
+ [loadDelegate webProcessPlugInBrowserContextController:pluginContextController didStartProvisionalLoadForFrame:wrapper(*toImpl(frame))];
+}
+
+static void didFinishLoadForFrame(WKBundlePageRef page, WKBundleFrameRef frame, WKTypeRef* userData, const void *clientInfo)
+{
+ WKWebProcessPlugInBrowserContextController *pluginContextController = (WKWebProcessPlugInBrowserContextController *)clientInfo;
+ auto loadDelegate = pluginContextController->_loadDelegate.get();
+
+ if ([loadDelegate respondsToSelector:@selector(webProcessPlugInBrowserContextController:didFinishLoadForFrame:)])
+ [loadDelegate webProcessPlugInBrowserContextController:pluginContextController didFinishLoadForFrame:wrapper(*toImpl(frame))];
+}
+
+static void globalObjectIsAvailableForFrame(WKBundlePageRef page, WKBundleFrameRef frame, WKBundleScriptWorldRef scriptWorld, const void* clientInfo)
+{
+ WKWebProcessPlugInBrowserContextController *pluginContextController = (WKWebProcessPlugInBrowserContextController *)clientInfo;
+ auto loadDelegate = pluginContextController->_loadDelegate.get();
+
+ if ([loadDelegate respondsToSelector:@selector(webProcessPlugInBrowserContextController:globalObjectIsAvailableForFrame:inScriptWorld:)])
+ [loadDelegate webProcessPlugInBrowserContextController:pluginContextController globalObjectIsAvailableForFrame:wrapper(*toImpl(frame)) inScriptWorld:wrapper(*toImpl(scriptWorld))];
+}
+
+static void setUpPageLoaderClient(WKWebProcessPlugInBrowserContextController *contextController, WebPage& page)
+{
+ WKBundlePageLoaderClientV7 client;
+ memset(&client, 0, sizeof(client));
+
+ client.base.version = 7;
+ client.base.clientInfo = contextController;
+ client.didStartProvisionalLoadForFrame = didStartProvisionalLoadForFrame;
+ client.didFinishLoadForFrame = didFinishLoadForFrame;
+ client.globalObjectIsAvailableForFrame = globalObjectIsAvailableForFrame;
+
+ page.initializeInjectedBundleLoaderClient(&client.base);
+}
+
+- (id <WKWebProcessPlugInLoadDelegate>)loadDelegate
+{
+ return _loadDelegate.getAutoreleased();
+}
+
+- (void)setLoadDelegate:(id <WKWebProcessPlugInLoadDelegate>)loadDelegate
+{
+ _loadDelegate = loadDelegate;
+
+ if (loadDelegate)
+ setUpPageLoaderClient(self, *_page);
+ else
+ _page->initializeInjectedBundleLoaderClient(nullptr);
+}
+
- (void)dealloc
{
_page->~WebPage();