Changeset 160616 in webkit


Ignore:
Timestamp:
Dec 14, 2013 10:32:27 PM (10 years ago)
Author:
commit-queue@webkit.org
Message:

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.

Patch by Yongjun Zhang <yongjun_zhang@apple.com> on 2013-12-14
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:]):

Location:
trunk/Source/WebKit2
Files:
4 edited
1 copied

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit2/ChangeLog

    r160609 r160616  
     12013-12-14  Yongjun Zhang  <yongjun_zhang@apple.com>
     2
     3        Add page load delegate for WebProcessPlugInBrowsingContextController.
     4        https://bugs.webkit.org/show_bug.cgi?id=125697
     5
     6        Add page load delegate for WebProcessPlugInBrowsingContextController so that a
     7        WebProcess injected bundle can listen to page load events.
     8
     9        Reviewed by Sam Weinig.
     10
     11        * WebKit2.xcodeproj/project.pbxproj:
     12        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInLoadDelegate.h: Added.
     13        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.h:
     14        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm:
     15        (didStartProvisionalLoadForFrame):
     16        (didFinishLoadForFrame):
     17        (globalObjectIsAvailableForFrame):
     18        (setUpPageLoaderClient):
     19        (-[WKWebProcessPlugInBrowserContextController loadDelegate]):
     20        (-[WKWebProcessPlugInBrowserContextController setLoadDelegate:]):
     21
    1222013-12-14  Dan Bernstein  <mitz@apple.com>
    223
  • trunk/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj

    r160608 r160616  
    333333                1CB75C941701E880009F809F /* DockRight.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 1CB75C931701E880009F809F /* DockRight.pdf */; };
    334334                1CBC945E16515ED200D68AAE /* DockBottom.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 1CBC945D16515ED200D68AAE /* DockBottom.pdf */; };
     335                1F335BC0185B84F0001A201A /* WKWebProcessPlugInLoadDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F335BBF185B84D8001A201A /* WKWebProcessPlugInLoadDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; };
    335336                1F7506AD1859161C00EC0FF7 /* WKWebProcessPlugInFrame.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1F01816A1858DC1500F92884 /* WKWebProcessPlugInFrame.mm */; };
    336337                1F7506AE1859162200EC0FF7 /* WKWebProcessPlugInHitTestResult.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1F01816D1858DC1600F92884 /* WKWebProcessPlugInHitTestResult.mm */; };
     
    19031904                1F0181731858DC1600F92884 /* WKWebProcessPlugInScriptWorld.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WKWebProcessPlugInScriptWorld.mm; sourceTree = "<group>"; };
    19041905                1F0181741858DC1600F92884 /* WKWebProcessPlugInScriptWorldInternal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WKWebProcessPlugInScriptWorldInternal.h; sourceTree = "<group>"; };
     1906                1F335BBF185B84D8001A201A /* WKWebProcessPlugInLoadDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WKWebProcessPlugInLoadDelegate.h; sourceTree = "<group>"; };
    19051907                290F4271172A0C7400939FF0 /* ChildProcessSupplement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ChildProcessSupplement.h; sourceTree = "<group>"; };
    19061908                293EBEA91627D9C9005F89F1 /* WKDOMText.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WKDOMText.h; sourceTree = "<group>"; };
     
    37483750                                1F01816D1858DC1600F92884 /* WKWebProcessPlugInHitTestResult.mm */,
    37493751                                1F01816E1858DC1600F92884 /* WKWebProcessPlugInHitTestResultInternal.h */,
     3752                                1F335BBF185B84D8001A201A /* WKWebProcessPlugInLoadDelegate.h */,
    37503753                                1F01816F1858DC1600F92884 /* WKWebProcessPlugInNodeHandle.h */,
    37513754                                1F0181701858DC1600F92884 /* WKWebProcessPlugInNodeHandle.mm */,
     
    57825785                                512935E41288D97800A4B695 /* InjectedBundlePageContextMenuClient.h in Headers */,
    57835786                                E1EE53E311F8CFC000CCBEE4 /* InjectedBundlePageEditorClient.h in Headers */,
     5787                                1F335BC0185B84F0001A201A /* WKWebProcessPlugInLoadDelegate.h in Headers */,
    57845788                                BC14E10A120B905E00826C0C /* InjectedBundlePageFormClient.h in Headers */,
    57855789                                1A445BA5184D5FDA004B3414 /* WKContextConnectionClient.h in Headers */,
  • trunk/Source/WebKit2/WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInLoadDelegate.h

    r160615 r160616  
    11/*
    2  * Copyright (C) 2012 Apple Inc. All rights reserved.
     2 * Copyright (C) 2013 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    2323 * THE POSSIBILITY OF SUCH DAMAGE.
    2424 */
    25 
    26 #import <WebKit2/WKFoundation.h>
    27 
    28 #if WK_API_ENABLED
    29 
    3025#import <Foundation/Foundation.h>
    3126
    32 @class WKDOMDocument;
    33 @class WKDOMRange;
     27@class WKWebProcessPlugInBrowsingContextController;
     28@class WKWebProcessPlugInFrame;
     29@class WKWebProcessPlugInScriptWorld;
    3430
    35 WK_API_CLASS
    36 @interface WKWebProcessPlugInBrowserContextController : NSObject
    37 
    38 @property(readonly) WKDOMDocument *mainFrameDocument;
    39 
    40 @property(readonly) WKDOMRange *selectedRange;
    41 
     31@protocol WKWebProcessPlugInLoadDelegate <NSObject>
     32@optional
     33- (void)webProcessPlugInBrowserContextController:(WKWebProcessPlugInBrowserContextController*)controller didStartProvisionalLoadForFrame:(WKWebProcessPlugInFrame *)frame;
     34- (void)webProcessPlugInBrowserContextController:(WKWebProcessPlugInBrowserContextController*)controller didFinishLoadForFrame:(WKWebProcessPlugInFrame *)frame;
     35- (void)webProcessPlugInBrowserContextController:(WKWebProcessPlugInBrowserContextController*)controller globalObjectIsAvailableForFrame:(WKWebProcessPlugInFrame *)frame inScriptWorld:(WKWebProcessPlugInScriptWorld *)scriptWorld;
    4236@end
    43 
    44 #endif // WK_API_ENABLED
  • trunk/Source/WebKit2/WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.h

    r159760 r160616  
    3232@class WKDOMDocument;
    3333@class WKDOMRange;
     34@protocol WKWebProcessPlugInLoadDelegate;
    3435
    3536WK_API_CLASS
     
    4041@property(readonly) WKDOMRange *selectedRange;
    4142
     43@property (weak) id <WKWebProcessPlugInLoadDelegate> loadDelegate;
     44
    4245@end
    4346
  • trunk/Source/WebKit2/WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm

    r160277 r160616  
    3535#import "WKDOMInternals.h"
    3636#import "WKRetainPtr.h"
     37#import "WKWebProcessPluginFrameInternal.h"
    3738#import "WKWebProcessPlugInInternal.h"
     39#import "WKWebProcessPlugInLoadDelegate.h"
     40#import "WKWebProcessPlugInScriptWorldInternal.h"
     41#import "WeakObjCPtr.h"
    3842#import "WebPage.h"
    3943#import "WebProcess.h"
     
    4650@implementation WKWebProcessPlugInBrowserContextController {
    4751    API::ObjectStorage<WebPage> _page;
     52    WeakObjCPtr<id <WKWebProcessPlugInLoadDelegate>> _loadDelegate;
     53}
     54
     55static void didStartProvisionalLoadForFrame(WKBundlePageRef page, WKBundleFrameRef frame, WKTypeRef* userDataRef, const void *clientInfo)
     56{
     57    WKWebProcessPlugInBrowserContextController *pluginContextController = (WKWebProcessPlugInBrowserContextController *)clientInfo;
     58    auto loadDelegate = pluginContextController->_loadDelegate.get();
     59
     60    if ([loadDelegate respondsToSelector:@selector(webProcessPlugInBrowserContextController:didStartProvisionalLoadForFrame:)])
     61        [loadDelegate webProcessPlugInBrowserContextController:pluginContextController didStartProvisionalLoadForFrame:wrapper(*toImpl(frame))];
     62}
     63
     64static void didFinishLoadForFrame(WKBundlePageRef page, WKBundleFrameRef frame, WKTypeRef* userData, const void *clientInfo)
     65{
     66    WKWebProcessPlugInBrowserContextController *pluginContextController = (WKWebProcessPlugInBrowserContextController *)clientInfo;
     67    auto loadDelegate = pluginContextController->_loadDelegate.get();
     68
     69    if ([loadDelegate respondsToSelector:@selector(webProcessPlugInBrowserContextController:didFinishLoadForFrame:)])
     70        [loadDelegate webProcessPlugInBrowserContextController:pluginContextController didFinishLoadForFrame:wrapper(*toImpl(frame))];
     71}
     72
     73static void globalObjectIsAvailableForFrame(WKBundlePageRef page, WKBundleFrameRef frame, WKBundleScriptWorldRef scriptWorld, const void* clientInfo)
     74{
     75    WKWebProcessPlugInBrowserContextController *pluginContextController = (WKWebProcessPlugInBrowserContextController *)clientInfo;
     76    auto loadDelegate = pluginContextController->_loadDelegate.get();
     77
     78    if ([loadDelegate respondsToSelector:@selector(webProcessPlugInBrowserContextController:globalObjectIsAvailableForFrame:inScriptWorld:)])
     79        [loadDelegate webProcessPlugInBrowserContextController:pluginContextController globalObjectIsAvailableForFrame:wrapper(*toImpl(frame)) inScriptWorld:wrapper(*toImpl(scriptWorld))];
     80}
     81
     82static void setUpPageLoaderClient(WKWebProcessPlugInBrowserContextController *contextController, WebPage& page)
     83{
     84    WKBundlePageLoaderClientV7 client;
     85    memset(&client, 0, sizeof(client));
     86
     87    client.base.version = 7;
     88    client.base.clientInfo = contextController;
     89    client.didStartProvisionalLoadForFrame = didStartProvisionalLoadForFrame;
     90    client.didFinishLoadForFrame = didFinishLoadForFrame;
     91    client.globalObjectIsAvailableForFrame = globalObjectIsAvailableForFrame;
     92
     93    page.initializeInjectedBundleLoaderClient(&client.base);
     94}
     95
     96- (id <WKWebProcessPlugInLoadDelegate>)loadDelegate
     97{
     98    return _loadDelegate.getAutoreleased();
     99}
     100
     101- (void)setLoadDelegate:(id <WKWebProcessPlugInLoadDelegate>)loadDelegate
     102{
     103    _loadDelegate = loadDelegate;
     104
     105    if (loadDelegate)
     106        setUpPageLoaderClient(self, *_page);
     107    else
     108        _page->initializeInjectedBundleLoaderClient(nullptr);
    48109}
    49110
Note: See TracChangeset for help on using the changeset viewer.