Changeset 196341 in webkit


Ignore:
Timestamp:
Feb 9, 2016 3:04:27 PM (8 years ago)
Author:
andersca@apple.com
Message:

Add SPI to remove individual user scripts or user style sheets
https://bugs.webkit.org/show_bug.cgi?id=154046
rdar://problem/23596352

Reviewed by Sam Weinig.

  • UIProcess/API/Cocoa/WKUserContentController.mm:

(-[WKUserContentController _removeUserScript:]):
(-[WKUserContentController _userStyleSheets]):
(-[WKUserContentController _addUserStyleSheet:]):
(-[WKUserContentController _removeUserStyleSheet:]):

  • UIProcess/API/Cocoa/WKUserContentControllerPrivate.h:
  • UIProcess/UserContent/WebUserContentControllerProxy.cpp:

(WebKit::WebUserContentControllerProxy::WebUserContentControllerProxy):
(WebKit::WebUserContentControllerProxy::addProcess):
(WebKit::WebUserContentControllerProxy::removeUserScript):
(WebKit::WebUserContentControllerProxy::addUserStyleSheet):
(WebKit::WebUserContentControllerProxy::removeUserStyleSheet):
(WebKit::WebUserContentControllerProxy::removeAllUserStyleSheets):

  • UIProcess/UserContent/WebUserContentControllerProxy.h:

(WebKit::WebUserContentControllerProxy::userStyleSheets):

  • WebProcess/UserContent/WebUserContentController.cpp:

(WebKit::WebUserContentController::removeUserScript):
(WebKit::WebUserContentController::removeUserStyleSheet):

  • WebProcess/UserContent/WebUserContentController.h:
  • WebProcess/UserContent/WebUserContentController.messages.in:
Location:
trunk/Source/WebKit2
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit2/ChangeLog

    r196331 r196341  
     12016-02-09  Anders Carlsson  <andersca@apple.com>
     2
     3        Add SPI to remove individual user scripts or user style sheets
     4        https://bugs.webkit.org/show_bug.cgi?id=154046
     5        rdar://problem/23596352
     6
     7        Reviewed by Sam Weinig.
     8
     9        * UIProcess/API/Cocoa/WKUserContentController.mm:
     10        (-[WKUserContentController _removeUserScript:]):
     11        (-[WKUserContentController _userStyleSheets]):
     12        (-[WKUserContentController _addUserStyleSheet:]):
     13        (-[WKUserContentController _removeUserStyleSheet:]):
     14        * UIProcess/API/Cocoa/WKUserContentControllerPrivate.h:
     15        * UIProcess/UserContent/WebUserContentControllerProxy.cpp:
     16        (WebKit::WebUserContentControllerProxy::WebUserContentControllerProxy):
     17        (WebKit::WebUserContentControllerProxy::addProcess):
     18        (WebKit::WebUserContentControllerProxy::removeUserScript):
     19        (WebKit::WebUserContentControllerProxy::addUserStyleSheet):
     20        (WebKit::WebUserContentControllerProxy::removeUserStyleSheet):
     21        (WebKit::WebUserContentControllerProxy::removeAllUserStyleSheets):
     22        * UIProcess/UserContent/WebUserContentControllerProxy.h:
     23        (WebKit::WebUserContentControllerProxy::userStyleSheets):
     24        * WebProcess/UserContent/WebUserContentController.cpp:
     25        (WebKit::WebUserContentController::removeUserScript):
     26        (WebKit::WebUserContentController::removeUserStyleSheet):
     27        * WebProcess/UserContent/WebUserContentController.h:
     28        * WebProcess/UserContent/WebUserContentController.messages.in:
     29
    1302016-02-07  Gavin Barraclough  <barraclough@apple.com>
    231
  • trunk/Source/WebKit2/UIProcess/API/Cocoa/WKUserContentController.mm

    r191545 r196341  
    127127@implementation WKUserContentController (WKPrivate)
    128128
     129- (void)_removeUserScript:(WKUserScript *)userScript
     130{
     131    _userContentControllerProxy->removeUserScript(*userScript->_userScript);
     132}
     133
    129134- (void)_addUserContentFilter:(_WKUserContentFilter *)userContentFilter
    130135{
     
    148153}
    149154
     155- (NSArray *)_userStyleSheets
     156{
     157    return wrapper(_userContentControllerProxy->userStyleSheets());
     158}
     159
    150160- (void)_addUserStyleSheet:(_WKUserStyleSheet *)userStyleSheet
    151161{
    152     _userContentControllerProxy->addUserStyleSheet(userStyleSheet->_userStyleSheet->userStyleSheet());
     162    _userContentControllerProxy->addUserStyleSheet(*userStyleSheet->_userStyleSheet);
     163}
     164
     165- (void)_removeUserStyleSheet:(_WKUserStyleSheet *)userStyleSheet
     166{
     167    _userContentControllerProxy->removeUserStyleSheet(*userStyleSheet->_userStyleSheet);
    153168}
    154169
  • trunk/Source/WebKit2/UIProcess/API/Cocoa/WKUserContentControllerPrivate.h

    r191545 r196341  
    2828#if WK_API_ENABLED
    2929
     30@class WKUserScript;
    3031@class _WKUserContentFilter;
    3132@class _WKUserStyleSheet;
     
    3334@interface WKUserContentController (WKPrivate)
    3435
     36- (void)_removeUserScript:(WKUserScript *)userScript WK_AVAILABLE(WK_MAC_TBA, WK_IOS_TBA);
     37
    3538- (void)_addUserContentFilter:(_WKUserContentFilter *)userContentFilter WK_AVAILABLE(10_11, 9_0);
    3639- (void)_removeUserContentFilter:(NSString *)userContentFilterName WK_AVAILABLE(10_11, 9_0);
    3740- (void)_removeAllUserContentFilters WK_AVAILABLE(10_11, 9_0);
    3841
     42@property (nonatomic, readonly, copy) WK_ARRAY(_WKUserStyleSheet *) *_userStyleSheets WK_AVAILABLE(WK_MAC_TBA, WK_IOS_TBA);
    3943- (void)_addUserStyleSheet:(_WKUserStyleSheet *)userStyleSheet WK_AVAILABLE(WK_MAC_TBA, WK_IOS_TBA);
     44- (void)_removeUserStyleSheet:(_WKUserStyleSheet *)userStyleSheet WK_AVAILABLE(WK_MAC_TBA, WK_IOS_TBA);
    4045- (void)_removeAllUserStyleSheets WK_AVAILABLE(WK_MAC_TBA, WK_IOS_TBA);
    4146
  • trunk/Source/WebKit2/UIProcess/UserContent/WebUserContentControllerProxy.cpp

    r195235 r196341  
    2929#include "APIArray.h"
    3030#include "APIUserScript.h"
     31#include "APIUserStyleSheet.h"
    3132#include "DataReference.h"
    3233#include "WebProcessProxy.h"
     
    5354    : m_identifier(generateIdentifier())
    5455    , m_userScripts(API::Array::create())
     56    , m_userStyleSheets(API::Array::create())
    5557{
    5658}
     
    7880    webProcessProxy.connection()->send(Messages::WebUserContentController::AddUserScripts(userScripts), m_identifier);
    7981
    80     webProcessProxy.connection()->send(Messages::WebUserContentController::AddUserStyleSheets(m_userStyleSheets), m_identifier);
     82    Vector<WebCore::UserStyleSheet> userStyleSheets;
     83    for (const auto& userStyleSheet : m_userScripts->elementsOfType<API::UserStyleSheet>())
     84        userStyleSheets.append(userStyleSheet->userStyleSheet());
     85    webProcessProxy.connection()->send(Messages::WebUserContentController::AddUserStyleSheets(userStyleSheets), m_identifier);
    8186
    8287    Vector<WebScriptMessageHandlerHandle> messageHandlerHandles;
     
    109114}
    110115
     116void WebUserContentControllerProxy::removeUserScript(const API::UserScript& userScript)
     117{
     118    for (WebProcessProxy* process : m_processes)
     119        process->connection()->send(Messages::WebUserContentController::RemoveUserScript({ userScript.userScript().url().string() }), m_identifier);
     120
     121    m_userScripts->elements().removeAll(&userScript);
     122}
     123
    111124void WebUserContentControllerProxy::removeAllUserScripts()
    112125{
     
    117130}
    118131
    119 void WebUserContentControllerProxy::addUserStyleSheet(WebCore::UserStyleSheet userStyleSheet)
    120 {
    121     m_userStyleSheets.append(WTFMove(userStyleSheet));
    122 
    123     for (WebProcessProxy* process : m_processes)
    124         process->connection()->send(Messages::WebUserContentController::AddUserStyleSheets({ m_userStyleSheets.last() }), m_identifier);
     132void WebUserContentControllerProxy::addUserStyleSheet(API::UserStyleSheet& userStyleSheet)
     133{
     134    m_userStyleSheets->elements().append(&userStyleSheet);
     135
     136    for (WebProcessProxy* process : m_processes)
     137        process->connection()->send(Messages::WebUserContentController::AddUserStyleSheets({ userStyleSheet.userStyleSheet() }), m_identifier);
     138}
     139
     140void WebUserContentControllerProxy::removeUserStyleSheet(const API::UserStyleSheet& userStyleSheet)
     141{
     142    for (WebProcessProxy* process : m_processes)
     143        process->connection()->send(Messages::WebUserContentController::RemoveUserStyleSheet({ userStyleSheet.userStyleSheet().url().string() }), m_identifier);
     144
     145    m_userStyleSheets->elements().removeAll(&userStyleSheet);
    125146}
    126147
    127148void WebUserContentControllerProxy::removeAllUserStyleSheets()
    128149{
    129     m_userStyleSheets.clear();
     150    m_userStyleSheets->elements().clear();
    130151
    131152    for (WebProcessProxy* process : m_processes)
  • trunk/Source/WebKit2/UIProcess/UserContent/WebUserContentControllerProxy.h

    r189313 r196341  
    4242class UserContentExtension;
    4343class UserScript;
     44class UserStyleSheet;
    4445}
    4546
     
    4950
    5051namespace WebCore {
    51 class UserScript;
    52 class UserStyleSheet;
    5352struct SecurityOriginData;
    5453}
     
    7574    API::Array& userScripts() { return m_userScripts.get(); }
    7675    void addUserScript(API::UserScript&);
     76    void removeUserScript(const API::UserScript&);
    7777    void removeAllUserScripts();
    7878
    79     void addUserStyleSheet(WebCore::UserStyleSheet);
     79    API::Array& userStyleSheets() { return m_userStyleSheets.get(); }
     80    void addUserStyleSheet(API::UserStyleSheet&);
     81    void removeUserStyleSheet(const API::UserStyleSheet&);
    8082    void removeAllUserStyleSheets();
    8183
     
    99101    HashSet<WebProcessProxy*> m_processes;   
    100102    Ref<API::Array> m_userScripts;
    101     Vector<WebCore::UserStyleSheet> m_userStyleSheets;
     103    Ref<API::Array> m_userStyleSheets;
    102104    HashMap<uint64_t, RefPtr<WebScriptMessageHandler>> m_scriptMessageHandlers;
    103105
  • trunk/Source/WebKit2/WebProcess/UserContent/WebUserContentController.cpp

    r194496 r196341  
    9191}
    9292
     93void WebUserContentController::removeUserScript(const String& urlString)
     94{
     95    m_userContentController->removeUserScript(mainThreadNormalWorld(), URL(URL(), urlString));
     96}
     97
    9398void WebUserContentController::removeAllUserScripts()
    9499{
     
    102107            std::make_unique<WebCore::UserStyleSheet>(userStyleSheet), InjectInExistingDocuments);
    103108    }
     109}
     110
     111void WebUserContentController::removeUserStyleSheet(const String& urlString)
     112{
     113    m_userContentController->removeUserStyleSheet(mainThreadNormalWorld(), URL(URL(), urlString));
    104114}
    105115
  • trunk/Source/WebKit2/WebProcess/UserContent/WebUserContentController.h

    r181200 r196341  
    5454
    5555    void addUserScripts(const Vector<WebCore::UserScript>&);
     56    void removeUserScript(const String& urlString);
    5657    void removeAllUserScripts();
    5758
    5859    void addUserStyleSheets(const Vector<WebCore::UserStyleSheet>&);
     60    void removeUserStyleSheet(const String& urlString);
    5961    void removeAllUserStyleSheets();
    6062
  • trunk/Source/WebKit2/WebProcess/UserContent/WebUserContentController.messages.in

    r181200 r196341  
    2626messages -> WebUserContentController {
    2727    AddUserScripts(Vector<WebCore::UserScript> userScripts);
     28    RemoveUserScript(String url);
    2829    RemoveAllUserScripts();
    2930
    3031    AddUserStyleSheets(Vector<WebCore::UserStyleSheet> userStyleSheets);
     32    RemoveUserStyleSheet(String url);
    3133    RemoveAllUserStyleSheets();
    3234
Note: See TracChangeset for help on using the changeset viewer.