Changeset 164132 in webkit


Ignore:
Timestamp:
Feb 14, 2014 2:09:57 PM (10 years ago)
Author:
andersca@apple.com
Message:

Add WKBackForwardListDidChangeNotification
https://bugs.webkit.org/show_bug.cgi?id=128839

Reviewed by Dan Bernstein.

Also, make LoaderClient::didChangeBackForwardList take a Vector of WebBackForwardListItems
instead of a pointer to a Vector of API::Objects.

  • Shared/API/Cocoa/WKFoundation.h:
  • UIProcess/API/APILoaderClient.h:

(API::LoaderClient::didChangeBackForwardList):

  • UIProcess/API/C/WKPage.cpp:

(WKPageSetPageLoaderClient):

  • UIProcess/API/Cocoa/WKBackForwardList.h:
  • UIProcess/API/Cocoa/WKBackForwardList.mm:
  • UIProcess/Cocoa/NavigationState.h:
  • UIProcess/Cocoa/NavigationState.mm:

(WebKit::NavigationState::LoaderClient::didChangeBackForwardList):

  • UIProcess/WebBackForwardList.cpp:

(WebKit::WebBackForwardList::addItem):
(WebKit::WebBackForwardList::goToItem):
(WebKit::WebBackForwardList::clear):

  • UIProcess/WebPageProxy.cpp:

(WebKit::WebPageProxy::didChangeBackForwardList):

  • UIProcess/WebPageProxy.h:
Location:
trunk/Source/WebKit2
Files:
11 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit2/ChangeLog

    r164126 r164132  
     12014-02-14  Anders Carlsson  <andersca@apple.com>
     2
     3        Add WKBackForwardListDidChangeNotification
     4        https://bugs.webkit.org/show_bug.cgi?id=128839
     5
     6        Reviewed by Dan Bernstein.
     7
     8        Also, make LoaderClient::didChangeBackForwardList take a Vector of WebBackForwardListItems
     9        instead of a pointer to a Vector of API::Objects.
     10
     11        * Shared/API/Cocoa/WKFoundation.h:
     12        * UIProcess/API/APILoaderClient.h:
     13        (API::LoaderClient::didChangeBackForwardList):
     14        * UIProcess/API/C/WKPage.cpp:
     15        (WKPageSetPageLoaderClient):
     16        * UIProcess/API/Cocoa/WKBackForwardList.h:
     17        * UIProcess/API/Cocoa/WKBackForwardList.mm:
     18        * UIProcess/Cocoa/NavigationState.h:
     19        * UIProcess/Cocoa/NavigationState.mm:
     20        (WebKit::NavigationState::LoaderClient::didChangeBackForwardList):
     21        * UIProcess/WebBackForwardList.cpp:
     22        (WebKit::WebBackForwardList::addItem):
     23        (WebKit::WebBackForwardList::goToItem):
     24        (WebKit::WebBackForwardList::clear):
     25        * UIProcess/WebPageProxy.cpp:
     26        (WebKit::WebPageProxy::didChangeBackForwardList):
     27        * UIProcess/WebPageProxy.h:
     28
    1292014-02-12  Jer Noble  <jer.noble@apple.com>
    230
  • trunk/Source/WebKit2/Shared/API/Cocoa/WKFoundation.h

    r162541 r164132  
    3636#endif
    3737
     38#ifdef __cplusplus
     39#define WK_EXTERN extern "C" __attribute__((visibility ("default")))
     40#else
     41#define WK_EXTERN extern __attribute__((visibility ("default")))
     42#endif
     43
    3844#define WK_DESIGNATED_INITIALIZER
  • trunk/Source/WebKit2/UIProcess/API/APILoaderClient.h

    r163243 r164132  
    8888    virtual void processDidCrash(WebKit::WebPageProxy*) { }
    8989
    90     virtual void didChangeBackForwardList(WebKit::WebPageProxy*, WebKit::WebBackForwardListItem* addedItem, Vector<RefPtr<API::Object>>* removedItems) { }
     90    virtual void didChangeBackForwardList(WebKit::WebPageProxy*, WebKit::WebBackForwardListItem* addedItem, Vector<RefPtr<WebKit::WebBackForwardListItem>> removedItems) { }
    9191    virtual void willGoToBackForwardListItem(WebKit::WebPageProxy*, WebKit::WebBackForwardListItem*, API::Object*) { }
    9292
  • trunk/Source/WebKit2/UIProcess/API/C/WKPage.cpp

    r163821 r164132  
    896896        }
    897897
    898         virtual void didChangeBackForwardList(WebPageProxy* page, WebBackForwardListItem* addedItem, Vector<RefPtr<API::Object>>* removedItems) override
     898        virtual void didChangeBackForwardList(WebPageProxy* page, WebBackForwardListItem* addedItem, Vector<RefPtr<WebBackForwardListItem>> removedItems) override
    899899        {
    900900            if (!m_client.didChangeBackForwardList)
     
    902902
    903903            RefPtr<API::Array> removedItemsArray;
    904             if (removedItems && !removedItems->isEmpty())
    905                 removedItemsArray = API::Array::create(std::move(*removedItems));
     904            if (!removedItems.isEmpty()) {
     905                Vector<RefPtr<API::Object>> removedItemsVector;
     906                removedItemsVector.reserveInitialCapacity(removedItems.size());
     907                for (auto& removedItem : removedItems)
     908                    removedItemsVector.append(std::move(removedItem));
     909
     910                removedItemsArray = API::Array::create(std::move(removedItemsVector));
     911            }
    906912
    907913            m_client.didChangeBackForwardList(toAPI(page), toAPI(addedItem), toAPI(removedItemsArray.get()), m_client.base.clientInfo);
  • trunk/Source/WebKit2/UIProcess/API/Cocoa/WKBackForwardList.h

    r161566 r164132  
    3030#import <WebKit2/WKBackForwardListItem.h>
    3131
     32/*! Posted when a back-forward list changes. The notification object is the WKBackForwardList
     33        that changed. The <code>userInfo</code> dictionary may contain the
     34        @link WKBackForwardListAddedItemKey @/link and @link WKBackForwardListRemovedItemsKey @/link
     35        keys.
     36*/
     37WK_EXTERN NSString * const WKBackForwardListDidChangeNotification;
     38
     39/*! A key in the <code>userInfo</code> dictionary of a
     40        @link WKBackForwardListDidChangeNotification @/link, whose value is the
     41        @link WKBackForwardListItem @/link that was appended to the list.
     42*/
     43WK_EXTERN NSString * const WKBackForwardListAddedItemKey;
     44
     45
     46/*! A key in the <code>userInfo</code> dictionary of a
     47        @link WKBackForwardListDidChangeNotification @/link, whose value is an NSArray of
     48        @link WKBackForwardListItem@/link instances that were removed from the list.
     49*/
     50WK_EXTERN NSString * const WKBackForwardListRemovedItemsKey;
     51
    3252WK_API_CLASS
    3353@interface WKBackForwardList : NSObject
  • trunk/Source/WebKit2/UIProcess/API/Cocoa/WKBackForwardList.mm

    r159881 r164132  
    3131#import "WKBackForwardListItemInternal.h"
    3232#import "WKNSArray.h"
     33
     34WK_EXPORT NSString * const WKBackForwardListDidChangeNotification = @"WKBackForwardListDidChangeNotification";
     35WK_EXPORT NSString * const WKBackForwardListAddedItemKey = @"WKBackForwardListAddedItemKey";
     36WK_EXPORT NSString * const WKBackForwardListRemovedItemsKey = @"WKBackForwardListRemovedItemsKey";
    3337
    3438using namespace WebKit;
  • trunk/Source/WebKit2/UIProcess/Cocoa/NavigationState.h

    r164049 r164132  
    8585        virtual void didFailLoadWithErrorForFrame(WebPageProxy*, WebFrameProxy*, uint64_t navigationID, const WebCore::ResourceError&, API::Object*) override;
    8686        virtual void didLayout(WebKit::WebPageProxy*, WebCore::LayoutMilestones, API::Object*) override;
     87        virtual void didChangeBackForwardList(WebKit::WebPageProxy*, WebKit::WebBackForwardListItem* addedItem, Vector<RefPtr<WebKit::WebBackForwardListItem>> removedItems) override;
    8788
    8889        NavigationState& m_navigationState;
  • trunk/Source/WebKit2/UIProcess/Cocoa/NavigationState.mm

    r164111 r164132  
    3131#import "NavigationActionData.h"
    3232#import "PageLoadState.h"
     33#import "WKBackForwardListInternal.h"
     34#import "WKBackForwardListItemInternal.h"
    3335#import "WKFrameInfoInternal.h"
    3436#import "WKNavigationActionInternal.h"
     
    373375}
    374376
     377void NavigationState::LoaderClient::didChangeBackForwardList(WebKit::WebPageProxy*, WebKit::WebBackForwardListItem* addedItem, Vector<RefPtr<WebKit::WebBackForwardListItem>> removedItems)
     378{
     379    auto userInfo = adoptNS([[NSMutableDictionary alloc] init]);
     380
     381    if (addedItem)
     382        [userInfo setObject:wrapper(*addedItem) forKey:WKBackForwardListAddedItemKey];
     383
     384    if (!removedItems.isEmpty()) {
     385        Vector<id> removed;
     386        removed.reserveInitialCapacity(removedItems.size());
     387
     388        for (const auto& removedItem : removedItems)
     389            removed.uncheckedAppend(wrapper(*removedItem));
     390
     391        [userInfo setObject:adoptNS([[NSArray alloc] initWithObjects:removed.data() count:removed.size()]).get() forKey:WKBackForwardListRemovedItemsKey];
     392    }
     393
     394    [[NSNotificationCenter defaultCenter] postNotificationName:WKBackForwardListDidChangeNotification object:wrapper(m_navigationState.m_webView->_page->backForwardList()) userInfo:userInfo.get()];
     395}
     396
    375397void NavigationState::willChangeIsLoading()
    376398{
  • trunk/Source/WebKit2/UIProcess/WebBackForwardList.cpp

    r159891 r164132  
    7575        return;
    7676
    77     Vector<RefPtr<API::Object>> removedItems;
     77    Vector<RefPtr<WebBackForwardListItem>> removedItems;
    7878   
    7979    if (m_hasCurrentIndex) {
     
    128128        m_entries.insert(m_currentIndex, newItem);
    129129
    130     m_page->didChangeBackForwardList(newItem, &removedItems);
     130    m_page->didChangeBackForwardList(newItem, std::move(removedItems));
    131131}
    132132
     
    145145    if (index < m_entries.size()) {
    146146        m_currentIndex = index;
    147         m_page->didChangeBackForwardList(0, 0);
     147        m_page->didChangeBackForwardList(nullptr, { });
    148148    }
    149149}
     
    258258
    259259    RefPtr<WebBackForwardListItem> currentItem = this->currentItem();
    260     Vector<RefPtr<API::Object>> removedItems;
     260    Vector<RefPtr<WebBackForwardListItem>> removedItems;
    261261
    262262    if (!currentItem) {
     
    276276        m_entries.clear();
    277277        m_hasCurrentIndex = false;
    278         m_page->didChangeBackForwardList(0, &removedItems);
     278        m_page->didChangeBackForwardList(nullptr, std::move(removedItems));
    279279
    280280        return;
     
    303303    }
    304304
    305     m_page->didChangeBackForwardList(0, &removedItems);
     305    m_page->didChangeBackForwardList(nullptr, std::move(removedItems));
    306306}
    307307
  • trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp

    r163999 r164132  
    856856}
    857857
    858 void WebPageProxy::didChangeBackForwardList(WebBackForwardListItem* added, Vector<RefPtr<API::Object>>* removed)
    859 {
    860     m_loaderClient->didChangeBackForwardList(this, added, removed);
     858void WebPageProxy::didChangeBackForwardList(WebBackForwardListItem* added, Vector<RefPtr<WebBackForwardListItem>> removed)
     859{
     860    m_loaderClient->didChangeBackForwardList(this, added, std::move(removed));
    861861
    862862#if PLATFORM(MAC) && !PLATFORM(IOS)
  • trunk/Source/WebKit2/UIProcess/WebPageProxy.h

    r163908 r164132  
    409409    void goToBackForwardItem(WebBackForwardListItem*);
    410410    void tryRestoreScrollPosition();
    411     void didChangeBackForwardList(WebBackForwardListItem* addedItem, Vector<RefPtr<API::Object>>* removedItems);
     411    void didChangeBackForwardList(WebBackForwardListItem* addedItem, Vector<RefPtr<WebBackForwardListItem>> removed);
    412412    void willGoToBackForwardListItem(uint64_t itemID, IPC::MessageDecoder&);
    413413
Note: See TracChangeset for help on using the changeset viewer.