Skip to content

Commit

Permalink
Issue 3241 - Make filter list URL configurable in devbuilds
Browse files Browse the repository at this point in the history
  • Loading branch information
dedecej committed Oct 17, 2016
1 parent b0e5466 commit 5ae884c
Show file tree
Hide file tree
Showing 21 changed files with 1,020 additions and 138 deletions.
28 changes: 26 additions & 2 deletions AdblockPlusSafari.xcodeproj/project.pbxproj
Expand Up @@ -14,6 +14,11 @@
6905EDAD1BCE890000B3A9B9 /* AdblockPlus+Parsing.m in Sources */ = {isa = PBXBuildFile; fileRef = 6905EDAB1BCE84F500B3A9B9 /* AdblockPlus+Parsing.m */; };
69142D571CDCC51C00FD2640 /* FilterList.m in Sources */ = {isa = PBXBuildFile; fileRef = 69142D541CDCC51C00FD2640 /* FilterList.m */; };
69142D581CDCC51C00FD2640 /* FilterList+Processing.m in Sources */ = {isa = PBXBuildFile; fileRef = 69142D561CDCC51C00FD2640 /* FilterList+Processing.m */; };
69142D781CDCCF1100FD2640 /* CustomFilterListsController.m in Sources */ = {isa = PBXBuildFile; fileRef = 69142D731CDCCF1100FD2640 /* CustomFilterListsController.m */; };
69142D791CDCCF1100FD2640 /* NSDictionary+FilterList.m in Sources */ = {isa = PBXBuildFile; fileRef = 69142D751CDCCF1100FD2640 /* NSDictionary+FilterList.m */; };
69142D7A1CDCCF1100FD2640 /* SwitchCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 69142D771CDCCF1100FD2640 /* SwitchCell.m */; };
69142D7B1CDCDE0700FD2640 /* NSDictionary+FilterList.m in Sources */ = {isa = PBXBuildFile; fileRef = 69142D751CDCCF1100FD2640 /* NSDictionary+FilterList.m */; };
69142D7C1CDCDE0700FD2640 /* NSDictionary+FilterList.m in Sources */ = {isa = PBXBuildFile; fileRef = 69142D751CDCCF1100FD2640 /* NSDictionary+FilterList.m */; };
691F74471B9874590057C702 /* AboutController.m in Sources */ = {isa = PBXBuildFile; fileRef = 691F74461B9874590057C702 /* AboutController.m */; };
691F744A1B988ADC0057C702 /* AdblockPlusContainerController.m in Sources */ = {isa = PBXBuildFile; fileRef = 691F74491B988ADC0057C702 /* AdblockPlusContainerController.m */; };
6970E76E1BA94C3900B11AC3 /* AdblockPlus+Extension.m in Sources */ = {isa = PBXBuildFile; fileRef = 6970E76D1BA94C3900B11AC3 /* AdblockPlus+Extension.m */; };
Expand Down Expand Up @@ -120,6 +125,12 @@
69142D541CDCC51C00FD2640 /* FilterList.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FilterList.m; sourceTree = "<group>"; };
69142D551CDCC51C00FD2640 /* FilterList+Processing.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "FilterList+Processing.h"; sourceTree = "<group>"; };
69142D561CDCC51C00FD2640 /* FilterList+Processing.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "FilterList+Processing.m"; sourceTree = "<group>"; };
69142D721CDCCF1100FD2640 /* CustomFilterListsController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CustomFilterListsController.h; sourceTree = "<group>"; };
69142D731CDCCF1100FD2640 /* CustomFilterListsController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CustomFilterListsController.m; sourceTree = "<group>"; };
69142D741CDCCF1100FD2640 /* NSDictionary+FilterList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSDictionary+FilterList.h"; sourceTree = "<group>"; };
69142D751CDCCF1100FD2640 /* NSDictionary+FilterList.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSDictionary+FilterList.m"; sourceTree = "<group>"; };
69142D761CDCCF1100FD2640 /* SwitchCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SwitchCell.h; sourceTree = "<group>"; };
69142D771CDCCF1100FD2640 /* SwitchCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SwitchCell.m; sourceTree = "<group>"; };
691F74451B9874590057C702 /* AboutController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AboutController.h; sourceTree = "<group>"; };
691F74461B9874590057C702 /* AboutController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AboutController.m; sourceTree = "<group>"; };
691F74481B988ADC0057C702 /* AdblockPlusContainerController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AdblockPlusContainerController.h; sourceTree = "<group>"; };
Expand Down Expand Up @@ -414,6 +425,10 @@
children = (
69A910171B986DB600D93485 /* RightCenteredImageButton.h */,
69A910181B986DB600D93485 /* RightCenteredImageButton.m */,
69142D761CDCCF1100FD2640 /* SwitchCell.h */,
69142D771CDCCF1100FD2640 /* SwitchCell.m */,
69A2BF451C4E9C6B00A81994 /* WhitelistedSiteCell.h */,
69A2BF461C4E9C6B00A81994 /* WhitelistedSiteCell.m */,
);
name = Controls;
sourceTree = "<group>";
Expand Down Expand Up @@ -469,6 +484,8 @@
691F74491B988ADC0057C702 /* AdblockPlusContainerController.m */,
69F4D9251B95F1B700300817 /* AdblockPlusController.h */,
69F4D9261B95F1B700300817 /* AdblockPlusController.m */,
69142D721CDCCF1100FD2640 /* CustomFilterListsController.h */,
69142D731CDCCF1100FD2640 /* CustomFilterListsController.m */,
69AB6A521B971B9A005C2075 /* HomeController.h */,
69AB6A531B971B9A005C2075 /* HomeController.m */,
69C19C751B9835D1009ACBAC /* RootController.h */,
Expand Down Expand Up @@ -531,11 +548,11 @@
E9E897421C4947F60005D6E2 /* InfoPlist.strings */,
69AB6A491B970FFA005C2075 /* LaunchScreen.xib */,
E9071D481B76897C00091AEB /* Main.storyboard */,
69142D741CDCCF1100FD2640 /* NSDictionary+FilterList.h */,
69142D751CDCCF1100FD2640 /* NSDictionary+FilterList.m */,
69D8BB061BE3AF1900339AAC /* NSString+TextRenderer.h */,
69D8BB071BE3AF1900339AAC /* NSString+TextRenderer.m */,
E9071D3F1B76897C00091AEB /* Supporting Files */,
69A2BF451C4E9C6B00A81994 /* WhitelistedSiteCell.h */,
69A2BF461C4E9C6B00A81994 /* WhitelistedSiteCell.m */,
);
path = AdblockPlusSafari;
sourceTree = "<group>";
Expand Down Expand Up @@ -937,6 +954,7 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
69142D7B1CDCDE0700FD2640 /* NSDictionary+FilterList.m in Sources */,
699B0EB61BCE9D11005DC603 /* AdblockPlus.m in Sources */,
69B2AEBA1BCD289C00E874A9 /* AdblockPlusSafariTests.m in Sources */,
6905EDAD1BCE890000B3A9B9 /* AdblockPlus+Parsing.m in Sources */,
Expand All @@ -950,7 +968,9 @@
69142D581CDCC51C00FD2640 /* FilterList+Processing.m in Sources */,
69AB6A4F1B9712F1005C2075 /* AdblockPlus.m in Sources */,
69AB6A541B971B9A005C2075 /* HomeController.m in Sources */,
69142D7A1CDCCF1100FD2640 /* SwitchCell.m in Sources */,
69A910191B986DB600D93485 /* RightCenteredImageButton.m in Sources */,
69142D791CDCCF1100FD2640 /* NSDictionary+FilterList.m in Sources */,
E9071D441B76897C00091AEB /* AppDelegate.m in Sources */,
69F4D9271B95F1B700300817 /* AdblockPlusController.m in Sources */,
69A2BCFC1BCBCF8A00028734 /* WhitelistedWebsitesController.m in Sources */,
Expand All @@ -964,6 +984,7 @@
69C19C771B9835D1009ACBAC /* RootController.m in Sources */,
69AB6A571B973802005C2075 /* WelcomeController.m in Sources */,
69AB6A2E1B96F664005C2075 /* Appearence.m in Sources */,
69142D781CDCCF1100FD2640 /* CustomFilterListsController.m in Sources */,
69142D571CDCC51C00FD2640 /* FilterList.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
Expand All @@ -976,6 +997,7 @@
E942B0801B76899D004B4692 /* ActionRequestHandler.m in Sources */,
6970E76E1BA94C3900B11AC3 /* AdblockPlus+Extension.m in Sources */,
6905EDAC1BCE84F500B3A9B9 /* AdblockPlus+Parsing.m in Sources */,
69142D7C1CDCDE0700FD2640 /* NSDictionary+FilterList.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
Expand Down Expand Up @@ -1216,6 +1238,7 @@
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
"CONFIGURABLE_CUSTOM_FILTER_LIST_ENABLED=1",
);
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
Expand Down Expand Up @@ -1452,6 +1475,7 @@
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
"CONFIGURABLE_CUSTOM_FILTER_LIST_ENABLED=1",
);
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
Expand Down
2 changes: 1 addition & 1 deletion AdblockPlusSafari/AcceptableAdsController.m
Expand Up @@ -101,7 +101,7 @@ - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(N

- (void)onSwitchHasChanged:(UISwitch *)s
{
[self.adblockPlus setAcceptableAdsEnabled:s.on reload:YES];
self.adblockPlus.acceptableAdsEnabled = s.on;
}

- (void)updateAccessoryViewOfCell:(UITableViewCell *)cell
Expand Down
8 changes: 8 additions & 0 deletions AdblockPlusSafari/AdblockPlus.h
Expand Up @@ -17,6 +17,10 @@

#import <Foundation/Foundation.h>

extern NSString *_Nonnull DefaultFilterListName;
extern NSString *_Nonnull DefaultFilterListPlusExceptionRulesName;
extern NSString *_Nonnull CustomFilterListName;

extern NSString *_Nonnull AdblockPlusErrorDomain;
extern NSString *_Nonnull AdblockPlusActivated;

Expand All @@ -41,6 +45,8 @@ typedef NS_ENUM(NSUInteger, AdblockPlusFilterListType) {

@property (nonatomic) BOOL activated;

@property (nonatomic) BOOL defaultFilterListEnabled;

@property (nonatomic) NSInteger installedVersion;

@property (nonatomic) NSInteger downloadedVersion;
Expand All @@ -49,4 +55,6 @@ typedef NS_ENUM(NSUInteger, AdblockPlusFilterListType) {

@property (nonatomic, strong) NSArray<NSString *> *__nonnull whitelistedWebsites;

- (NSString *__nonnull)activeFilterListName;

@end
89 changes: 78 additions & 11 deletions AdblockPlusSafari/AdblockPlus.m
Expand Up @@ -17,11 +17,19 @@

#import "AdblockPlus.h"

#import "NSDictionary+FilterList.h"

NSString *DefaultFilterListName = @"easylist";
NSString *DefaultFilterListPlusExceptionRulesName = @"easylist+exceptionrules";
NSString *CustomFilterListName = @"customFilterList";

NSString *AdblockPlusErrorDomain = @"AdblockPlusError";
NSString *AdblockPlusActivated = @"AdblockPlusActivated";
static NSString *AdblockPlusEnabled = @"AdblockPlusEnabled";
static NSString *AdblockPlusAcceptableAdsEnabled = @"AdblockPlusAcceptableAdsEnabled";
static NSString *AdblockPlusDefaultFilterListEnabled = @"AdblockPlusDefaultFilterListEnabled";
static NSString *AdblockPlusFilterLists = @"AdblockPlusFilterLists";
static NSString *AdblockPlusFilterListsVersion2 = @"AdblockPlusFilterListsVersion2";
static NSString *AdblockPlusInstalledVersion = @"AdblockPlusInstalledVersion";
static NSString *AdblockPlusDownloadedVersion = @"AdblockPlusDownloadedVersion";
static NSString *AdblockPlusWhitelistedWebsites = @"AdblockPlusWhitelistedWebsites";
Expand All @@ -40,12 +48,6 @@ - (instancetype)init
{
if (self = [super init]) {

NSString *path = [[NSBundle mainBundle] pathForResource:@"FilterLists" ofType:@"plist"];
NSDictionary *filterLists = [NSDictionary dictionaryWithContentsOfFile:path];
if (!filterLists) {
filterLists = @{};
}

// Try to extract group from bundle name from bundle id (in host app and extension):
// org.adblockplus.AdblockPlusSafari -> org.adblockplus
// org.adblockplus.devbuilds.AdblockPlusSafari -> org.adblockplus.devbuilds
Expand All @@ -62,21 +64,68 @@ - (instancetype)init

_adblockPlusDetails = [[NSUserDefaults alloc] initWithSuiteName:self.group];
[_adblockPlusDetails registerDefaults:
@{ AdblockPlusActivated: @NO,
AdblockPlusEnabled: @YES,
@{ AdblockPlusEnabled: @YES,
AdblockPlusAcceptableAdsEnabled: @YES,
AdblockPlusActivated: @NO,
AdblockPlusDefaultFilterListEnabled: @YES,
AdblockPlusInstalledVersion: @0,
AdblockPlusDownloadedVersion: @1,
AdblockPlusFilterLists: filterLists,
AdblockPlusWhitelistedWebsites: @[]}];

_enabled = [_adblockPlusDetails boolForKey:AdblockPlusEnabled];
_acceptableAdsEnabled = [_adblockPlusDetails boolForKey:AdblockPlusAcceptableAdsEnabled];
_activated = [_adblockPlusDetails boolForKey:AdblockPlusActivated];
_filterLists = [_adblockPlusDetails objectForKey:AdblockPlusFilterLists];
_defaultFilterListEnabled = [_adblockPlusDetails boolForKey:AdblockPlusDefaultFilterListEnabled];
_filterLists = [_adblockPlusDetails objectForKey:AdblockPlusFilterListsVersion2];
_installedVersion = [_adblockPlusDetails integerForKey:AdblockPlusInstalledVersion];
_downloadedVersion = [_adblockPlusDetails integerForKey:AdblockPlusDownloadedVersion];
_whitelistedWebsites = [_adblockPlusDetails objectForKey:AdblockPlusWhitelistedWebsites];

if (!_filterLists) {
// Load default filter lists
NSString *path = [[NSBundle mainBundle] pathForResource:@"FilterLists" ofType:@"plist"];
_filterLists = [NSDictionary dictionaryWithContentsOfFile:path];
if (!_filterLists) {
_filterLists = @{};
}

NSDictionary *filterListsVersion1 = [_adblockPlusDetails objectForKey:AdblockPlusFilterLists];
if (filterListsVersion1) {
// Old version of filter lists was loaded, convert old version to new version

NSDictionary *defaultFilterListsFileNames =
@{DefaultFilterListName:
@"easylist_content_blocker.json",
DefaultFilterListPlusExceptionRulesName:
@"easylist+exceptionrules_content_blocker.json"
};

NSMutableDictionary *filterListsVersion2 = [_filterLists mutableCopy];

for (NSString *defaultFilterListName in defaultFilterListsFileNames) {
NSString *defaultFilterListFileName = defaultFilterListsFileNames[defaultFilterListName];
for (NSString *filterListName in filterListsVersion1) {
NSDictionary *filterList = filterListsVersion1[filterListName];
if ([filterList[@"filename"] isEqualToString:defaultFilterListFileName]) {
NSMutableDictionary *modifiedFilterList = [filterList mutableCopy];
modifiedFilterList[@"url"] = filterListName;
modifiedFilterList[@"fileName"] = defaultFilterListFileName;
[modifiedFilterList removeObjectForKey:@"filename"];

filterListsVersion2[defaultFilterListName] = modifiedFilterList;
}
}
}

_filterLists = filterListsVersion2;

} else {
// No filter lists was loaded, use default filter lists
}
}

NSAssert(_filterLists[DefaultFilterListName], @"Default filter list is not set");
NSAssert(_filterLists[DefaultFilterListPlusExceptionRulesName], @"Default filter list with exceptions is not set");
}
return self;
}
Expand Down Expand Up @@ -104,10 +153,17 @@ - (void)setActivated:(BOOL)activated
[_adblockPlusDetails synchronize];
}

- (void)setDefaultFilterListEnabled:(BOOL)defaultFilterListEnabled
{
_defaultFilterListEnabled = defaultFilterListEnabled;
[_adblockPlusDetails setBool:defaultFilterListEnabled forKey:AdblockPlusDefaultFilterListEnabled];
[_adblockPlusDetails synchronize];
}

- (void)setFilterLists:(NSDictionary<NSString *,NSDictionary<NSString *,NSObject *> *> *)filterLists
{
_filterLists = filterLists;
[_adblockPlusDetails setObject:filterLists forKey:AdblockPlusFilterLists];
[_adblockPlusDetails setObject:filterLists forKey:AdblockPlusFilterListsVersion2];
[_adblockPlusDetails synchronize];
}

Expand Down Expand Up @@ -149,4 +205,15 @@ - (NSString *)backgroundSessionConfigurationIdentifier
return [NSString stringWithFormat:@"%@.AdblockPlusSafari.BackgroundSession", _bundleName];
}

- (NSString *__nonnull)activeFilterListName
{
if (!self.defaultFilterListEnabled && [self.filterLists[CustomFilterListName] downloaded]) {
return CustomFilterListName;
} else if (self.acceptableAdsEnabled) {
return DefaultFilterListPlusExceptionRulesName;
} else {
return DefaultFilterListName;
}
}

@end
12 changes: 12 additions & 0 deletions AdblockPlusSafari/AdblockPlusContainerController.m
Expand Up @@ -53,6 +53,18 @@ - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
if ([segue.destinationViewController respondsToSelector:@selector(setAdblockPlus:)]) {
[(id)segue.destinationViewController setAdblockPlus:self.adblockPlus];
}

#ifdef CONFIGURABLE_CUSTOM_FILTER_LIST_ENABLED
if ([segue.identifier isEqualToString:@"ConfigureFilterListsSegue"]) {
UIBarButtonItem *backItem = [[UIBarButtonItem alloc] initWithTitle:@"Done"
style:UIBarButtonItemStyleDone
target:nil
action:nil];
self.navigationItem.backBarButtonItem = backItem;
} else {
self.navigationItem.backBarButtonItem = nil;
}
#endif
}

#pragma mark - Action
Expand Down
6 changes: 5 additions & 1 deletion AdblockPlusSafari/AdblockPlusController.h
Expand Up @@ -19,8 +19,12 @@

#import "AdblockPlusExtras.h"

@interface AdblockPlusController : UITableViewController
@interface AdblockPlusControllerBase : UITableViewController

@property (nonatomic, strong) AdblockPlusExtras *__nullable adblockPlus;

@end

@interface AdblockPlusController : AdblockPlusControllerBase

@end

0 comments on commit 5ae884c

Please sign in to comment.