Skip to content

Commit 11d6160

Browse files
committed
Move Ablock manager logic to controller
1 parent edea998 commit 11d6160

11 files changed

Lines changed: 66 additions & 108 deletions

example/lib/browser.dart

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,6 @@ class _BrowserState extends State<Browser> {
3636
});
3737
},
3838
shouldBlockAds: widget.shouldBlockAds,
39-
additionalHostsToBlock: const [],
4039
),
4140
),
4241
Row(

example/lib/main.dart

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,17 @@
1+
import 'package:adblocker_manager/adblocker_manager.dart';
12
import 'package:adblocker_webview/adblocker_webview.dart';
23
import 'package:flutter/material.dart';
34

45
import 'browser_screen.dart';
56
import 'url_input_section.dart';
67

7-
void main() {
8+
void main() async {
9+
await AdBlockerWebviewController.instance.initialize(
10+
FilterConfig(
11+
filterTypes: [FilterType.easyList, FilterType.adGuard],
12+
),
13+
[],
14+
);
815
runApp(const ExampleApp());
916
}
1017

lib/adblocker_webview.dart

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
export 'package:adblocker_manager/adblocker_manager.dart';
12
export 'src/adblocker_webview.dart';
23
export 'src/adblocker_webview_controller.dart';
3-
export 'src/domain/entity/host.dart';
4+
export 'src/adblocker_webview_controller_impl.dart';

lib/src/adblocker_webview.dart

Lines changed: 12 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import 'dart:io';
44
import 'package:adblocker_manager/adblocker_manager.dart';
55
import 'package:adblocker_webview/src/adblocker_webview_controller.dart';
66
import 'package:adblocker_webview/src/block_resource_loading.dart';
7-
import 'package:adblocker_webview/src/domain/entity/host.dart';
87
import 'package:adblocker_webview/src/elem_hide.dart';
98
import 'package:adblocker_webview/src/logger.dart';
109
import 'package:flutter/material.dart';
@@ -23,7 +22,6 @@ class AdBlockerWebview extends StatefulWidget {
2322
this.onProgress,
2423
this.onLoadError,
2524
this.onUrlChanged,
26-
this.additionalHostsToBlock = const [],
2725
super.key,
2826
}) : assert(
2927
url != null || initialHtmlData != null,
@@ -61,8 +59,6 @@ class AdBlockerWebview extends StatefulWidget {
6159
/// Invoked when the page title is changed.
6260
final void Function(String? url)? onUrlChanged;
6361

64-
final List<Host> additionalHostsToBlock;
65-
6662
/// Invoked when a loading error occurred.
6763
final void Function(String? url, int code)? onLoadError;
6864

@@ -77,29 +73,25 @@ class _AdBlockerWebviewState extends State<AdBlockerWebview> {
7773
late Future<void> _depsFuture;
7874
final List<ResourceRule> _urlsToBlock = [];
7975

80-
final AdblockFilterManager _adBlockManager = AdblockFilterManager();
81-
8276
@override
8377
void initState() {
8478
super.initState();
8579
_depsFuture = _init();
8680
}
8781

8882
Future<void> _init() async {
89-
final config = FilterConfig(
90-
filterTypes: [FilterType.easyList, FilterType.adGuard],
91-
);
92-
await _adBlockManager.init(config);
9383
_urlsToBlock
9484
..clear()
95-
..addAll(_adBlockManager.getAllResourceRules());
85+
..addAll(widget.adBlockerWebviewController.bannedResourceRules);
9686

9787
_webViewController = WebViewController();
98-
await _webViewController.setOnConsoleMessage((message) {
99-
debugLog('[FLUTTER_WEBVIEW_LOG]: ${message.message}');
100-
});
101-
await _webViewController.setUserAgent(_getUserAgent());
102-
await _webViewController.setJavaScriptMode(JavaScriptMode.unrestricted);
88+
await Future.wait([
89+
_webViewController.setOnConsoleMessage((message) {
90+
debugLog('[FLUTTER_WEBVIEW_LOG]: ${message.message}');
91+
}),
92+
_webViewController.setUserAgent(_getUserAgent()),
93+
_webViewController.setJavaScriptMode(JavaScriptMode.unrestricted),
94+
]);
10395

10496
_setNavigationDelegate();
10597
widget.adBlockerWebviewController.setInternalController(_webViewController);
@@ -139,7 +131,8 @@ class _AdBlockerWebviewState extends State<AdBlockerWebview> {
139131
_webViewController.setNavigationDelegate(
140132
NavigationDelegate(
141133
onNavigationRequest: (request) {
142-
final shouldBlock = _adBlockManager.shouldBlockResource(request.url);
134+
final shouldBlock = widget.adBlockerWebviewController
135+
.shouldBlockResource(request.url);
143136
if (shouldBlock) {
144137
debugLog('Blocking resource: ${request.url}');
145138
return NavigationDecision.prevent;
@@ -160,7 +153,8 @@ class _AdBlockerWebviewState extends State<AdBlockerWebview> {
160153
onPageFinished: (url) {
161154
if (widget.shouldBlockAds) {
162155
// Apply element hiding after page load
163-
final cssRules = _adBlockManager.getCSSRulesForWebsite(url);
156+
final cssRules =
157+
widget.adBlockerWebviewController.getCssRulesForWebsite(url);
164158
unawaited(
165159
_webViewController.runJavaScript(generateHidingScript(cssRules)),
166160
);

lib/src/adblocker_webview_controller.dart

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import 'dart:collection';
22

3+
import 'package:adblocker_manager/adblocker_manager.dart';
34
import 'package:adblocker_webview/adblocker_webview.dart';
45
import 'package:adblocker_webview/src/adblocker_webview_controller_impl.dart';
56
import 'package:adblocker_webview/src/internal_adblocker_webview_controller.dart';
@@ -15,7 +16,7 @@ import 'package:adblocker_webview/src/internal_adblocker_webview_controller.dart
1516
/// @override
1617
/// void initState() {
1718
/// super.initState();
18-
/// _adBlockerWebviewController.initialize();
19+
/// _adBlockerWebviewController.initialize(config, []);
1920
/// /// ... Other code here.
2021
/// }
2122
/// ```
@@ -34,12 +35,11 @@ abstract interface class AdBlockerWebviewController
3435
return _instance!;
3536
}
3637

37-
/// Returns the banned host list.
38-
/// This list items are populated after calling the [initialize] method
39-
UnmodifiableListView<Host> get bannedHost;
40-
4138
/// Initializes the controller
42-
Future<void> initialize();
39+
Future<void> initialize(
40+
FilterConfig filterConfig,
41+
List<ResourceRule> additionalResourceRules,
42+
);
4343

4444
/// Returns decision of if the webview can go back
4545
Future<bool> canGoBack();
@@ -50,23 +50,30 @@ abstract interface class AdBlockerWebviewController
5050
// Clears the cache of webview
5151
Future<void> clearCache();
5252

53+
/// Returns the banned resource rules list.
54+
/// This list items are populated after calling the [initialize] method
55+
UnmodifiableListView<ResourceRule> get bannedResourceRules;
56+
5357
// Returns the title of currently loaded webpage
5458
Future<String?> getTitle();
5559

5660
// Loads the given url
5761
Future<void> loadUrl(String url);
5862

59-
Future<void> loadData(
60-
String data, {
61-
String? baseUrl,
62-
});
63+
Future<void> loadData(String data, {String? baseUrl});
64+
65+
/// Returns the css rules for the given url
66+
List<String> getCssRulesForWebsite(String url);
6367

6468
/// Navigates webview to previous page
6569
Future<void> goBack();
6670

6771
/// Navigates the webview to forward page
6872
Future<void> goForward();
6973

74+
/// Returns decision of if the resource should be blocked
75+
bool shouldBlockResource(String url);
76+
7077
/// Reloads the current page
7178
Future<void> reload();
7279

lib/src/adblocker_webview_controller_impl.dart

Lines changed: 27 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,33 @@
11
import 'dart:collection';
22

3-
import 'package:adblocker_webview/src/adblocker_webview_controller.dart';
4-
import 'package:adblocker_webview/src/data/repository/adblocker_repository_impl.dart';
5-
import 'package:adblocker_webview/src/domain/entity/host.dart';
6-
import 'package:adblocker_webview/src/domain/repository/adblocker_repository.dart';
3+
import 'package:adblocker_manager/adblocker_manager.dart';
4+
import 'package:adblocker_webview/adblocker_webview.dart';
75
import 'package:webview_flutter/webview_flutter.dart';
86

97
///Implementation for [AdBlockerWebviewController]
108
class AdBlockerWebviewControllerImpl implements AdBlockerWebviewController {
11-
AdBlockerWebviewControllerImpl({AdBlockerRepository? repository})
12-
: _repository = repository ?? AdBlockerRepositoryImpl();
13-
final AdBlockerRepository _repository;
9+
AdBlockerWebviewControllerImpl();
1410

1511
WebViewController? _webViewController;
16-
17-
final _bannedHost = <Host>[];
18-
19-
@override
20-
UnmodifiableListView<Host> get bannedHost =>
21-
UnmodifiableListView(_bannedHost);
12+
final AdblockFilterManager _adBlockManager = AdblockFilterManager();
13+
final _bannedResourceRules = <ResourceRule>[];
2214

2315
@override
24-
Future<void> initialize() async {
25-
final hosts = await _repository.fetchBannedHostList();
26-
_bannedHost
16+
Future<void> initialize(
17+
FilterConfig filterConfig,
18+
List<ResourceRule> additionalResourceRules,
19+
) async {
20+
await _adBlockManager.init(filterConfig);
21+
_bannedResourceRules
2722
..clear()
28-
..addAll(hosts);
23+
..addAll(_adBlockManager.getAllResourceRules())
24+
..addAll(additionalResourceRules);
2925
}
3026

27+
@override
28+
UnmodifiableListView<ResourceRule> get bannedResourceRules =>
29+
UnmodifiableListView(_bannedResourceRules);
30+
3131
@override
3232
void setInternalController(WebViewController controller) {
3333
_webViewController = controller;
@@ -60,6 +60,10 @@ class AdBlockerWebviewControllerImpl implements AdBlockerWebviewController {
6060
return _webViewController!.clearCache();
6161
}
6262

63+
@override
64+
List<String> getCssRulesForWebsite(String url) =>
65+
_adBlockManager.getCSSRulesForWebsite(url);
66+
6367
@override
6468
Future<String?> getTitle() async {
6569
if (_webViewController == null) {
@@ -97,19 +101,17 @@ class AdBlockerWebviewControllerImpl implements AdBlockerWebviewController {
97101
}
98102

99103
@override
100-
Future<void> loadData(
101-
String data, {
102-
String? baseUrl,
103-
}) async {
104+
Future<void> loadData(String data, {String? baseUrl}) async {
104105
if (_webViewController == null) {
105106
return;
106107
}
107-
return _webViewController!.loadHtmlString(
108-
data,
109-
baseUrl: baseUrl,
110-
);
108+
return _webViewController!.loadHtmlString(data, baseUrl: baseUrl);
111109
}
112110

111+
@override
112+
bool shouldBlockResource(String url) =>
113+
_adBlockManager.shouldBlockResource(url);
114+
113115
@override
114116
Future<void> reload() async {
115117
if (_webViewController == null) {

lib/src/data/repository/adblocker_repository_impl.dart

Lines changed: 0 additions & 34 deletions
This file was deleted.

lib/src/domain/entity/host.dart

Lines changed: 0 additions & 9 deletions
This file was deleted.

lib/src/domain/repository/adblocker_repository.dart

Lines changed: 0 additions & 5 deletions
This file was deleted.

pubspec.yaml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,6 @@ dependencies:
1616
adblocker_manager: ^1.0.0
1717
flutter:
1818
sdk: flutter
19-
20-
flutter_cache_manager: ^3.3.1
2119
webview_flutter: ^4.10.0
2220

2321
dev_dependencies:

0 commit comments

Comments
 (0)