blob: 42673261661131d458c36d2905f2ae42294a0379 [file] [log] [blame]
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2019 The Chromium Authors
Use of this source code is governed by a BSD-style license that can be
found in the LICENSE file.
-->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="org.chromium.weblayer.client">
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission-sdk-23 android:name="android.permission.BLUETOOTH"/>
<uses-permission-sdk-23 android:name="android.permission.BLUETOOTH_ADMIN" android:maxSdkVersion="30"/>
<uses-permission-sdk-23 android:name="android.permission.BLUETOOTH_CONNECT"/>
<!--
Bluetooth scanning is used to implement the Web Bluetooth API, which is
not intended to allow sites to derive location and so can accept a
filtered view of devices.
-->
<uses-permission-sdk-23 android:name="android.permission.BLUETOOTH_SCAN"
android:usesPermissionFlags="neverForLocation"/>
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
<uses-permission android:name="android.permission.NFC"/>
<uses-permission android:name="android.permission.READ_CONTACTS"/>
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<uses-permission android:name="android.permission.VIBRATE"/>
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<!-- Augmented reality support.
A note to clients: for AR to work, there must be manifest entries present for
com.google.ar.core and com.google.ar.core.min_apk_version. These can be merged
from the arcore client library or added manually. If being added manually,
the following is recommended:
<meta-data android:name="com.google.ar.core"
android:value="optional" />
<meta-data android:name="com.google.ar.core.min_apk_version"
android:value="1" />
-->
<queries>
<package android:name="com.google.ar.core" />
</queries>
<application>
<!-- The following service entries exist in order to allow us to
start more than one sandboxed process. -->
<!-- NOTE: If you change the values of "android:process" for any of the below services,
you also need to update kHelperProcessExecutableName in chrome_constants.cc. -->
{% set num_sandboxed_services = 40 %}
<meta-data android:name="org.chromium.content.browser.NUM_SANDBOXED_SERVICES"
android:value="{{ num_sandboxed_services }}"/>
{% for i in range(num_sandboxed_services) %}
<service android:name="org.chromium.weblayer.ChildProcessService$Sandboxed{{ i }}"
android:process=":sandboxed_process{{ i }}"
android:isolatedProcess="true"
android:exported="false" />
{% endfor %}
{% set num_privileged_services = 5 %}
<meta-data android:name="org.chromium.content.browser.NUM_PRIVILEGED_SERVICES"
android:value="{{ num_privileged_services }}"/>
{% for i in range(num_privileged_services) %}
<service android:name="org.chromium.weblayer.ChildProcessService$Privileged{{ i }}"
android:process=":privileged_process{{ i }}"
android:isolatedProcess="false"
android:exported="false" />
{% endfor %}
<provider android:name="org.chromium.weblayer.WebLayerFileProvider"
android:authorities="${applicationId}.org.chromium.weblayer.client.FileProvider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/weblayer_file_paths" />
</provider>
<activity android:name="org.chromium.weblayer.SettingsActivity"
android:theme="@style/Theme.WebLayer.Settings"
android:exported="false">
</activity>
<activity android:name="org.chromium.weblayer.SiteSettingsActivity"
android:theme="@style/Theme.WebLayer.Settings"
android:exported="false">
</activity>
<receiver android:name="org.chromium.weblayer.BroadcastReceiver"
android:exported="false">
<intent-filter>
<!-- these need to be in sync with DownloadImpl.java-->
<action android:name="org.chromium.weblayer.downloads.OPEN"/>
<action android:name="org.chromium.weblayer.downloads.DELETE"/>
<action android:name="org.chromium.weblayer.downloads.PAUSE"/>
<action android:name="org.chromium.weblayer.downloads.RESUME"/>
<action android:name="org.chromium.weblayer.downloads.CANCEL"/>
<!-- this needs to be in sync with IntentUtils.java-->
<action android:name="org.chromium.weblayer.intent_utils.ACTIVATE_TAB"/>
<!-- this needs to be in sync with MediaStreamManager.java-->
<!-- TODO(estade): deprecated, remove in M88. -->
<action android:name="org.chromium.weblayer.webrtc.ACTIVATE_TAB"/>
</intent-filter>
</receiver>
<service android:name="org.chromium.weblayer.MediaSessionService"
android:exported="false">
<intent-filter>
<action android:name="android.intent.action.MEDIA_BUTTON" />
</intent-filter>
</service>
<service android:name="org.chromium.weblayer.RemoteMediaService"
android:exported="false">
<intent-filter>
<action android:name="android.intent.action.MEDIA_BUTTON" />
</intent-filter>
</service>
<!-- Service for decoding images in a sandboxed process. -->
<service
android:name="org.chromium.weblayer.ImageDecoderService"
android:exported="false"
android:isolatedProcess="true"
android:process=":decoder_service" />
<!-- Used for GPay Dynamic Update -->
<service
android:name="org.chromium.weblayer.GooglePayDataCallbacksServiceWrapper"
android:permission="com.google.android.gms.permission.BIND_PAYMENTS_CALLBACK_SERVICE"
android:exported="true">
<intent-filter>
<action android:name="com.google.android.gms.wallet.callback.PAYMENT_DATA_CALLBACKS"/>
</intent-filter>
</service>
<!-- GooglePay payment app support -->
<meta-data
android:name="com.google.android.gms.wallet.api.enabled"
android:value="true" />
<!-- Service used by payment apps to notify the browser about changes in user selected
payment method, shipping address, or shipping option. -->
<service
android:name="org.chromium.weblayer.PaymentDetailsUpdateServiceWrapper"
android:exported="true">
<intent-filter>
<action android:name="org.chromium.intent.action.UPDATE_PAYMENT_DETAILS"/>
</intent-filter>
</service>
<!-- Cast support -->
<!-- TODO(crbug.com/1148410): remove this. -->
<meta-data
android:name="com.google.android.gms.cast.framework.OPTIONS_PROVIDER_CLASS_NAME"
android:value="org.chromium.components.media_router.caf.CastOptionsProvider"/>
</application>
</manifest>