Skip to content

Commit ebfe8c5

Browse files
hashseedDevtools-frontend LUCI CQ
authored andcommitted
Keep Network blocking setting in sync with checkbox
Previously, changing the setting via command menu does not dispatch a BLOCKED_PATTERNS_CHANGED event. Therefore the checkbox is not updated. With this change, changing the setting dispatches a B_P_C event, which then correctly updates the checkbox and the list of blocked patterns. Fixed: 378058733 Change-Id: I532cf323b3a5739b029b501ee4698ea6a19168d2 Reviewed-on: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/6022977 Auto-Submit: Yang Guo <[email protected]> Reviewed-by: Danil Somsikov <[email protected]> Commit-Queue: Yang Guo <[email protected]>
1 parent dadf388 commit ebfe8c5

File tree

2 files changed

+56
-4
lines changed

2 files changed

+56
-4
lines changed

front_end/core/sdk/NetworkManager.test.ts

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,56 @@ describeWithMockConnection('MultitargetNetworkManager', () => {
5858
}
5959
assert.isTrue(expectedCall.calledOnceWith({origin: 'https://example.com'}));
6060
});
61+
62+
it('blocking settings are consistent after change', async () => {
63+
const multitargetNetworkManager = SDK.NetworkManager.MultitargetNetworkManager.instance({forceNew: true});
64+
let eventCounter = 0;
65+
multitargetNetworkManager.addEventListener(
66+
SDK.NetworkManager.MultitargetNetworkManager.Events.BLOCKED_PATTERNS_CHANGED, () => eventCounter++);
67+
const blockingEnabledSetting = Common.Settings.Settings.instance().moduleSetting('request-blocking-enabled');
68+
const blockedPatternsSetting: Common.Settings.Setting<SDK.NetworkManager.BlockedPattern[]> =
69+
Common.Settings.Settings.instance().createSetting('network-blocked-patterns', []);
70+
71+
// Change blocking setting via Common.Settings.Settings.
72+
assert.isFalse(multitargetNetworkManager.isBlocking());
73+
assert.isFalse(multitargetNetworkManager.blockingEnabled());
74+
blockingEnabledSetting.set(true);
75+
assert.strictEqual(eventCounter, 1);
76+
assert.isFalse(multitargetNetworkManager.isBlocking());
77+
assert.isTrue(multitargetNetworkManager.blockingEnabled());
78+
blockedPatternsSetting.set([{url: 'example.com', enabled: true}]);
79+
assert.strictEqual(eventCounter, 2);
80+
assert.isTrue(multitargetNetworkManager.isBlocking());
81+
assert.isTrue(multitargetNetworkManager.blockingEnabled());
82+
blockedPatternsSetting.set([]);
83+
assert.strictEqual(eventCounter, 3);
84+
assert.isFalse(multitargetNetworkManager.isBlocking());
85+
assert.isTrue(multitargetNetworkManager.blockingEnabled());
86+
blockingEnabledSetting.set(false);
87+
assert.strictEqual(eventCounter, 4);
88+
assert.isFalse(multitargetNetworkManager.isBlocking());
89+
assert.isFalse(multitargetNetworkManager.blockingEnabled());
90+
91+
// Change blocking setting via MultitargetNetworkManager.
92+
assert.isFalse(multitargetNetworkManager.isBlocking());
93+
assert.isFalse(multitargetNetworkManager.blockingEnabled());
94+
multitargetNetworkManager.setBlockingEnabled(true);
95+
assert.strictEqual(eventCounter, 5);
96+
assert.isFalse(multitargetNetworkManager.isBlocking());
97+
assert.isTrue(multitargetNetworkManager.blockingEnabled());
98+
multitargetNetworkManager.setBlockedPatterns([{url: 'example.com', enabled: true}]);
99+
assert.strictEqual(eventCounter, 6);
100+
assert.isTrue(multitargetNetworkManager.isBlocking());
101+
assert.isTrue(multitargetNetworkManager.blockingEnabled());
102+
multitargetNetworkManager.setBlockedPatterns([]);
103+
assert.strictEqual(eventCounter, 7);
104+
assert.isFalse(multitargetNetworkManager.isBlocking());
105+
assert.isTrue(multitargetNetworkManager.blockingEnabled());
106+
multitargetNetworkManager.setBlockingEnabled(false);
107+
assert.strictEqual(eventCounter, 8);
108+
assert.isFalse(multitargetNetworkManager.isBlocking());
109+
assert.isFalse(multitargetNetworkManager.blockingEnabled());
110+
});
61111
});
62112

63113
describe('NetworkDispatcher', () => {

front_end/core/sdk/NetworkManager.ts

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1295,8 +1295,14 @@ export class MultitargetNetworkManager extends Common.ObjectWrapper.ObjectWrappe
12951295
this.#updatingInterceptionPatternsPromise = null;
12961296

12971297
// TODO(allada) Remove these and merge it with request interception.
1298+
const blockedPatternChanged: () => void = () => {
1299+
this.updateBlockedPatterns();
1300+
this.dispatchEventToListeners(MultitargetNetworkManager.Events.BLOCKED_PATTERNS_CHANGED);
1301+
};
12981302
this.#blockingEnabledSetting = Common.Settings.Settings.instance().moduleSetting('request-blocking-enabled');
1303+
this.#blockingEnabledSetting.addChangeListener(blockedPatternChanged);
12991304
this.#blockedPatternsSetting = Common.Settings.Settings.instance().createSetting('network-blocked-patterns', []);
1305+
this.#blockedPatternsSetting.addChangeListener(blockedPatternChanged);
13001306
this.#effectiveBlockedURLs = [];
13011307
this.updateBlockedPatterns();
13021308

@@ -1537,17 +1543,13 @@ export class MultitargetNetworkManager extends Common.ObjectWrapper.ObjectWrappe
15371543

15381544
setBlockedPatterns(patterns: BlockedPattern[]): void {
15391545
this.#blockedPatternsSetting.set(patterns);
1540-
this.updateBlockedPatterns();
1541-
this.dispatchEventToListeners(MultitargetNetworkManager.Events.BLOCKED_PATTERNS_CHANGED);
15421546
}
15431547

15441548
setBlockingEnabled(enabled: boolean): void {
15451549
if (this.#blockingEnabledSetting.get() === enabled) {
15461550
return;
15471551
}
15481552
this.#blockingEnabledSetting.set(enabled);
1549-
this.updateBlockedPatterns();
1550-
this.dispatchEventToListeners(MultitargetNetworkManager.Events.BLOCKED_PATTERNS_CHANGED);
15511553
}
15521554

15531555
private updateBlockedPatterns(): void {

0 commit comments

Comments
 (0)