Changeset 163062 in webkit


Ignore:
Timestamp:
Jan 29, 2014 6:49:27 PM (10 years ago)
Author:
andersca@apple.com
Message:

Add a NavigationState object to keep track of the navigations for a given page
https://bugs.webkit.org/show_bug.cgi?id=127884

Reviewed by Sam Weinig.

  • UIProcess/API/Cocoa/WKNavigation.mm:

(-[WKNavigation request]):
(-[WKNavigation setRequest:]):

  • UIProcess/API/Cocoa/WKNavigationInternal.h:
  • UIProcess/API/Cocoa/WKWebView.mm:

(-[WKWebView initWithFrame:configuration:]):
(-[WKWebView loadRequest:]):

  • UIProcess/Cocoa/NavigationState.h: Copied from Source/WebKit2/UIProcess/API/Cocoa/WKNavigation.mm.
  • UIProcess/Cocoa/NavigationState.mm: Copied from Source/WebKit2/UIProcess/API/Cocoa/WKNavigation.mm.

(WebKit::NavigationState::NavigationState):
(WebKit::NavigationState::~NavigationState):
(WebKit::NavigationState::createLoadRequestNavigation):

  • UIProcess/WebPageProxy.cpp:

(WebKit::WebPageProxy::loadRequest):

  • UIProcess/WebPageProxy.h:
  • WebKit2.xcodeproj/project.pbxproj:
Location:
trunk/Source/WebKit2
Files:
1 added
7 edited
2 copied

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit2/ChangeLog

    r163061 r163062  
     12014-01-29  Anders Carlsson  <andersca@apple.com>
     2
     3        Add a NavigationState object to keep track of the navigations for a given page
     4        https://bugs.webkit.org/show_bug.cgi?id=127884
     5
     6        Reviewed by Sam Weinig.
     7
     8        * UIProcess/API/Cocoa/WKNavigation.mm:
     9        (-[WKNavigation request]):
     10        (-[WKNavigation setRequest:]):
     11        * UIProcess/API/Cocoa/WKNavigationInternal.h:
     12        * UIProcess/API/Cocoa/WKWebView.mm:
     13        (-[WKWebView initWithFrame:configuration:]):
     14        (-[WKWebView loadRequest:]):
     15        * UIProcess/Cocoa/NavigationState.h: Copied from Source/WebKit2/UIProcess/API/Cocoa/WKNavigation.mm.
     16        * UIProcess/Cocoa/NavigationState.mm: Copied from Source/WebKit2/UIProcess/API/Cocoa/WKNavigation.mm.
     17        (WebKit::NavigationState::NavigationState):
     18        (WebKit::NavigationState::~NavigationState):
     19        (WebKit::NavigationState::createLoadRequestNavigation):
     20        * UIProcess/WebPageProxy.cpp:
     21        (WebKit::WebPageProxy::loadRequest):
     22        * UIProcess/WebPageProxy.h:
     23        * WebKit2.xcodeproj/project.pbxproj:
     24
    1252014-01-29  Gavin Barraclough  <barraclough@apple.com>
    226
  • trunk/Source/WebKit2/UIProcess/API/Cocoa/WKNavigation.mm

    r163053 r163062  
    3535}
    3636
    37 - (instancetype)initWithRequest:(NSURLRequest *)request
    38 {
    39     if (!(self = [super init]))
    40         return nil;
    41 
    42     _request = adoptNS([request copy]);
    43 
    44     return self;
    45 }
    46 
    4737- (NSURLRequest *)request
    4838{
     
    5040}
    5141
     42- (void)setRequest:(NSURLRequest *)request
     43{
     44    _request = adoptNS([request copy]);
     45}
     46
    5247@end
    5348
  • trunk/Source/WebKit2/UIProcess/API/Cocoa/WKNavigationInternal.h

    r163053 r163062  
    3030@interface WKNavigation ()
    3131
    32 - (instancetype)initWithRequest:(NSURLRequest *)request;
     32@property (nonatomic, readwrite, copy) NSURLRequest *request;
    3333
    3434@end
  • trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm

    r163053 r163062  
    2929#if WK_API_ENABLED
    3030
     31#import "NavigationState.h"
    3132#import "WKNavigationInternal.h"
    3233#import "WKProcessClass.h"
     
    5657@implementation WKWebView {
    5758    RetainPtr<WKWebViewConfiguration> _configuration;
     59    std::unique_ptr<WebKit::NavigationState> _navigationState;
     60
    5861    RefPtr<WebKit::WebPageProxy> _page;
    5962
     
    8588    if (![_configuration processClass])
    8689        [_configuration setProcessClass:adoptNS([[WKProcessClass alloc] init]).get()];
     90
     91    _navigationState = std::make_unique<WebKit::NavigationState>(self);
    8792
    8893    CGRect bounds = self.bounds;
     
    124129- (WKNavigation *)loadRequest:(NSURLRequest *)request
    125130{
    126     _page->loadRequest(request);
    127 
    128     return [[[WKNavigation alloc] initWithRequest:request] autorelease];
     131    uint64_t navigationID = _page->loadRequest(request);
     132    auto navigation = _navigationState->createLoadRequestNavigation(navigationID, request);
     133
     134    return [navigation.leakRef() autorelease];
    129135}
    130136
  • trunk/Source/WebKit2/UIProcess/Cocoa/NavigationState.h

    r163061 r163062  
    2424 */
    2525
    26 #import "config.h"
    27 #import "WKNavigation.h"
     26#ifndef NavigationState_h
     27#define NavigationState_h
    2828
     29#import <wtf/HashMap.h>
    2930#import <wtf/RetainPtr.h>
    3031
    31 #if WK_API_ENABLED
     32OBJC_CLASS WKNavigation;
     33OBJC_CLASS WKWebView;
    3234
    33 @implementation WKNavigation {
    34     RetainPtr<NSURLRequest> _request;
    35 }
     35namespace WebKit {
    3636
    37 - (instancetype)initWithRequest:(NSURLRequest *)request
    38 {
    39     if (!(self = [super init]))
    40         return nil;
     37class NavigationState {
     38public:
     39    explicit NavigationState(WKWebView *);
     40    ~NavigationState();
    4141
    42     _request = adoptNS([request copy]);
     42    RetainPtr<WKNavigation> createLoadRequestNavigation(uint64_t navigationID, NSURLRequest *);
    4343
    44     return self;
    45 }
     44private:
     45    HashMap<uint64_t, RetainPtr<WKNavigation>> m_navigations;
     46};
    4647
    47 - (NSURLRequest *)request
    48 {
    49     return _request.get();
    50 }
     48} // namespace WebKit
    5149
    52 @end
    53 
    54 #endif
     50#endif // NavigationState_h
  • trunk/Source/WebKit2/UIProcess/Cocoa/NavigationState.mm

    r163061 r163062  
    2525
    2626#import "config.h"
    27 #import "WKNavigation.h"
     27#import "NavigationState.h"
    2828
    29 #import <wtf/RetainPtr.h>
     29#import "WKNavigationInternal.h"
    3030
    31 #if WK_API_ENABLED
     31namespace WebKit {
    3232
    33 @implementation WKNavigation {
    34     RetainPtr<NSURLRequest> _request;
     33NavigationState::NavigationState(WKWebView *webView)
     34{
    3535}
    3636
    37 - (instancetype)initWithRequest:(NSURLRequest *)request
     37NavigationState::~NavigationState()
    3838{
    39     if (!(self = [super init]))
    40         return nil;
    41 
    42     _request = adoptNS([request copy]);
    43 
    44     return self;
    4539}
    4640
    47 - (NSURLRequest *)request
     41RetainPtr<WKNavigation> NavigationState::createLoadRequestNavigation(uint64_t navigationID, NSURLRequest *request)
    4842{
    49     return _request.get();
     43    ASSERT(!m_navigations.contains(navigationID));
     44
     45    RetainPtr<WKNavigation> navigation = adoptNS([[WKNavigation alloc] init]);
     46    [navigation setRequest:request];
     47
     48    // FIXME: We need to remove the navigation when we're done with it!
     49    m_navigations.set(navigationID, navigation);
     50
     51    return navigation;
    5052}
    5153
    52 @end
    53 
    54 #endif
     54} // namespace WebKit
  • trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp

    r163061 r163062  
    609609}
    610610
    611 void WebPageProxy::loadRequest(const ResourceRequest& request, API::Object* userData)
    612 {
     611uint64_t WebPageProxy::loadRequest(const ResourceRequest& request, API::Object* userData)
     612{
     613    uint64_t navigationID = generateNavigationID();
     614
    613615    auto transaction = m_pageLoadState.transaction();
    614616
     
    622624    if (createdExtension)
    623625        m_process->willAcquireUniversalFileReadSandboxExtension();
    624     m_process->send(Messages::WebPage::LoadRequest(generateNavigationID(), request, sandboxExtensionHandle, WebContextUserMessageEncoder(userData, process())), m_pageID);
     626    m_process->send(Messages::WebPage::LoadRequest(navigationID, request, sandboxExtensionHandle, WebContextUserMessageEncoder(userData, process())), m_pageID);
    625627    m_process->responsivenessTimer()->start();
     628
     629    return navigationID;
    626630}
    627631
  • trunk/Source/WebKit2/UIProcess/WebPageProxy.h

    r163060 r163062  
    381381    bool isClosed() const { return m_isClosed; }
    382382
    383     void loadRequest(const WebCore::ResourceRequest&, API::Object* userData = nullptr);
     383    uint64_t loadRequest(const WebCore::ResourceRequest&, API::Object* userData = nullptr);
    384384    void loadFile(const String& fileURL, const String& resourceDirectoryURL, API::Object* userData = nullptr);
    385385    void loadData(API::Data*, const String& MIMEType, const String& encoding, const String& baseURL, API::Object* userData = nullptr);
  • trunk/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj

    r163053 r163062  
    292292                1AB8A1F818400BB800E9AE69 /* WKPageContextMenuClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 1AB8A1F718400BB800E9AE69 /* WKPageContextMenuClient.h */; settings = {ATTRIBUTES = (Private, ); }; };
    293293                1ABC3DF11899C6B6004F0626 /* WKNavigationInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 1ABC3DF01899C6B6004F0626 /* WKNavigationInternal.h */; };
     294                1ABC3DF51899E437004F0626 /* NavigationState.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1ABC3DF31899E437004F0626 /* NavigationState.mm */; };
     295                1ABC3DF61899E437004F0626 /* NavigationState.h in Headers */ = {isa = PBXBuildFile; fileRef = 1ABC3DF41899E437004F0626 /* NavigationState.h */; };
    294296                1AC1336718565B5700F3EC05 /* UserData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1AC1336518565B5700F3EC05 /* UserData.cpp */; };
    295297                1AC1336818565B5700F3EC05 /* UserData.h in Headers */ = {isa = PBXBuildFile; fileRef = 1AC1336618565B5700F3EC05 /* UserData.h */; };
     
    19371939                1AB8A1F718400BB800E9AE69 /* WKPageContextMenuClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WKPageContextMenuClient.h; sourceTree = "<group>"; };
    19381940                1ABC3DF01899C6B6004F0626 /* WKNavigationInternal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WKNavigationInternal.h; sourceTree = "<group>"; };
     1941                1ABC3DF31899E437004F0626 /* NavigationState.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = NavigationState.mm; sourceTree = "<group>"; };
     1942                1ABC3DF41899E437004F0626 /* NavigationState.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NavigationState.h; sourceTree = "<group>"; };
    19391943                1AC1336518565B5700F3EC05 /* UserData.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = UserData.cpp; sourceTree = "<group>"; };
    19401944                1AC1336618565B5700F3EC05 /* UserData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UserData.h; sourceTree = "<group>"; };
     
    39513955                        sourceTree = "<group>";
    39523956                };
     3957                1ABC3DF21899E415004F0626 /* Cocoa */ = {
     3958                        isa = PBXGroup;
     3959                        children = (
     3960                                1ABC3DF41899E437004F0626 /* NavigationState.h */,
     3961                                1ABC3DF31899E437004F0626 /* NavigationState.mm */,
     3962                        );
     3963                        path = Cocoa;
     3964                        sourceTree = "<group>";
     3965                };
    39533966                1AE00D6818327C1200087DD7 /* IPC */ = {
    39543967                        isa = PBXGroup;
     
    48784891                                512F588D12A8836F00629530 /* Authentication */,
    48794892                                51B3004D12529CF5000B5CA0 /* cf */,
     4893                                1ABC3DF21899E415004F0626 /* Cocoa */,
    48804894                                517DD5BB180DA7C40081660B /* Databases */,
    48814895                                1AB7D4C71288AA9A00CFD08C /* Downloads */,
     
    61736187                                0FB659231208B4DB0044816C /* DrawingAreaInfo.h in Headers */,
    61746188                                1A64229A12DD029200CAAE2C /* DrawingAreaMessages.h in Headers */,
     6189                                1ABC3DF61899E437004F0626 /* NavigationState.h in Headers */,
    61756190                                BC2652171182608100243E12 /* DrawingAreaProxy.h in Headers */,
    61766191                                1A64230912DD09EB00CAAE2C /* DrawingAreaProxyMessages.h in Headers */,
     
    80648079                                BC407601124FF0270068F20A /* WKNumber.cpp in Sources */,
    80658080                                7CD5EBB81746A15B000C1C45 /* WKObjCTypeWrapperRef.mm in Sources */,
     8081                                1ABC3DF51899E437004F0626 /* NavigationState.mm in Sources */,
    80668082                                BC85806312B8505700EDEB2E /* WKOpenPanelParameters.cpp in Sources */,
    80678083                                BC85806212B8505700EDEB2E /* WKOpenPanelResultListener.cpp in Sources */,
Note: See TracChangeset for help on using the changeset viewer.