Remove session-only cookies support

This commit is contained in:
csagan5 2020-09-01 19:42:42 +02:00
parent d65477e14a
commit 631072f5d6
2 changed files with 0 additions and 715 deletions

View file

@ -141,7 +141,6 @@ Enable-prefetch-privacy-changes-by-default.patch
Enable-reduced-referrer-granularity-by-default.patch
Disable-support-for-RAR-files-inspection.patch
Enable-improved-cookie-controls-by-default.patch
Session-only-cookies-support.patch
Add-history-support-in-incognito-mode.patch
Enable-darken-websites-checkbox-in-themes.patch
Remove-blocklisted-URLs-upon-bookmark-creation.patch

View file

@ -1,714 +0,0 @@
From: uazo <uazo@users.noreply.github.com>
Date: Thu, 6 Aug 2020 14:02:57 +0000
Subject: Session-only cookies support
---
base/android/application_status_listener.cc | 1 +
base/android/application_status_listener.h | 3 +-
.../org/chromium/base/ApplicationStatus.java | 4 ++
.../chrome/browser/ApplicationLifetime.java | 3 ++
.../availability/availability_prober.cc | 1 +
.../four_state_cookie_settings_preference.xml | 7 ++++
.../ContentSettingsResources.java | 9 +++++
.../FourStateCookieSettingsPreference.java | 17 +++++++-
.../site_settings/SingleCategorySettings.java | 29 ++++++++++++++
.../site_settings/SingleWebsiteSettings.java | 38 ++++++++++++------
.../site_settings/SiteSettings.java | 9 +++++
.../strings/android/site_settings.grdp | 8 +++-
.../translations/browser_ui_strings_it.xtb | 2 +
.../core/browser/content_settings_registry.cc | 0
.../core/data_use_measurement.cc | 1 +
.../scheduler/responsiveness/calculator.cc | 1 +
.../base/application_state_mojom_traits.cc | 7 +++-
.../public/mojom/base/application_state.mojom | 1 +
services/network/cookie_manager.cc | 14 +++++++
services/network/cookie_manager.h | 3 ++
services/network/network_context.cc | 17 ++++++++
.../network/public/mojom/cookie_manager.mojom | 3 ++
.../network/session_cleanup_cookie_store.cc | 39 +++++++++++++++++++
.../network/session_cleanup_cookie_store.h | 9 +++++
24 files changed, 210 insertions(+), 16 deletions(-)
mode change 100644 => 100755 base/android/application_status_listener.cc
mode change 100644 => 100755 base/android/application_status_listener.h
mode change 100644 => 100755 base/android/java/src/org/chromium/base/ApplicationStatus.java
mode change 100644 => 100755 chrome/android/java/src/org/chromium/chrome/browser/ApplicationLifetime.java
mode change 100644 => 100755 chrome/browser/availability/availability_prober.cc
mode change 100644 => 100755 components/browser_ui/site_settings/android/java/res/layout/four_state_cookie_settings_preference.xml
mode change 100644 => 100755 components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/ContentSettingsResources.java
mode change 100644 => 100755 components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/FourStateCookieSettingsPreference.java
mode change 100644 => 100755 components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleCategorySettings.java
mode change 100644 => 100755 components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleWebsiteSettings.java
mode change 100644 => 100755 components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettings.java
mode change 100644 => 100755 components/browser_ui/strings/android/site_settings.grdp
mode change 100644 => 100755 components/browser_ui/strings/android/translations/browser_ui_strings_it.xtb
mode change 100644 => 100755 components/content_settings/core/browser/content_settings_registry.cc
mode change 100644 => 100755 content/browser/scheduler/responsiveness/calculator.cc
mode change 100644 => 100755 mojo/public/cpp/base/application_state_mojom_traits.cc
mode change 100644 => 100755 mojo/public/mojom/base/application_state.mojom
mode change 100644 => 100755 services/network/cookie_manager.cc
mode change 100644 => 100755 services/network/cookie_manager.h
mode change 100644 => 100755 services/network/network_context.cc
mode change 100644 => 100755 services/network/public/mojom/cookie_manager.mojom
mode change 100644 => 100755 services/network/session_cleanup_cookie_store.cc
mode change 100644 => 100755 services/network/session_cleanup_cookie_store.h
diff --git a/base/android/application_status_listener.cc b/base/android/application_status_listener.cc
old mode 100644
new mode 100755
--- a/base/android/application_status_listener.cc
+++ b/base/android/application_status_listener.cc
@@ -85,6 +85,7 @@ void ApplicationStatusListener::NotifyApplicationStateChange(
switch (state) {
case APPLICATION_STATE_UNKNOWN:
case APPLICATION_STATE_HAS_DESTROYED_ACTIVITIES:
+ case APPLICATION_STATE_EXITING:
break;
case APPLICATION_STATE_HAS_RUNNING_ACTIVITIES:
RecordAction(UserMetricsAction("Android.LifeCycle.HasRunningActivities"));
diff --git a/base/android/application_status_listener.h b/base/android/application_status_listener.h
old mode 100644
new mode 100755
--- a/base/android/application_status_listener.h
+++ b/base/android/application_status_listener.h
@@ -30,7 +30,8 @@ enum ApplicationState {
APPLICATION_STATE_HAS_RUNNING_ACTIVITIES = 1,
APPLICATION_STATE_HAS_PAUSED_ACTIVITIES = 2,
APPLICATION_STATE_HAS_STOPPED_ACTIVITIES = 3,
- APPLICATION_STATE_HAS_DESTROYED_ACTIVITIES = 4
+ APPLICATION_STATE_HAS_DESTROYED_ACTIVITIES = 4,
+ APPLICATION_STATE_EXITING = 5
};
// A native helper class to listen to state changes of the Android
diff --git a/base/android/java/src/org/chromium/base/ApplicationStatus.java b/base/android/java/src/org/chromium/base/ApplicationStatus.java
old mode 100644
new mode 100755
--- a/base/android/java/src/org/chromium/base/ApplicationStatus.java
+++ b/base/android/java/src/org/chromium/base/ApplicationStatus.java
@@ -661,6 +661,10 @@ public class ApplicationStatus {
return ApplicationState.HAS_DESTROYED_ACTIVITIES;
}
+ public static void sendOnApplicationStateChange(int newState) {
+ ApplicationStatusJni.get().onApplicationStateChange(newState);
+ }
+
@NativeMethods
interface Natives {
// Called to notify the native side of state changes.
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ApplicationLifetime.java b/chrome/android/java/src/org/chromium/chrome/browser/ApplicationLifetime.java
old mode 100644
new mode 100755
--- a/chrome/android/java/src/org/chromium/chrome/browser/ApplicationLifetime.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ApplicationLifetime.java
@@ -6,6 +6,7 @@ package org.chromium.chrome.browser;
import org.chromium.base.ObserverList;
import org.chromium.base.annotations.CalledByNative;
+import org.chromium.base.ApplicationStatus;
/**
* Watches for when Chrome is told to restart itself.
@@ -42,6 +43,8 @@ public class ApplicationLifetime {
@CalledByNative
public static void terminate(boolean restart) {
+ ApplicationStatus.sendOnApplicationStateChange(org.chromium.mojo_base.mojom.ApplicationState.APPLICATION_STATE_EXITING);
+
for (Observer observer : sObservers) {
observer.onTerminate(restart);
}
diff --git a/chrome/browser/availability/availability_prober.cc b/chrome/browser/availability/availability_prober.cc
old mode 100644
new mode 100755
--- a/chrome/browser/availability/availability_prober.cc
+++ b/chrome/browser/availability/availability_prober.cc
@@ -206,6 +206,7 @@ bool IsInForeground(base::android::ApplicationState state) {
case base::android::APPLICATION_STATE_HAS_PAUSED_ACTIVITIES:
case base::android::APPLICATION_STATE_HAS_STOPPED_ACTIVITIES:
case base::android::APPLICATION_STATE_HAS_DESTROYED_ACTIVITIES:
+ case base::android::APPLICATION_STATE_EXITING:
return false;
}
}
diff --git a/components/browser_ui/site_settings/android/java/res/layout/four_state_cookie_settings_preference.xml b/components/browser_ui/site_settings/android/java/res/layout/four_state_cookie_settings_preference.xml
old mode 100644
new mode 100755
--- a/components/browser_ui/site_settings/android/java/res/layout/four_state_cookie_settings_preference.xml
+++ b/components/browser_ui/site_settings/android/java/res/layout/four_state_cookie_settings_preference.xml
@@ -39,6 +39,13 @@
app:primaryText="@string/website_settings_category_cookie_block_third_party_title"
app:descriptionText="@string/website_settings_category_cookie_block_third_party_addition" />
+ <org.chromium.components.browser_ui.widget.RadioButtonWithDescription
+ android:id="@+id/session_only"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ app:primaryText="@string/website_settings_category_cookie_session_only_title"
+ app:descriptionText="@string/website_settings_category_cookie_session_only_addition" />
+
<org.chromium.components.browser_ui.widget.RadioButtonWithDescription
android:id="@+id/block"
android:layout_width="match_parent"
diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/ContentSettingsResources.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/ContentSettingsResources.java
old mode 100644
new mode 100755
--- a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/ContentSettingsResources.java
+++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/ContentSettingsResources.java
@@ -335,6 +335,8 @@ public class ContentSettingsResources {
return R.string.website_settings_permissions_allow;
case ContentSettingValues.BLOCK:
return R.string.website_settings_permissions_block;
+ case ContentSettingValues.SESSION_ONLY:
+ return R.string.website_settings_category_cookie_session_only_title;
default:
return 0; // We never show Ask as an option on individual permissions.
}
@@ -422,4 +424,11 @@ public class ContentSettingsResources {
assert false;
return null;
}
+
+ /**
+ * Returns the summary for Cookie content settings when it is session only
+ */
+ public static int getCookieSessionOnlySummary() {
+ return R.string.website_settings_category_cookie_session_only_title;
+ }
}
diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/FourStateCookieSettingsPreference.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/FourStateCookieSettingsPreference.java
old mode 100644
new mode 100755
--- a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/FourStateCookieSettingsPreference.java
+++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/FourStateCookieSettingsPreference.java
@@ -30,7 +30,8 @@ public class FourStateCookieSettingsPreference
ALLOW,
BLOCK_THIRD_PARTY_INCOGNITO,
BLOCK_THIRD_PARTY,
- BLOCK
+ BLOCK,
+ SESSION_ONLY
}
/**
@@ -48,6 +49,9 @@ public class FourStateCookieSettingsPreference
public boolean cookiesContentSettingEnforced;
// Whether third-party blocking is enforced.
public boolean thirdPartyBlockingEnforced;
+
+ // Whether session-only cookies are enabled.
+ public boolean sessionOnlyCookies;
}
// Keeps the params that are applied to the UI if the params are set before the UI is ready.
@@ -55,6 +59,7 @@ public class FourStateCookieSettingsPreference
// UI Elements.
private RadioButtonWithDescription mAllowButton;
+ private RadioButtonWithDescription mSessionOnlyButton;
private RadioButtonWithDescription mBlockThirdPartyIncognitoButton;
private RadioButtonWithDescription mBlockThirdPartyButton;
private RadioButtonWithDescription mBlockButton;
@@ -98,6 +103,8 @@ public class FourStateCookieSettingsPreference
if (mAllowButton.isChecked()) {
return CookieSettingsState.ALLOW;
+ } else if (mSessionOnlyButton.isChecked()) {
+ return CookieSettingsState.SESSION_ONLY;
} else if (mBlockThirdPartyIncognitoButton.isChecked()) {
return CookieSettingsState.BLOCK_THIRD_PARTY_INCOGNITO;
} else if (mBlockThirdPartyButton.isChecked()) {
@@ -118,6 +125,7 @@ public class FourStateCookieSettingsPreference
super.onBindViewHolder(holder);
mAllowButton = (RadioButtonWithDescription) holder.findViewById(R.id.allow);
+ mSessionOnlyButton = (RadioButtonWithDescription) holder.findViewById(R.id.session_only);
mBlockThirdPartyIncognitoButton =
(RadioButtonWithDescription) holder.findViewById(R.id.block_third_party_incognito);
mBlockThirdPartyButton =
@@ -144,7 +152,9 @@ public class FourStateCookieSettingsPreference
// reflect the only possible states you can be in
// (Allow/BlockThirdPartyIncognito/BlockThirdParty/Block), instead of using this
// combination of multiple signals.
- if (!params.allowCookies) {
+ if (params.sessionOnlyCookies) {
+ return CookieSettingsState.SESSION_ONLY;
+ } else if (!params.allowCookies) {
return CookieSettingsState.BLOCK;
} else if (params.blockThirdPartyCookies
|| params.cookieControlsMode == CookieControlsMode.BLOCK_THIRD_PARTY) {
@@ -159,6 +169,7 @@ public class FourStateCookieSettingsPreference
private void configureRadioButtons(Params params) {
assert (mRadioGroup != null);
mAllowButton.setEnabled(true);
+ mSessionOnlyButton.setEnabled(true);
mBlockThirdPartyIncognitoButton.setEnabled(true);
mBlockThirdPartyButton.setEnabled(true);
mBlockButton.setEnabled(true);
@@ -189,6 +200,8 @@ public class FourStateCookieSettingsPreference
switch (state) {
case ALLOW:
return mAllowButton;
+ case SESSION_ONLY:
+ return mSessionOnlyButton;
case BLOCK_THIRD_PARTY_INCOGNITO:
return mBlockThirdPartyIncognitoButton;
case BLOCK_THIRD_PARTY:
diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleCategorySettings.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleCategorySettings.java
old mode 100644
new mode 100755
--- a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleCategorySettings.java
+++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleCategorySettings.java
@@ -573,6 +573,7 @@ public class SingleCategorySettings extends SiteSettingsPreferenceFragment
private void setCookieSettingsPreference(CookieSettingsState state) {
boolean allowCookies;
+ boolean sessionOnly;
@CookieControlsMode
int mode;
@@ -580,23 +581,37 @@ public class SingleCategorySettings extends SiteSettingsPreferenceFragment
case ALLOW:
allowCookies = true;
mode = CookieControlsMode.OFF;
+ sessionOnly = false;
+ break;
+ case SESSION_ONLY:
+ allowCookies = true;
+ sessionOnly = true;
+ mode = CookieControlsMode.BLOCK_THIRD_PARTY;
break;
case BLOCK_THIRD_PARTY_INCOGNITO:
allowCookies = true;
mode = CookieControlsMode.INCOGNITO_ONLY;
+ sessionOnly = false;
break;
case BLOCK_THIRD_PARTY:
allowCookies = true;
mode = CookieControlsMode.BLOCK_THIRD_PARTY;
+ sessionOnly = false;
break;
case BLOCK:
allowCookies = false;
mode = CookieControlsMode.BLOCK_THIRD_PARTY;
+ sessionOnly = false;
break;
default:
return;
}
+ // reset cookies content setting to default
+ WebsitePreferenceBridge.setContentSetting(
+ getSiteSettingsClient().getBrowserContextHandle(), ContentSettingsType.COOKIES,
+ ContentSettingValues.DEFAULT);
+
WebsitePreferenceBridge.setCategoryEnabled(
getSiteSettingsClient().getBrowserContextHandle(), ContentSettingsType.COOKIES,
allowCookies);
@@ -604,6 +619,13 @@ public class SingleCategorySettings extends SiteSettingsPreferenceFragment
prefService.setInteger(COOKIE_CONTROLS_MODE, mode);
prefService.setBoolean(
BLOCK_THIRD_PARTY_COOKIES, mode == CookieControlsMode.BLOCK_THIRD_PARTY);
+
+ // set session-only content setting for cookies
+ if (sessionOnly) {
+ WebsitePreferenceBridge.setContentSetting(
+ getSiteSettingsClient().getBrowserContextHandle(), ContentSettingsType.COOKIES,
+ ContentSettingValues.SESSION_ONLY);
+ }
}
private boolean cookieSettingsExceptionShouldBlock() {
@@ -1084,6 +1106,13 @@ public class SingleCategorySettings extends SiteSettingsPreferenceFragment
params.allowCookies = WebsitePreferenceBridge.isCategoryEnabled(
getSiteSettingsClient().getBrowserContextHandle(), ContentSettingsType.COOKIES);
PrefService prefService = UserPrefs.get(getSiteSettingsClient().getBrowserContextHandle());
+
+ if (WebsitePreferenceBridge.getContentSetting(
+ getSiteSettingsClient().getBrowserContextHandle(),
+ mCategory.getContentSettingsType()) == ContentSettingValues.SESSION_ONLY) {
+ params.sessionOnlyCookies = true;
+ }
+
params.blockThirdPartyCookies = prefService.getBoolean(BLOCK_THIRD_PARTY_COOKIES);
params.cookieControlsMode = prefService.getInteger(COOKIE_CONTROLS_MODE);
params.cookiesContentSettingEnforced = mCategory.isManaged();
diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleWebsiteSettings.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleWebsiteSettings.java
old mode 100644
new mode 100755
--- a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleWebsiteSettings.java
+++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SingleWebsiteSettings.java
@@ -750,21 +750,37 @@ public class SingleWebsiteSettings extends SiteSettingsPreferenceFragment
setUpPreferenceCommon(preference);
ListPreference listPreference = (ListPreference) preference;
- CharSequence[] keys = new String[2];
- CharSequence[] descriptions = new String[2];
- keys[0] = ContentSetting.toString(ContentSettingValues.ALLOW);
- keys[1] = ContentSetting.toString(ContentSettingValues.BLOCK);
- descriptions[0] =
- getString(ContentSettingsResources.getSiteSummary(ContentSettingValues.ALLOW));
- descriptions[1] =
- getString(ContentSettingsResources.getSiteSummary(ContentSettingValues.BLOCK));
- listPreference.setEntryValues(keys);
- listPreference.setEntries(descriptions);
+ if (getContentSettingsTypeFromPreferenceKey(preference.getKey()) == ContentSettingsType.COOKIES) {
+ CharSequence[] keys = new String[3];
+ CharSequence[] descriptions = new String[3];
+ keys[0] = ContentSetting.toString(ContentSettingValues.ALLOW);
+ keys[1] = ContentSetting.toString(ContentSettingValues.BLOCK);
+ keys[2] = ContentSetting.toString(ContentSettingValues.SESSION_ONLY);
+ descriptions[0] =
+ getString(ContentSettingsResources.getSiteSummary(ContentSettingValues.ALLOW));
+ descriptions[1] =
+ getString(ContentSettingsResources.getSiteSummary(ContentSettingValues.BLOCK));
+ descriptions[2] =
+ getString(ContentSettingsResources.getSiteSummary(ContentSettingValues.SESSION_ONLY));
+ listPreference.setEntryValues(keys);
+ listPreference.setEntries(descriptions);
+ } else {
+ CharSequence[] keys = new String[2];
+ CharSequence[] descriptions = new String[2];
+ keys[0] = ContentSetting.toString(ContentSettingValues.ALLOW);
+ keys[1] = ContentSetting.toString(ContentSettingValues.BLOCK);
+ descriptions[0] =
+ getString(ContentSettingsResources.getSiteSummary(ContentSettingValues.ALLOW));
+ descriptions[1] =
+ getString(ContentSettingsResources.getSiteSummary(ContentSettingValues.BLOCK));
+ listPreference.setEntryValues(keys);
+ listPreference.setEntries(descriptions);
+ }
listPreference.setOnPreferenceChangeListener(this);
listPreference.setSummary(isEmbargoed ? getString(R.string.automatically_blocked) : "%s");
// TODO(crbug.com/735110): Figure out if this is the correct thing to do - here we are
// effectively treating non-ALLOW values as BLOCK.
- int index = (value == ContentSettingValues.ALLOW ? 0 : 1);
+ int index = (value == ContentSettingValues.SESSION_ONLY ? 2 : (value == ContentSettingValues.ALLOW ? 0 : 1));
listPreference.setValueIndex(index);
}
diff --git a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettings.java b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettings.java
old mode 100644
new mode 100755
--- a/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettings.java
+++ b/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/SiteSettings.java
@@ -70,6 +70,8 @@ public class SiteSettings
}
boolean requiresTriStateSetting =
WebsitePreferenceBridge.requiresTriStateContentSetting(contentType);
+ boolean requiresFourStateContentSetting =
+ WebsitePreferenceBridge.requiresFourStateContentSetting(contentType);
boolean checked = false;
@ContentSettingValues
@@ -81,6 +83,11 @@ public class SiteSettings
} else if (requiresTriStateSetting) {
setting = WebsitePreferenceBridge.getContentSetting(
browserContextHandle, contentType);
+ } else if (requiresFourStateContentSetting) {
+ setting = WebsitePreferenceBridge.getContentSetting(
+ browserContextHandle, contentType);
+ checked = WebsitePreferenceBridge.isCategoryEnabled(
+ browserContextHandle, contentType);
} else {
checked = WebsitePreferenceBridge.isCategoryEnabled(
browserContextHandle, contentType);
@@ -98,6 +105,8 @@ public class SiteSettings
.showPermissionBlockedMessage(getActivity())) {
// Show 'disabled' message when permission is not granted in Android.
p.setSummary(ContentSettingsResources.getCategorySummary(contentType, false));
+ } else if (Type.COOKIES == prefCategory && requiresFourStateContentSetting && setting == ContentSettingValues.SESSION_ONLY) {
+ p.setSummary(ContentSettingsResources.getCookieSessionOnlySummary());
} else if (Type.COOKIES == prefCategory && checked
&& UserPrefs.get(browserContextHandle).getBoolean(BLOCK_THIRD_PARTY_COOKIES)) {
p.setSummary(ContentSettingsResources.getCookieAllowedExceptThirdPartySummary());
diff --git a/components/browser_ui/strings/android/site_settings.grdp b/components/browser_ui/strings/android/site_settings.grdp
old mode 100644
new mode 100755
--- a/components/browser_ui/strings/android/site_settings.grdp
+++ b/components/browser_ui/strings/android/site_settings.grdp
@@ -345,8 +345,14 @@
Cookies are files created by websites you visit. Sites use them to remember your preferences. Third-party cookies are created by other sites. These sites own some of the content, like ads or images, that you see on the webpage you visit.
</message>
- <!-- JavaScript -->
+ <message name="IDS_WEBSITE_SETTINGS_CATEGORY_COOKIE_SESSION_ONLY_TITLE" desc="Text used to explain the session-only cookies in settings">
+ Session-only cookies
+ </message>
+ <message name="IDS_WEBSITE_SETTINGS_CATEGORY_COOKIE_SESSION_ONLY_ADDITION" desc="Additional text used to explain the session-only cookies option in settings">
+ Cookies are availables only until the browser is closed. Third-party cookies will be blocked.
+ </message>
+ <!-- JavaScript -->
<message name="IDS_WEBSITE_SETTINGS_CATEGORY_JAVASCRIPT_ALLOWED" desc="Summary text explaining that sites are allowed to run Javascript and that it is the recommended setting.">
Allow sites to run JavaScript (recommended)
</message>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_it.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_it.xtb
old mode 100644
new mode 100755
--- a/components/browser_ui/strings/android/translations/browser_ui_strings_it.xtb
+++ b/components/browser_ui/strings/android/translations/browser_ui_strings_it.xtb
@@ -253,4 +253,6 @@
<translation id="9074739597929991885">Bluetooth</translation>
<translation id="945632385593298557">Accesso al microfono</translation>
<translation id="965817943346481315">Blocca se il sito mostra annunci invasivi o fuorvianti (consigliato)</translation>
+<translation id="1709693995511170330">Solo cookies di sessione</translation>
+<translation id="1835270207120366221">Mantieni i cookies per la sessione corrente.</translation>
</translationbundle>
\ No newline at end of file
diff --git a/components/content_settings/core/browser/content_settings_registry.cc b/components/content_settings/core/browser/content_settings_registry.cc
old mode 100644
new mode 100755
diff --git a/components/data_use_measurement/core/data_use_measurement.cc b/components/data_use_measurement/core/data_use_measurement.cc
--- a/components/data_use_measurement/core/data_use_measurement.cc
+++ b/components/data_use_measurement/core/data_use_measurement.cc
@@ -33,6 +33,7 @@ bool IsInForeground(base::android::ApplicationState state) {
case base::android::APPLICATION_STATE_HAS_RUNNING_ACTIVITIES:
return true;
case base::android::APPLICATION_STATE_UNKNOWN:
+ case base::android::APPLICATION_STATE_EXITING:
case base::android::APPLICATION_STATE_HAS_PAUSED_ACTIVITIES:
case base::android::APPLICATION_STATE_HAS_STOPPED_ACTIVITIES:
case base::android::APPLICATION_STATE_HAS_DESTROYED_ACTIVITIES:
diff --git a/content/browser/scheduler/responsiveness/calculator.cc b/content/browser/scheduler/responsiveness/calculator.cc
old mode 100644
new mode 100755
--- a/content/browser/scheduler/responsiveness/calculator.cc
+++ b/content/browser/scheduler/responsiveness/calculator.cc
@@ -331,6 +331,7 @@ void Calculator::OnApplicationStateChanged(
is_application_visible_ = false;
break;
case base::android::APPLICATION_STATE_UNKNOWN:
+ case base::android::APPLICATION_STATE_EXITING:
break; // Keep in previous state.
}
}
diff --git a/mojo/public/cpp/base/application_state_mojom_traits.cc b/mojo/public/cpp/base/application_state_mojom_traits.cc
old mode 100644
new mode 100755
--- a/mojo/public/cpp/base/application_state_mojom_traits.cc
+++ b/mojo/public/cpp/base/application_state_mojom_traits.cc
@@ -22,6 +22,8 @@ mojo_base::mojom::ApplicationState EnumTraits<
return mojo_base::mojom::ApplicationState::HAS_STOPPED_ACTIVITIES;
case base::android::APPLICATION_STATE_HAS_DESTROYED_ACTIVITIES:
return mojo_base::mojom::ApplicationState::HAS_DESTROYED_ACTIVITIES;
+ case base::android::APPLICATION_STATE_EXITING:
+ return mojo_base::mojom::ApplicationState::APPLICATION_STATE_EXITING;
}
NOTREACHED();
return mojo_base::mojom::ApplicationState::UNKNOWN;
@@ -52,7 +54,10 @@ bool EnumTraits<mojo_base::mojom::ApplicationState,
*output = base::android::ApplicationState::
APPLICATION_STATE_HAS_DESTROYED_ACTIVITIES;
return true;
- }
+ case mojo_base::mojom::ApplicationState::APPLICATION_STATE_EXITING:
+ *output = base::android::ApplicationState::
+ APPLICATION_STATE_EXITING;
+ return true; }
return false;
}
diff --git a/mojo/public/mojom/base/application_state.mojom b/mojo/public/mojom/base/application_state.mojom
old mode 100644
new mode 100755
--- a/mojo/public/mojom/base/application_state.mojom
+++ b/mojo/public/mojom/base/application_state.mojom
@@ -11,4 +11,5 @@ enum ApplicationState {
HAS_PAUSED_ACTIVITIES,
HAS_STOPPED_ACTIVITIES,
HAS_DESTROYED_ACTIVITIES,
+ APPLICATION_STATE_EXITING
};
diff --git a/services/network/cookie_manager.cc b/services/network/cookie_manager.cc
old mode 100644
new mode 100755
--- a/services/network/cookie_manager.cc
+++ b/services/network/cookie_manager.cc
@@ -60,6 +60,10 @@ CookieManager::CookieManager(
cookie_store_->SetCookieAccessDelegate(
std::make_unique<CookieAccessDelegateImpl>(cookie_access_delegate_type,
&cookie_settings_));
+ if(session_cleanup_cookie_store_) {
+ session_cleanup_cookie_store_->SetDefaultDeleteCookiePredicate(
+ cookie_settings_.CreateDeleteCookieOnExitPredicate());
+ }
}
CookieManager::~CookieManager() {
@@ -73,6 +77,16 @@ CookieManager::~CookieManager() {
cookie_store_->SetCookieAccessDelegate(nullptr);
}
+void CookieManager::DeleteSessionCookies()
+{
+ // anonymous profile doesn't have a session_cleanup_cookie_store
+ if (session_cleanup_cookie_store_) {
+ session_cleanup_cookie_store_->DeleteSessionCookies(
+ cookie_settings_.CreateDeleteCookieOnExitPredicate());
+ }
+}
+
+
void CookieManager::AddReceiver(
mojo::PendingReceiver<mojom::CookieManager> receiver) {
receivers_.Add(this, std::move(receiver));
diff --git a/services/network/cookie_manager.h b/services/network/cookie_manager.h
old mode 100644
new mode 100755
--- a/services/network/cookie_manager.h
+++ b/services/network/cookie_manager.h
@@ -101,6 +101,9 @@ class COMPONENT_EXPORT(NETWORK_SERVICE) CookieManager
// Causes the next call to GetCookieList to crash the process.
static void CrashOnGetCookieList();
+ // launch session_cleanup_cookie_store_()
+ void DeleteSessionCookies() override;
+
private:
// State associated with a CookieChangeListener.
struct ListenerRegistration {
diff --git a/services/network/network_context.cc b/services/network/network_context.cc
old mode 100644
new mode 100755
--- a/services/network/network_context.cc
+++ b/services/network/network_context.cc
@@ -291,12 +291,23 @@ class NetworkContextApplicationStatusListener
}
void Notify(base::android::ApplicationState state) override {
+ if(cookie_manager_) {
+ if(state == base::android::APPLICATION_STATE_EXITING) {
+ cookie_manager_->DeleteSessionCookies();
+ }
+ }
+
if (callback_)
callback_.Run(state);
}
+ void SetCookieManager(CookieManager* cookie_manager) {
+ cookie_manager_ = cookie_manager;
+ }
+
private:
ApplicationStateChangeCallback callback_;
+ CookieManager* cookie_manager_;
};
#endif
@@ -2169,6 +2180,12 @@ URLRequestContextOwner NetworkContext::MakeURLRequestContext(
std::move(session_cleanup_cookie_store),
std::move(params_->cookie_manager_params));
+#if defined(OS_ANDROID)
+
+ (static_cast<NetworkContextApplicationStatusListener*>(app_status_listener_.get()))->SetCookieManager(cookie_manager_.get());
+
+#endif
+
if (cert_net_fetcher_)
cert_net_fetcher_->SetURLRequestContext(result.url_request_context.get());
diff --git a/services/network/public/mojom/cookie_manager.mojom b/services/network/public/mojom/cookie_manager.mojom
old mode 100644
new mode 100755
--- a/services/network/public/mojom/cookie_manager.mojom
+++ b/services/network/public/mojom/cookie_manager.mojom
@@ -378,4 +378,7 @@ interface CookieManager {
// the caller with a callback when settings have been updated.
SetStorageAccessGrantSettings(
array<content_settings.mojom.ContentSettingPatternSource> settings) => ();
+
+ // launch session_cleanup_cookie_store_()
+ DeleteSessionCookies();
};
diff --git a/services/network/session_cleanup_cookie_store.cc b/services/network/session_cleanup_cookie_store.cc
old mode 100644
new mode 100755
--- a/services/network/session_cleanup_cookie_store.cc
+++ b/services/network/session_cleanup_cookie_store.cc
@@ -49,6 +49,11 @@ SessionCleanupCookieStore::~SessionCleanupCookieStore() {
"SessionCleanupCookieStore");
}
+void SessionCleanupCookieStore::SetDefaultDeleteCookiePredicate(DeleteCookiePredicate delete_cookie_predicate)
+{
+ delete_cookie_predicate_ = delete_cookie_predicate;
+}
+
void SessionCleanupCookieStore::DeleteSessionCookies(
DeleteCookiePredicate delete_cookie_predicate) {
using CookieOrigin = net::SQLitePersistentCookieStore::CookieOrigin;
@@ -137,6 +142,40 @@ void SessionCleanupCookieStore::OnLoad(
++cookies_per_origin_[origin];
}
+#if defined(OS_ANDROID)
+ // In android delete session cookies is never called because it's in dtor(), launch now at restart
+ using CookieOrigin = net::SQLitePersistentCookieStore::CookieOrigin;
+ if (!force_keep_session_state_ && delete_cookie_predicate_)
+ {
+ std::list<CookieOrigin> session_only_cookies;
+
+ auto cookies_filtered =
+ std::remove_if(
+ cookies.begin(),
+ cookies.end(),
+ [this,&session_only_cookies](const auto& entry) {
+ bool mustRemoved = false;
+ CookieOrigin origin(entry->Domain(), entry->IsSecure());
+ if(cookies_per_origin_cleared_[origin] == false)
+ {
+ mustRemoved = delete_cookie_predicate_.Run(origin.first, origin.second);
+ }
+ if( mustRemoved ) session_only_cookies.push_back(origin);
+ return mustRemoved;
+ });
+
+ cookies.erase(cookies_filtered, cookies.end());
+
+ // We need to remove session by origin once
+ for (const auto& cookie : cookies) {
+ CookieOrigin origin(cookie->Domain(), cookie->IsSecure());
+ cookies_per_origin_cleared_[origin] = true;
+ }
+
+ persistent_store_->DeleteAllInList(session_only_cookies);
+ }
+#endif
+
std::move(loaded_callback).Run(std::move(cookies));
}
diff --git a/services/network/session_cleanup_cookie_store.h b/services/network/session_cleanup_cookie_store.h
old mode 100644
new mode 100755
--- a/services/network/session_cleanup_cookie_store.h
+++ b/services/network/session_cleanup_cookie_store.h
@@ -59,6 +59,11 @@ class COMPONENT_EXPORT(NETWORK_SERVICE) SessionCleanupCookieStore
// |delete_cookie_predicate| returns true for.
void DeleteSessionCookies(DeleteCookiePredicate delete_cookie_predicate);
+ // Used on android to force deletion of session cookies
+ using CookiesPerOriginClearedMap =
+ std::map<net::SQLitePersistentCookieStore::CookieOrigin, bool>;
+ void SetDefaultDeleteCookiePredicate(DeleteCookiePredicate delete_cookie_predicate);
+
protected:
~SessionCleanupCookieStore() override;
@@ -80,6 +85,10 @@ class COMPONENT_EXPORT(NETWORK_SERVICE) SessionCleanupCookieStore
net::NetLogWithSource net_log_;
+ // Used on android to force deletion of session cookies
+ DeleteCookiePredicate delete_cookie_predicate_;
+ CookiesPerOriginClearedMap cookies_per_origin_cleared_;
+
DISALLOW_COPY_AND_ASSIGN(SessionCleanupCookieStore);
};
--
2.17.1