Skip to content

Commit

Permalink
Reload without content blockers may not appear for extensions that us…
Browse files Browse the repository at this point in the history
…e DNR

https://webkit.org/b/270552
rdar://124033486

Reviewed by Timothy Hatcher.

Clients need to be aware of whether or not a web extension context has any
content modification rules rules. This patch adds a new property to expose
that information.

* Source/WebKit/UIProcess/API/Cocoa/_WKWebExtensionContext.h:
* Source/WebKit/UIProcess/API/Cocoa/_WKWebExtensionContext.mm:
(-[_WKWebExtensionContext hasContentModificationRules]):
* Source/WebKit/UIProcess/Extensions/Cocoa/WebExtensionContextCocoa.mm:
(WebKit::WebExtensionContext::hasContentModificationRules):
* Source/WebKit/UIProcess/Extensions/WebExtensionContext.h:

Canonical link: https://commits.webkit.org/275768@main
  • Loading branch information
Elijah Sawyers authored and xeenon committed Mar 7, 2024
1 parent 1ca2cd7 commit 97e744c
Show file tree
Hide file tree
Showing 5 changed files with 30 additions and 0 deletions.
7 changes: 7 additions & 0 deletions Source/WebKit/UIProcess/API/Cocoa/_WKWebExtensionContext.h
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@
#if TARGET_OS_IPHONE
@class UIMenuElement;
#else
@class NSEvent;
@class NSMenuItem;
#endif

Expand Down Expand Up @@ -365,6 +366,12 @@ WK_CLASS_AVAILABLE(macos(13.3), ios(16.4))
*/
- (BOOL)hasInjectedContentForURL:(NSURL *)url;

/*!
@abstract A boolean value indicating whether the extension includes rules used for content modification or blocking.
@discussion This includes both static rules available in the extension's manifest and dynamic rules applied during a browsing session.
*/
@property (nonatomic, readonly) BOOL hasContentModificationRules;

/*!
@abstract Checks the specified permission against the currently denied, granted, and requested permissions.
@param permission The permission for which to return the status.
Expand Down
10 changes: 10 additions & 0 deletions Source/WebKit/UIProcess/API/Cocoa/_WKWebExtensionContext.mm
Original file line number Diff line number Diff line change
Expand Up @@ -510,6 +510,11 @@ - (BOOL)hasInjectedContentForURL:(NSURL *)url
return _webExtensionContext->hasInjectedContentForURL(url);
}

- (BOOL)hasContentModificationRules
{
return _webExtensionContext->hasContentModificationRules();
}

- (_WKWebExtensionAction *)actionForTab:(id<_WKWebExtensionTab>)tab
{
if (tab)
Expand Down Expand Up @@ -1036,6 +1041,11 @@ - (BOOL)hasInjectedContentForURL:(NSURL *)url
return NO;
}

- (BOOL)hasContentModificationRules
{
return NO;
}

- (_WKWebExtensionAction *)actionForTab:(id<_WKWebExtensionTab>)tab NS_SWIFT_NAME(action(for:))
{
return nil;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3704,6 +3704,11 @@ void effectiveAppearanceDidChange(Inspector::ExtensionAppearance appearance) ove
});
}

bool WebExtensionContext::hasContentModificationRules()
{
return declarativeNetRequestEnabledRulesetCount() || !m_sessionRulesIDs.isEmpty() || !m_dynamicRulesIDs.isEmpty();
}

static NSString *computeStringHashForContentBlockerRules(NSString *rules)
{
SHA1 sha1;
Expand Down
2 changes: 2 additions & 0 deletions Source/WebKit/UIProcess/Extensions/WebExtensionContext.h
Original file line number Diff line number Diff line change
Expand Up @@ -285,6 +285,8 @@ class WebExtensionContext : public API::ObjectImpl<API::Object::Type::WebExtensi
bool hasInjectedContentForURL(const URL&);
bool hasInjectedContent();

bool hasContentModificationRules();

URL optionsPageURL() const;
URL overrideNewTabPageURL() const;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -526,9 +526,12 @@
// Grant the declarativeNetRequest permission.
[manager.get().context setPermissionStatus:_WKWebExtensionContextPermissionStatusGrantedExplicitly forPermission:_WKWebExtensionPermissionDeclarativeNetRequest];

EXPECT_FALSE(manager.get().context.hasContentModificationRules);

[manager loadAndRun];

EXPECT_NS_EQUAL(manager.get().yieldMessage, @"Load Tab");
EXPECT_TRUE(manager.get().context.hasContentModificationRules);

auto webView = manager.get().defaultTab.mainWebView;
auto navigationDelegate = adoptNS([TestNavigationDelegate new]);
Expand Down Expand Up @@ -582,9 +585,12 @@
// Grant the declarativeNetRequest permission.
[manager.get().context setPermissionStatus:_WKWebExtensionContextPermissionStatusGrantedExplicitly forPermission:_WKWebExtensionPermissionDeclarativeNetRequest];

EXPECT_FALSE(manager.get().context.hasContentModificationRules);

[manager loadAndRun];

EXPECT_NS_EQUAL(manager.get().yieldMessage, @"Unload extension");
EXPECT_TRUE(manager.get().context.hasContentModificationRules);

auto *storageDirectory = manager.get().controller.configuration._storageDirectoryPath;
storageDirectory = [storageDirectory stringByAppendingPathComponent:manager.get().context.uniqueIdentifier];
Expand Down

0 comments on commit 97e744c

Please sign in to comment.