This is an automated email from the ASF dual-hosted git repository.
GitToTheHub pushed a commit to branch master
in repository
https://gitbox.apache.org/repos/asf/cordova-plugin-inappbrowser.git
The following commit(s) were added to refs/heads/master by this push:
new f40f41b refactor(ios): refactor code for clearing data (#1137)
f40f41b is described below
commit f40f41bf3091fc8a2bf4e8c3f820e8ec6222511a
Author: Manuel Beck <[email protected]>
AuthorDate: Tue May 5 18:40:34 2026 +0200
refactor(ios): refactor code for clearing data (#1137)
- Create method `clearWebsiteDataByOptions` which contains the code for the
three options `cleardata`, `clearcache` and `clearsessioncache`
- Make clear that using these options will also clear the data of the
Cordova WebView. Improve Readme to reflect this.
- On Android these three options will also clear the data of the Cordova
WebView, which is also added to the Readme.
---
README.md | 10 +++---
src/ios/CDVWKInAppBrowser.m | 84 ++++++++++++++++++++++++---------------------
2 files changed, 49 insertions(+), 45 deletions(-)
diff --git a/README.md b/README.md
index baf0eb0..2d5a65b 100644
--- a/README.md
+++ b/README.md
@@ -114,8 +114,8 @@ instance, or the system browser.
- __hidden__: set to `yes` to create the browser and load the page, but
not show it. The loadstop event fires when loading is complete. Omit or set to
`no` (default) to have the browser open and load normally.
- __beforeload__: set to enable the `beforeload` event to modify which
pages are actually loaded in the browser. Accepted values are `get` to
intercept only GET requests, `post` to intercept on POST requests or `yes` to
intercept both GET & POST requests. Note that POST requests are not currently
supported and will be ignored (if you set `beforeload=post` it will raise an
error).
- - __clearcache__: set to `yes` to have the browser's cookie cache cleared
before the new window is opened
- - __clearsessioncache__: set to `yes` to have the session cookie cache
cleared before the new window is opened
+ - __clearcache__: Set to `yes` to clear the shared browser's cookie cache
of your app, which means also the one of the Cordova WebView, before the in-app
browser is opened.
+ - __clearsessioncache__: Set to `yes` to clear the shared session cookies
from the browser's cache of your app, which means also the one of the Cordova
WebView, before the in-app browser is opened.
- __closebuttoncaption__: set to a string to use as the close button's
caption instead of a X. Note that you need to localize this value yourself.
- __closebuttoncolor__: set to a valid hex color string, for example:
`#00ff00`, and it will change the
close button color from default, regardless of being a text or default X.
Only has effect if user has location set to `yes`.
@@ -139,9 +139,9 @@ instance, or the system browser.
- __hidden__: set to `yes` to create the browser and load the page, but
not show it. The loadstop event fires when loading is complete. Omit or set to
`no` (default) to have the browser open and load normally.
- __beforeload__: set to enable the `beforeload` event to modify which
pages are actually loaded in the browser. Accepted values are `get` to
intercept only GET requests, `post` to intercept on POST requests or `yes` to
intercept both GET & POST requests. Note that POST requests are not currently
supported and will be ignored (if you set `beforeload=post` it will raise an
error).
- - __clearcache__: set to `yes` to have the browser's cookie cache cleared
before the new window is opened
- - __clearsessioncache__: set to `yes` to have the session cookie cache
cleared before the new window is opened. For WKWebView, requires iOS 11+ on
target device.
- - __cleardata__: set to `yes` to have the browser's entire local storage
cleared (cookies, HTML5 local storage, IndexedDB, etc.) before the new window
is opened
+ - __clearcache__: Set to `yes` to clear the browser's cookie cache of your
app, which means also the one of the Cordova WebView, before the in-app browser
is opened.
+ - __clearsessioncache__: Set to `yes` to clear the shared session cookies
from the browser's cache of your app, which means also the one of the Cordova
WebView, before the in-app browser is opened.
+ - __cleardata__: Set to `yes` to clear the shared browser's entire local
storage of your app, which means also the one of the Cordova WebView, like
cookies, HTML5 local storage, IndexedDB, etc., before the in-app browser is
opened.
- __closebuttoncolor__: set as a valid hex color string, for example:
`#00ff00`, to change from the default __Done__ button's color. Only applicable
if toolbar is not disabled.
- __closebuttoncaption__: set to a string to use as the __Done__ button's
caption. Note that you need to localize this value yourself.
- __disallowoverscroll__: Set to `yes` or `no` (default is `no`). Turns
on/off the the bounce of the WKWebView's UIScrollView.
diff --git a/src/ios/CDVWKInAppBrowser.m b/src/ios/CDVWKInAppBrowser.m
index e3d87bd..fb79d1b 100644
--- a/src/ios/CDVWKInAppBrowser.m
+++ b/src/ios/CDVWKInAppBrowser.m
@@ -113,47 +113,8 @@
- (void)openInInAppBrowser:(NSURL *)url withOptions:(NSString *)options
{
CDVInAppBrowserOptions *browserOptions = [CDVInAppBrowserOptions
parseOptions:options];
- WKWebsiteDataStore *dataStore = [WKWebsiteDataStore defaultDataStore];
-
- if (browserOptions.cleardata) {
- NSDate *dateFrom = [NSDate dateWithTimeIntervalSince1970:0];
- [dataStore removeDataOfTypes:[WKWebsiteDataStore allWebsiteDataTypes]
modifiedSince:dateFrom completionHandler:^{
- NSLog(@"Removed all WKWebView data");
- if (@available(iOS 15.0, *)) {
- // Since iOS 15 WKProcessPool is deprecated and has no effect
- } else {
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wdeprecated-declarations"
- // Set for iOS 14 and below a new process pool
-
self.inAppBrowserViewController.webView.configuration.processPool =
[[WKProcessPool alloc] init]; // create new process pool to flush all data
-#pragma clang diagnostic pop
- }
- }];
- }
- if (browserOptions.clearcache) {
- // Deletes all cookies
- WKHTTPCookieStore *cookieStore = dataStore.httpCookieStore;
- [cookieStore getAllCookies:^(NSArray *cookies) {
- NSHTTPCookie *cookie;
- for (cookie in cookies) {
- [cookieStore deleteCookie:cookie completionHandler:nil];
- }
- }];
- }
-
- if (browserOptions.clearsessioncache) {
- // Deletes session cookies
- WKHTTPCookieStore *cookieStore = dataStore.httpCookieStore;
- [cookieStore getAllCookies:^(NSArray *cookies) {
- NSHTTPCookie *cookie;
- for (cookie in cookies) {
- if (cookie.sessionOnly) {
- [cookieStore deleteCookie:cookie completionHandler:nil];
- }
- }
- }];
- }
+ [self clearWebsiteDataByOptions:browserOptions];
if (self.inAppBrowserViewController == nil) {
self.inAppBrowserViewController = [[CDVWKInAppBrowserViewController
alloc] initWithBrowserOptions: browserOptions
andSettings:self.commandDelegate.settings];
@@ -215,6 +176,49 @@
}
}
+/**
+ * Clears website data (cookies, cache, etc.) according to the specified
options.
+ * This will clear the data on the Cordova WebView also.
+ *
+ * @param browserOptions The options specifying which types of data to clear.
+ */
+- (void)clearWebsiteDataByOptions:(CDVInAppBrowserOptions *)browserOptions
+{
+ // NOTE: [WKWebsiteDataStore defaultDataStore] will get the default data
store of the app,
+ // which is shared between all WKWebViews, which means also the Cordova
WebView
+ WKWebsiteDataStore *dataStore = [WKWebsiteDataStore defaultDataStore];
+
+ if (browserOptions.cleardata) {
+ [dataStore
fetchDataRecordsOfTypes:WKWebsiteDataStore.allWebsiteDataTypes
completionHandler:^(NSArray<WKWebsiteDataRecord *> * _Nonnull records) {
+ [dataStore
removeDataOfTypes:WKWebsiteDataStore.allWebsiteDataTypes forDataRecords:records
completionHandler:^{
+ NSLog(@"Removed all WKWebView data");
+ // Create new WKProcessPool
+ if (@available(iOS 15.0, *)) {
+ // Since iOS 15 WKProcessPool is deprecated and has no
effect
+ } else {
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ // Set for iOS 14 and below a new process pool
+
self.inAppBrowserViewController.webView.configuration.processPool =
[[WKProcessPool alloc] init]; // create new process pool to flush all data
+#pragma clang diagnostic pop
+ }
+ }];
+ }];
+ }
+
+ // Deletes all cookies or session cookies
+ if (browserOptions.clearcache || browserOptions.clearsessioncache) {
+ WKHTTPCookieStore *cookieStore = dataStore.httpCookieStore;
+ [cookieStore getAllCookies:^(NSArray *cookies) {
+ for (NSHTTPCookie *cookie in cookies) {
+ if (browserOptions.clearcache ||
(browserOptions.clearsessioncache && cookie.sessionOnly)) {
+ [cookieStore deleteCookie:cookie completionHandler:nil];
+ }
+ }
+ }];
+ }
+}
+
- (void)show:(CDVInvokedUrlCommand *)command
{
[self show:command withNoAnimate:NO];
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]