summaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authorAlex Klyubin <klyubin@google.com>2015-03-18 10:05:45 -0700
committerAlex Klyubin <klyubin@google.com>2015-03-18 10:46:56 -0700
commit01a959d60a2c5f04ab240513a853d7845b3a309e (patch)
tree02c10d249e018e9b03d7c74b4ca67f295a5bcf49 /core
parentf3e581c99f33ae1857fa52b11cf9bfbfe400c553 (diff)
downloadframeworks_base-01a959d60a2c5f04ab240513a853d7845b3a309e.zip
frameworks_base-01a959d60a2c5f04ab240513a853d7845b3a309e.tar.gz
frameworks_base-01a959d60a2c5f04ab240513a853d7845b3a309e.tar.bz2
Add app-level usesCleartextTraffic manifest attribute.
The attribute declares whether the app intends to use cleartext network traffic (e.g., HTTP, WebSockets, XMPP, SMTP, IMAP -- without TLS or STARTTLS). The default value is true. If set to false, the app declares that it does not intend to use cleartext network traffic. In this case the app requests the platform, tooling, and third-party libraries to prevent it from using cleartext traffic. The danger of cleartext network traffic is that its confidentiality, authenticity, and integrity are not guaranteed. This feature is designed to help apps which care about security of data exchanged over the network. These apps can accidentally regress/downgrade to using cleartext network communications. This typically happens when the server the app communicates with all of a sudden tells it to use cleartext communications (e.g, HTTP URL instead of an HTTPS URL) or when one of the components of the app gets updated and regresses to cleartext communications without the developer noticing. In general, the prevention measures are on best effort basis. It's impossible to automatically prevent all instances of cleartext traffic. For example, an app bent on bypassing restrictions could perform low-level network I/O with unusual TCP packet fragmentation, or could use a custom application-level protocol. The expectation is that most apps use libraries for network communications and these libraries over time will start to honor this flag, thus increasing the protections offered by it. Bug: 19215516 Change-Id: I8700d51ddbc5d528faa4b6a5fa5bc9551ad02d13
Diffstat (limited to 'core')
-rw-r--r--core/java/android/content/pm/ApplicationInfo.java12
-rw-r--r--core/java/android/content/pm/PackageParser.java6
-rw-r--r--core/res/res/values/attrs_manifest.xml17
3 files changed, 35 insertions, 0 deletions
diff --git a/core/java/android/content/pm/ApplicationInfo.java b/core/java/android/content/pm/ApplicationInfo.java
index e1a2aa9..05c19db 100644
--- a/core/java/android/content/pm/ApplicationInfo.java
+++ b/core/java/android/content/pm/ApplicationInfo.java
@@ -334,6 +334,18 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable {
public static final int FLAG_FULL_BACKUP_ONLY = 1<<26;
/**
+ * Value for {@link #flags}: {@code true} if the application may use cleartext network traffic
+ * (e.g., HTTP rather than HTTPS; WebSockets rather than WebSockets Secure; XMPP, IMAP, STMP
+ * without STARTTLS or TLS). If {@code false}, the app declares that it does not intend to use
+ * cleartext network traffic, in which case platform components (e.g., HTTP stacks,
+ * {@code WebView}, {@code MediaPlayer}) will refuse app's requests to use cleartext traffic.
+ * Third-party libraries are encouraged to honor this flag as well.
+ *
+ * @hide
+ */
+ public static final int FLAG_USES_CLEARTEXT_TRAFFIC = 1<<27;
+
+ /**
* Value for {@link #flags}: true if code from this application will need to be
* loaded into other applications' processes. On devices that support multiple
* instruction sets, this implies the code might be loaded into a process that's
diff --git a/core/java/android/content/pm/PackageParser.java b/core/java/android/content/pm/PackageParser.java
index 4d9445d..4952ba1 100644
--- a/core/java/android/content/pm/PackageParser.java
+++ b/core/java/android/content/pm/PackageParser.java
@@ -2550,6 +2550,12 @@ public class PackageParser {
}
if (sa.getBoolean(
+ com.android.internal.R.styleable.AndroidManifestApplication_usesCleartextTraffic,
+ true)) {
+ ai.flags |= ApplicationInfo.FLAG_USES_CLEARTEXT_TRAFFIC;
+ }
+
+ if (sa.getBoolean(
com.android.internal.R.styleable.AndroidManifestApplication_supportsRtl,
false /* default is no RTL support*/)) {
ai.flags |= ApplicationInfo.FLAG_SUPPORTS_RTL;
diff --git a/core/res/res/values/attrs_manifest.xml b/core/res/res/values/attrs_manifest.xml
index 0c3fb9a..ea592cf 100644
--- a/core/res/res/values/attrs_manifest.xml
+++ b/core/res/res/values/attrs_manifest.xml
@@ -389,6 +389,15 @@
with the same {@link android.R.attr#taskAffinity} as it has. -->
<attr name="allowTaskReparenting" format="boolean" />
+ <!-- Declare that this application may use cleartext traffic (e.g., HTTP rather than HTTPS;
+ WebSockets rather than WebSockets Secure; XMPP, IMAP, STMP without STARTTLS or TLS).
+ Defaults to true. If set to false {@code false}, the app declares that it does not
+ intend to use cleartext network traffic, in which case platform components (e.g.,
+ HTTP stacks, {@code WebView}, {@code MediaPlayer}) will refuse app's requests to use
+ cleartext traffic. Third-party libraries are encouraged to honor this flag as well.
+ @hide -->
+ <attr name="usesCleartextTraffic" format="boolean" />
+
<!-- Declare that code from this application will need to be loaded into other
applications' processes. On devices that support multiple instruction sets,
this implies the code might be loaded into a process that's using any of the devices
@@ -1133,6 +1142,14 @@
"com.google". -->
<attr name="requiredAccountType" format="string"/>
<attr name="isGame" />
+ <!-- Declare that this application may use cleartext traffic (e.g., HTTP rather than HTTPS;
+ WebSockets rather than WebSockets Secure; XMPP, IMAP, STMP without STARTTLS or TLS).
+ Defaults to true. If set to false {@code false}, the app declares that it does not
+ intend to use cleartext network traffic, in which case platform components (e.g.,
+ HTTP stacks, {@code WebView}, {@code MediaPlayer}) will refuse app's requests to use
+ cleartext traffic. Third-party libraries are encouraged to honor this flag as well.
+ @hide -->
+ <attr name="usesCleartextTraffic" />
<attr name="multiArch" />
</declare-styleable>