1461 lines
75 KiB
XML
Executable File
1461 lines
75 KiB
XML
Executable File
<?xml version="1.0" encoding="utf-8"?>
|
|
<!--
|
|
Copyright 2015 The Chromium Authors
|
|
Use of this source code is governed by a BSD-style license that can be
|
|
found in the LICENSE file.
|
|
-->
|
|
|
|
<!--
|
|
Note: This is a jinja2 template, processed at build time into the final manifest.
|
|
|
|
Blocks denoted with { % block some_name % }foo{ % endblock % } can be overridden
|
|
by a child template that "extends" this file.
|
|
-->
|
|
|
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
|
xmlns:tools="http://schemas.android.com/tools"
|
|
package="{{ manifest_package }}"
|
|
{% set definitions_in_split = definitions_in_split|default(0) == 'true' %}
|
|
{% if definitions_in_split %}
|
|
android:isolatedSplits="true"
|
|
{% endif %}
|
|
tools:ignore="MissingVersion">
|
|
<!-- android:versionCode and android:versionName is set through gyp. See build/common.gypi -->
|
|
|
|
<uses-feature android:glEsVersion="0x00030000" />
|
|
|
|
|
|
<!-- Needed for
|
|
* servicing requests from websites to obtain location through the Web Geolocation API,
|
|
which, however, is further gated on the user expressly granting the geolocation
|
|
permission to individual web origins
|
|
* supporting bluetooth discovery pre-S
|
|
* providing a geolocation header to the default search engine; used to annotate omnibox
|
|
suggestions, search prefetch and search navigation requests.
|
|
-->
|
|
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
|
|
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
|
|
|
|
<uses-permission-sdk-23 android:name="android.permission.ACCESS_WIFI_STATE" />
|
|
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
|
|
|
<uses-permission-sdk-23 android:name="android.permission.ACCESS_ADSERVICES_ATTRIBUTION" />
|
|
<uses-permission-sdk-23 android:name="android.permission.BLUETOOTH_ADMIN" android:maxSdkVersion="30"/>
|
|
<uses-permission-sdk-23 android:name="android.permission.BLUETOOTH_CONNECT"/>
|
|
<!--
|
|
Bluetooth advertising is used by Phone as a Security Key to allow
|
|
a desktop device to prove proximity by receiving a BLE advert from the
|
|
phone.
|
|
-->
|
|
<uses-permission-sdk-23 android:name="android.permission.BLUETOOTH_ADVERTISE"/>
|
|
<!--
|
|
The BLUETOOTH permission is needed for
|
|
BluetoothAdapter.ACTION_REQUEST_ENABLE which at least Phone as a Security
|
|
Key uses.
|
|
-->
|
|
<uses-permission-sdk-23 android:name="android.permission.BLUETOOTH"/>
|
|
<!--
|
|
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-sdk-23 android:name="android.permission.READ_CONTACTS"/>
|
|
<uses-permission-sdk-23 android:name="android.permission.REORDER_TASKS"/>
|
|
|
|
<!-- Needed for allowing downloaded APKs to be installed. -->
|
|
<uses-permission-sdk-23 android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>
|
|
|
|
<uses-permission android:name="android.permission.CAMERA" />
|
|
<uses-permission android:name="android.permission.CAPTURE_KEYBOARD" />
|
|
<uses-permission android:name="android.permission.DOWNLOAD_WITHOUT_NOTIFICATION" />
|
|
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
|
|
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_CAMERA" />
|
|
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_MICROPHONE" />
|
|
{% set enable_screen_capture = enable_screen_capture|default(0) %}
|
|
{% if enable_screen_capture == "true" %}
|
|
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PROJECTION" />
|
|
{% endif %}
|
|
<!-- TODO(crbug.com/40259231): Remove this tools:ignore attribute once it's no longer necessary. -->
|
|
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK" tools:ignore="SystemPermissionTypo" />
|
|
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_DATA_SYNC" tools:ignore="SystemPermissionTypo" />
|
|
<uses-permission android:name="android.permission.RUN_USER_INITIATED_JOBS" />
|
|
|
|
<uses-permission android:name="android.permission.GET_ACCOUNTS"/>
|
|
<uses-permission android:name="android.permission.INTERNET"/>
|
|
<uses-permission android:name="android.permission.MANAGE_ACCOUNTS"/>
|
|
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
|
|
<uses-permission android:name="android.permission.NFC"/>
|
|
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
|
|
|
|
<!-- Needed to determine whether an app installed on the device should handle a web navigation. -->
|
|
<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" />
|
|
|
|
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
|
|
|
|
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
|
|
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
|
|
<!--
|
|
The REPOSITION_SELF_WINDOWS permission is needed for Window Popup Web API to allow Chrome to
|
|
move windows when the |window.moveTo| JavaScript call is executed (also |window.{resizeBy,
|
|
resizeTo, moveBy}|).
|
|
-->
|
|
<uses-permission android:name="android.permission.REPOSITION_SELF_WINDOWS"/>
|
|
<uses-permission android:name="android.permission.USE_CREDENTIALS"/>
|
|
<uses-permission-sdk-23 android:name="android.permission.USE_BIOMETRIC"/>
|
|
<uses-permission-sdk-23 android:name="android.permission.USE_FINGERPRINT"/>
|
|
<uses-permission android:name="android.permission.VIBRATE"/>
|
|
<uses-permission android:name="android.permission.WAKE_LOCK"/>
|
|
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
|
|
|
|
<!-- Permission for using Android 14's credential management framework. -->
|
|
<uses-permission android:name="android.permission.CREDENTIAL_MANAGER_QUERY_CANDIDATE_CREDENTIALS"/>
|
|
<uses-permission android:name="android.permission.CREDENTIAL_MANAGER_SET_ALLOWED_PROVIDERS"/>
|
|
<uses-permission android:name="android.permission.CREDENTIAL_MANAGER_SET_ORIGIN"/>
|
|
|
|
<!-- Permission for reading the Advanced Protection Mode status. -->
|
|
<uses-permission android:name="android.permission.QUERY_ADVANCED_PROTECTION_MODE"/>
|
|
|
|
<!-- Needed for allowing cross-app and cross-profile communication over the loopback interface. -->
|
|
<uses-permission android:name="android.permission.USE_LOOPBACK_INTERFACE"/>
|
|
|
|
{% set enable_vr = enable_vr|default(0) %}
|
|
{% if enable_vr == "true" %}
|
|
<!-- Indicates use of Android's VR-mode, available only on Android N+. -->
|
|
<uses-feature android:name="android.software.vr.mode" android:required="false"/>
|
|
<!-- Indicates use of VR features that are available only on Daydream-ready devices. -->
|
|
<uses-feature android:name="android.hardware.vr.high_performance" android:required="false"/>
|
|
<!--
|
|
Indicates that we don't need Chrome to be available on devices that only support landscape
|
|
orientation. This is needed because we have VR specific activities that declare the
|
|
android:orientation attribute.
|
|
-->
|
|
<uses-feature android:name="android.hardware.screen.landscape" android:required="false"/>
|
|
<!-- Indicates that head tracking should be done in 6DoF, if available -->
|
|
<uses-feature android:name="android.hardware.vr.headtracking" android:version="1" android:required="false"/>
|
|
<!-- Feature declarations required to support conditional install for VR DFM -->
|
|
<uses-feature android:name="android.hardware.sensor.gyroscope" android:required="false"/>
|
|
<uses-feature android:name="android.hardware.sensor.accelerometer" android:required="false"/>
|
|
|
|
<uses-permission-sdk-23 android:name="android.permission.SCENE_UNDERSTANDING_FINE" />
|
|
<uses-permission-sdk-23 android:name="android.permission.HAND_TRACKING" />
|
|
{% endif %}
|
|
|
|
<permission android:name="{{ manifest_package }}.permission.CHILD_SERVICE" android:protectionLevel="signature" />
|
|
<permission android:name="{{ manifest_package }}.permission.READ_WRITE_BOOKMARK_FOLDERS" android:protectionLevel="signatureOrSystem" />
|
|
<permission android:name="{{ manifest_package }}.TOS_ACKED" android:protectionLevel="signatureOrSystem" />
|
|
<!-- Only chrome can receive the messages and registration result -->
|
|
<permission android:name="{{ manifest_package }}.permission.C2D_MESSAGE"
|
|
android:protectionLevel="signature" />
|
|
<permission android:name="{{ manifest_package }}.permission.DEBUG"
|
|
android:label="Debug web pages"
|
|
android:protectionLevel="signature" />
|
|
|
|
<uses-permission android:name="{{ manifest_package }}.permission.C2D_MESSAGE" />
|
|
<uses-permission android:name="{{ manifest_package }}.permission.READ_WRITE_BOOKMARK_FOLDERS" />
|
|
<uses-permission android:name="{{ manifest_package }}.TOS_ACKED" />
|
|
|
|
<uses-permission android:name="com.chrome.permission.DEVICE_EXTRAS" />
|
|
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
|
|
<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT"/>
|
|
|
|
<uses-permission android:name="com.google.android.apps.now.CURRENT_ACCOUNT_ACCESS" />
|
|
|
|
<!-- Permission for using pinned windowing layer for document picture-in-picture. -->
|
|
<uses-permission android:name="android.permission.USE_PINNED_WINDOWING_LAYER" />
|
|
|
|
{% block extra_uses_permissions %}
|
|
{% endblock %}
|
|
|
|
<!-- Features related to permissions we request. -->
|
|
<!-- android.permission.ACCESS_FINE_LOCATION -->
|
|
<uses-feature android:name="android.hardware.location.gps" android:required="false" />
|
|
<!-- android.permission.CAMERA -->
|
|
<uses-feature android:name="android.hardware.camera" android:required="false" />
|
|
<uses-feature android:name="android.hardware.camera.autofocus" android:required="false" />
|
|
<!-- android.permission.RECORD_AUDIO -->
|
|
<uses-feature android:name="android.hardware.microphone" android:required="false" />
|
|
<!--
|
|
The app is usable with keyboard/mouse. This feature is implicitly true for
|
|
all applications and needs to be disabled manually.
|
|
-->
|
|
<uses-feature android:name="android.hardware.touchscreen" android:required="false" />
|
|
|
|
{% block extra_keyset_definitions %}
|
|
{% endblock %}
|
|
|
|
{% if channel in ['default'] %}
|
|
<!--
|
|
Android 11 (R) restricts querying for installed packages. WebXR uses
|
|
ARCore and/or GVR, and needs to be able to check their installation
|
|
status so that it can show install/update infobars if necessary.
|
|
Official builds (stable, beta, dev, canary) handle this differently,
|
|
this setting is for locally deployed ToT builds only.
|
|
|
|
TODO(crbug.com/40715928): remove if this is replaced by an
|
|
alternate mechanism.
|
|
-->
|
|
<queries>
|
|
{% if enable_vr == "true" %}
|
|
<package android:name="com.google.vr.vrcore" />
|
|
{% endif %}
|
|
</queries>
|
|
{% endif %}
|
|
|
|
<!-- Set android:largeHeap to "true" to allow more than the default
|
|
Java heap limit (32Mb on Nexus S, 48Mb on Xoom). -->
|
|
<application android:name="{% block application_name %}org.chromium.chrome.browser.base.SplitChromeApplication{% endblock %}"
|
|
android:icon="@drawable/ic_launcher"
|
|
android:roundIcon="@drawable/ic_launcher_round"
|
|
android:label="{% block application_label %}@string/app_name{% endblock %}"
|
|
android:memtagMode="async"
|
|
android:largeHeap="false"
|
|
android:manageSpaceActivity="@string/manage_space_activity"
|
|
android:supportsRtl="true"
|
|
android:zygotePreloadName="{{ zygote_preload_class }}"
|
|
{% if backup_key is defined %}
|
|
android:allowBackup="true"
|
|
android:backupAgent="org.chromium.chrome.browser.backup.ChromeBackupAgent"
|
|
android:fullBackupOnly="false"
|
|
android:restoreAnyVersion="true"
|
|
{% else %}
|
|
android:allowBackup="false"
|
|
{% endif %}
|
|
android:networkSecurityConfig="@xml/network_security_config"
|
|
android:appComponentFactory="org.chromium.chrome.browser.base.SplitCompatAppComponentFactory"
|
|
android:enableOnBackInvokedCallback="true"
|
|
{% if javaless_renderers is defined %}
|
|
android:zygotePreloadNativeLib="lib{{ library_name }}.so"
|
|
{% endif %}
|
|
{% block extra_application_attributes %}{% endblock %}>
|
|
|
|
{% if channel in ['canary', 'dev', 'default'] %}
|
|
<profileable android:shell="true"/>
|
|
{% endif %}
|
|
|
|
{% macro application_definitions() %}
|
|
<!-- Note: All activities directly or indirectly derived from ChromeActivity
|
|
must specify android:hardwareAccelerated="false".
|
|
|
|
Since this activity (shown in the launcher) and the application
|
|
(shown in Android's Settings/Apps list) share the same label, we
|
|
do not specify one here to allow it to inherit from the app. -->
|
|
<activity android:name="org.chromium.chrome.browser.document.ChromeLauncherActivity"
|
|
android:theme="@style/LauncherTheme"
|
|
android:relinquishTaskIdentity="true"
|
|
android:taskAffinity=""
|
|
android:excludeFromRecents="true"
|
|
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|mcc|mnc|screenLayout|smallestScreenSize|uiMode|density">
|
|
</activity>
|
|
<activity-alias android:name="com.google.android.apps.chrome.IntentDispatcher"
|
|
android:targetActivity="org.chromium.chrome.browser.document.ChromeLauncherActivity"
|
|
android:exported="true">
|
|
<intent-filter>
|
|
<action android:name="android.intent.action.MAIN" />
|
|
<category android:name="android.intent.category.NOTIFICATION_PREFERENCES" />
|
|
</intent-filter>
|
|
<!-- Matches the common case of intents with no MIME type.
|
|
Make sure to keep in sync with the next filter. -->
|
|
<intent-filter>
|
|
{% block common_view_intent_shared_filter_body %}
|
|
<action android:name="android.intent.action.VIEW" />
|
|
<category android:name="android.intent.category.DEFAULT" />
|
|
{% if channel in ['stable', 'default'] %}<data android:scheme="googlechrome" />{% endif %}
|
|
<data android:scheme="http" />
|
|
<data android:scheme="https" />
|
|
<data android:scheme="about" />
|
|
<category android:name="android.intent.category.BROWSABLE" />
|
|
{% endblock %}
|
|
</intent-filter>
|
|
<!-- Same filter as above but with MIME types. Intents that
|
|
do not specify a MIME type won't match. -->
|
|
<intent-filter>
|
|
{{ self.common_view_intent_shared_filter_body() }}
|
|
<data android:mimeType="text/html"/>
|
|
<data android:mimeType="text/plain"/>
|
|
<data android:mimeType="application/xhtml+xml"/>
|
|
</intent-filter>
|
|
<!-- URL share intent support. -->
|
|
<intent-filter>
|
|
<action android:name="android.intent.action.SEND" />
|
|
<category android:name="android.intent.category.DEFAULT" />
|
|
<data android:mimeType="text/plain"/>
|
|
</intent-filter>
|
|
<!-- content URI support. -->
|
|
<intent-filter>
|
|
<action android:name="android.intent.action.VIEW" />
|
|
<category android:name="android.intent.category.DEFAULT" />
|
|
<data android:scheme="content" />
|
|
<data android:mimeType="text/html"/>
|
|
<data android:mimeType="text/plain"/>
|
|
<data android:mimeType="application/xhtml+xml"/>
|
|
</intent-filter>
|
|
<!-- MHTML support, used for snapshots -->
|
|
<intent-filter>
|
|
<action android:name="android.intent.action.VIEW" />
|
|
<category android:name="android.intent.category.DEFAULT" />
|
|
<category android:name="android.intent.category.BROWSABLE" />
|
|
<data android:scheme="file"/>
|
|
<data android:mimeType="multipart/related"/>
|
|
</intent-filter>
|
|
<intent-filter>
|
|
<action android:name="android.intent.action.VIEW" />
|
|
<category android:name="android.intent.category.DEFAULT" />
|
|
<data android:scheme="content"/>
|
|
<data android:mimeType="multipart/related"/>
|
|
</intent-filter>
|
|
<intent-filter>
|
|
<action android:name="android.intent.action.VIEW" />
|
|
<category android:name="android.intent.category.DEFAULT" />
|
|
<data android:scheme="file"/>
|
|
<data android:scheme="content"/>
|
|
<data android:mimeType="message/rfc822"/>
|
|
</intent-filter>
|
|
<intent-filter>
|
|
{% block mhtml_view_intent_shared_filter_body %}
|
|
<action android:name="android.intent.action.VIEW" />
|
|
<category android:name="android.intent.category.DEFAULT" />
|
|
<category android:name="android.intent.category.BROWSABLE" />
|
|
<data android:scheme="file"/>
|
|
<data android:host="*" />
|
|
{% for i in range(10) %}
|
|
<data android:pathPattern="/.*{{ '\\\\..*' * i }}\\.mhtml" />
|
|
<data android:pathPattern="/.*{{ '\\\\..*' * i }}\\.mht" />
|
|
{% endfor %}
|
|
{% endblock %}
|
|
</intent-filter>
|
|
<!-- Same filter as above but with mimeType="*/*". Used for
|
|
handling intent send by ShareIt. -->
|
|
<intent-filter>
|
|
{{ self.mhtml_view_intent_shared_filter_body() }}
|
|
<data android:mimeType="*/*"/>
|
|
</intent-filter>
|
|
<!-- Web Bundles (.wbn) support -->
|
|
{% if channel in ['dev', 'canary', 'default'] %}
|
|
<intent-filter>
|
|
{% block wbn_view_intent_shared_filter_body %}
|
|
<action android:name="android.intent.action.VIEW" />
|
|
<category android:name="android.intent.category.DEFAULT" />
|
|
<category android:name="android.intent.category.BROWSABLE" />
|
|
<data android:scheme="file" />
|
|
<data android:host="*" />
|
|
{% for i in range(10) %}
|
|
<data android:pathPattern="/.*{{ '\\\\..*' * i }}\\.wbn" />
|
|
{% endfor %}
|
|
{% endblock %}
|
|
</intent-filter>
|
|
<intent-filter>
|
|
{{ self.wbn_view_intent_shared_filter_body() }}
|
|
<data android:mimeType="*/*"/>
|
|
</intent-filter>
|
|
<intent-filter tools:ignore="AppLinkUrlError">
|
|
<action android:name="android.intent.action.VIEW" />
|
|
<category android:name="android.intent.category.DEFAULT" />
|
|
<data android:scheme="content" />
|
|
<data android:mimeType="application/webbundle" />
|
|
</intent-filter>
|
|
{% endif %}
|
|
<intent-filter>
|
|
<action android:name="android.intent.action.MEDIA_SEARCH" />
|
|
<category android:name="android.intent.category.DEFAULT" />
|
|
</intent-filter>
|
|
<intent-filter>
|
|
<action android:name="android.speech.action.VOICE_SEARCH_RESULTS" />
|
|
<category android:name="android.intent.category.DEFAULT" />
|
|
</intent-filter>
|
|
<intent-filter>
|
|
<action android:name="android.nfc.action.NDEF_DISCOVERED" />
|
|
<category android:name="android.intent.category.DEFAULT" />
|
|
<data android:scheme="http" />
|
|
<data android:scheme="https" />
|
|
</intent-filter>
|
|
<intent-filter>
|
|
<action android:name="android.intent.action.SEARCH" />
|
|
</intent-filter>
|
|
<intent-filter>
|
|
<action android:name="com.sec.android.airview.HOVER" />
|
|
</intent-filter>
|
|
<meta-data android:name="android.app.searchable"
|
|
android:resource="@xml/searchable" />
|
|
</activity-alias>
|
|
|
|
<activity android:name="org.chromium.chrome.browser.media.MediaLauncherActivity"
|
|
android:theme="@style/Theme.BrowserUI.NoDisplay"
|
|
android:excludeFromRecents="true"
|
|
android:exported="true"
|
|
android:enabled="false"><!-- This will be selectively enabled at runtime. -->
|
|
<intent-filter tools:ignore="AppLinkUrlError">
|
|
<action android:name="android.intent.action.VIEW" />
|
|
<category android:name="android.intent.category.DEFAULT" />
|
|
<!-- TODO(crbug.com/40557607): Limit these to supported MIME types. -->
|
|
<data android:mimeType="image/*" />
|
|
<data android:mimeType="video/*" />
|
|
<data android:scheme="file" />
|
|
<data android:scheme="content" />
|
|
</intent-filter>
|
|
</activity>
|
|
|
|
<activity android:name="org.chromium.chrome.browser.media.DocumentPictureInPictureActivity"
|
|
android:exported="false"
|
|
android:noHistory="true"
|
|
android:theme="@style/Theme.Chromium.Activity"
|
|
android:excludeFromRecents="true"
|
|
android:configChanges=
|
|
"screenSize|smallestScreenSize|screenLayout|orientation|density|uiMode"
|
|
{{ self.supports_video_persistence() }}
|
|
>
|
|
</activity>
|
|
|
|
<activity android:name="org.chromium.chrome.browser.media.PictureInPictureActivity"
|
|
android:exported="false"
|
|
android:noHistory="true"
|
|
android:theme="@style/Theme.Chromium.Activity"
|
|
android:excludeFromRecents="true"
|
|
android:configChanges=
|
|
"screenSize|smallestScreenSize|screenLayout|orientation"
|
|
{{ self.supports_video_persistence() }}>
|
|
</activity>
|
|
|
|
<!-- We have a separate activity-alias for audio so that we can disable audio handling
|
|
without disabling video and image handling. We need this because there are memory
|
|
restrictions for music players on Android Go, so we want to only handle video and
|
|
images in that case. -->
|
|
<activity-alias android:name="org.chromium.chrome.browser.media.AudioLauncherActivity"
|
|
android:targetActivity="org.chromium.chrome.browser.media.MediaLauncherActivity"
|
|
android:exported="true"
|
|
android:enabled="false"><!-- This will be selectively enabled at runtime. -->
|
|
<intent-filter tools:ignore="AppLinkUrlError">
|
|
<action android:name="android.intent.action.VIEW" />
|
|
<category android:name="android.intent.category.DEFAULT" />
|
|
<!-- TODO(crbug.com/40557607): Limit these to supported MIME types. -->
|
|
<data android:mimeType="audio/*" />
|
|
<data android:scheme="file" />
|
|
<data android:scheme="content" />
|
|
</intent-filter>
|
|
</activity-alias>
|
|
|
|
<activity android:name="org.chromium.chrome.browser.LauncherShortcutActivity"
|
|
android:theme="@style/Theme.BrowserUI.NoDisplay"
|
|
android:taskAffinity=""
|
|
android:excludeFromRecents="true"
|
|
android:exported="false">
|
|
<property android:name="android.window.PROPERTY_SUPPORTS_MULTI_INSTANCE_SYSTEM_UI"
|
|
android:value="true" />
|
|
</activity>
|
|
|
|
<!-- The singleInstancePerTask launch mode is required by Samsung OS to determine
|
|
support for multi-instance in the drag & drop use case. See b/232168063 for
|
|
future reference. -->
|
|
<activity android:name="org.chromium.chrome.browser.dragdrop.DragAndDropLauncherActivity"
|
|
android:theme="@style/LauncherTheme"
|
|
android:taskAffinity=""
|
|
android:excludeFromRecents="true"
|
|
android:launchMode="singleInstancePerTask"
|
|
android:windowNoDisplay="true"
|
|
android:exported="false">
|
|
<property android:name="android.window.PROPERTY_SUPPORTS_MULTI_INSTANCE_SYSTEM_UI"
|
|
android:value="true" />
|
|
<intent-filter>
|
|
<action android:name="org.chromium.chrome.browser.dragdrop.action.VIEW" />
|
|
<category android:name="android.intent.category.BROWSABLE" />
|
|
<data android:scheme="http" />
|
|
<data android:scheme="https" />
|
|
</intent-filter>
|
|
</activity>
|
|
|
|
<activity android:name="org.chromium.chrome.browser.incognito.IncognitoTabLauncher"
|
|
android:theme="@style/Theme.BrowserUI.NoDisplay"
|
|
android:taskAffinity=""
|
|
android:enabled="false"
|
|
android:excludeFromRecents="true"
|
|
android:exported="true">
|
|
<intent-filter>
|
|
<action android:name="org.chromium.chrome.browser.incognito.OPEN_PRIVATE_TAB" />
|
|
<category android:name="android.intent.category.DEFAULT" />
|
|
</intent-filter>
|
|
</activity>
|
|
|
|
<activity android:name="org.chromium.chrome.browser.AutofillOptionsLauncher"
|
|
android:theme="@style/Theme.BrowserUI.NoDisplay"
|
|
android:excludeFromRecents="true"
|
|
android:exported="true">
|
|
<intent-filter>
|
|
<action android:name="android.intent.action.APPLICATION_PREFERENCES" />
|
|
<category android:name="android.intent.category.DEFAULT" />
|
|
<category android:name="android.intent.category.APP_BROWSER" />
|
|
<category android:name="android.intent.category.PREFERENCE" />
|
|
</intent-filter>
|
|
</activity>
|
|
|
|
<activity android:name="org.chromium.chrome.browser.app.reengagement.ReengagementActivity"
|
|
android:theme="@style/Theme.BrowserUI.Translucent"
|
|
android:taskAffinity=""
|
|
android:excludeFromRecents="true"
|
|
android:exported="false" />
|
|
|
|
<!-- Phishing Protection related -->
|
|
<receiver android:name="org.chromium.chrome.browser.safe_browsing.PasswordProtectionBroadcastReceiver"
|
|
android:exported="true"
|
|
android:permission="com.google.android.gms.permission.INTERNAL_BROADCAST">
|
|
<intent-filter>
|
|
<action android:name="com.android.chrome.safe_browsing.LOGIN" />
|
|
</intent-filter>
|
|
</receiver>
|
|
|
|
<!-- Upgrade related -->
|
|
<receiver android:name="org.chromium.chrome.browser.upgrade.PackageReplacedBroadcastReceiver"
|
|
android:exported="false">
|
|
<intent-filter>
|
|
<action android:name="android.intent.action.MY_PACKAGE_REPLACED" />
|
|
</intent-filter>
|
|
</receiver>
|
|
|
|
<!-- Locale related -->
|
|
<receiver android:name="org.chromium.chrome.browser.notifications.channels.LocaleChangedBroadcastReceiver"
|
|
android:exported="true">
|
|
<intent-filter>
|
|
<action android:name="android.intent.action.LOCALE_CHANGED" />
|
|
</intent-filter>
|
|
</receiver>
|
|
|
|
<!-- Actor related -->
|
|
<receiver android:name="org.chromium.chrome.browser.actor.ActorBroadcastReceiver"
|
|
android:exported="false">
|
|
<intent-filter>
|
|
<action android:name="org.chromium.chrome.browser.actor.ACTION_PAUSE" />
|
|
<action android:name="org.chromium.chrome.browser.actor.ACTION_RESUME" />
|
|
<action android:name="org.chromium.chrome.browser.actor.ACTION_CANCEL" />
|
|
</intent-filter>
|
|
</receiver>
|
|
|
|
<!-- Custom Tabs -->
|
|
<activity android:name="org.chromium.chrome.browser.customtabs.CustomTabActivity"
|
|
android:theme="@style/Theme.Chromium.Activity"
|
|
android:exported="false"
|
|
{{ self.chrome_activity_common() }}
|
|
{{ self.supports_video_persistence() }}
|
|
>
|
|
{{ self.supports_vr() }}
|
|
{{ self.extra_web_rendering_activity_definitions() }}
|
|
</activity>
|
|
<activity android:name="org.chromium.chrome.browser.customtabs.TranslucentCustomTabActivity"
|
|
android:theme="@style/Theme.Chromium.Activity.FakeTranslucent"
|
|
android:exported="false"
|
|
{{ self.chrome_activity_common() }}
|
|
{{ self.supports_video_persistence() }}
|
|
>
|
|
{{ self.supports_vr() }}
|
|
{{ self.extra_web_rendering_activity_definitions() }}
|
|
</activity>
|
|
<!-- ChromeTabbedActivity related -->
|
|
<activity android:name="org.chromium.chrome.browser.ChromeTabbedActivity"
|
|
android:theme="@style/Theme.Chromium.TabbedMode"
|
|
android:exported="true"
|
|
android:launchMode="singleTask"
|
|
{% if is_desktop_android == "true" %}
|
|
android:persistableMode="persistAcrossReboots"
|
|
{% endif %}
|
|
{# We can only use blocks once in Jinja, for future substitutions we use
|
|
self.supports_video_persistence(). #}
|
|
{% block supports_video_persistence %}
|
|
android:supportsPictureInPicture="true"
|
|
android:resizeableActivity="true"
|
|
{% endblock %}
|
|
{% block chrome_activity_common %}
|
|
android:windowSoftInputMode="adjustResize"
|
|
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|mcc|mnc|screenLayout|smallestScreenSize|uiMode|navigation|density|touchscreen|colorMode"
|
|
android:hardwareAccelerated="false"
|
|
{% endblock %}
|
|
>
|
|
<meta-data
|
|
android:name="android.activity.launch_mode"
|
|
android:value="singleInstancePerTask"/>
|
|
|
|
<!--
|
|
Daydream api categorizes an activity to three categories: Cardboard only, hybrid
|
|
or Daydream. It does so by testing if intents can be resolved by the activity
|
|
that requests it.
|
|
-->
|
|
{% block supports_vr %}
|
|
<intent-filter>
|
|
<action android:name="org.chromium.chrome.browser.dummy.action" />
|
|
<category android:name="com.google.intent.category.DAYDREAM" />
|
|
<category android:name="com.google.intent.category.CARDBOARD" />
|
|
</intent-filter>
|
|
{% endblock %}
|
|
|
|
{% block extra_web_rendering_activity_definitions %}
|
|
{% endblock %}
|
|
<property android:name="android.window.PROPERTY_SUPPORTS_MULTI_INSTANCE_SYSTEM_UI"
|
|
android:value="true" />
|
|
</activity>
|
|
<activity-alias android:name="com.google.android.apps.chrome.Main"
|
|
android:targetActivity="org.chromium.chrome.browser.ChromeTabbedActivity"
|
|
android:exported="true">
|
|
<property android:name="android.window.PROPERTY_SUPPORTS_MULTI_INSTANCE_SYSTEM_UI"
|
|
android:value="true" />
|
|
<intent-filter>
|
|
<action android:name="android.intent.action.MAIN" />
|
|
<category android:name="android.intent.category.DEFAULT" />
|
|
<category android:name="android.intent.category.LAUNCHER" />
|
|
<category android:name="android.intent.category.BROWSABLE" />
|
|
<category android:name="android.intent.category.APP_BROWSER" />
|
|
{% if channel in ['dev', 'canary', 'default'] %}
|
|
<category android:name="android.intent.category.MULTIWINDOW_LAUNCHER" />
|
|
{% endif %}
|
|
</intent-filter>
|
|
<meta-data android:name="android.app.shortcuts"
|
|
android:resource="@xml/launchershortcuts" />
|
|
{{ self.supports_vr() }}
|
|
{{ self.extra_web_rendering_activity_definitions() }}
|
|
</activity-alias>
|
|
<activity android:name="org.chromium.chrome.browser.ChromeTabbedActivity2"
|
|
android:theme="@style/Theme.Chromium.TabbedMode"
|
|
android:exported="false"
|
|
android:taskAffinity="{{ manifest_package }}.ChromeTabbedActivity2"
|
|
android:launchMode="singleTask"
|
|
{{ self.chrome_activity_common() }}
|
|
{{ self.supports_video_persistence() }}
|
|
>
|
|
{{ self.supports_vr() }}
|
|
{{ self.extra_web_rendering_activity_definitions() }}
|
|
</activity>
|
|
|
|
<!--
|
|
TODO(crbug.com/40698801): investigate why
|
|
@android:style/Theme.NoDisplay can't be used here.
|
|
-->
|
|
<activity android:name="org.chromium.chrome.browser.sync.ui.SyncTrustedVaultProxyActivity"
|
|
android:theme="@style/Theme.Material3Expressive.DayNight"
|
|
android:excludeFromRecents="true"
|
|
android:exported="false">
|
|
</activity>
|
|
<activity android:name="org.chromium.chrome.browser.sync.ui.PassphraseActivity"
|
|
android:theme="@style/Theme.Chromium.Activity"
|
|
android:autoRemoveFromRecents="true">
|
|
</activity>
|
|
<activity android:name="org.chromium.chrome.browser.firstrun.LightweightFirstRunActivity"
|
|
android:theme="@style/Theme.BrowserUI.DayNight.AlertDialog.NoActionBar"
|
|
android:launchMode="singleInstance"
|
|
{{ self.first_run_activity_common() }}>
|
|
</activity>
|
|
<activity android:name="org.chromium.chrome.browser.firstrun.FirstRunActivity"
|
|
android:theme="@style/Theme.Chromium.Activity.Fullscreen"
|
|
android:launchMode="singleTop"
|
|
{% block first_run_activity_common %}
|
|
android:label="@string/fre_activity_label"
|
|
android:excludeFromRecents="true"
|
|
android:autoRemoveFromRecents="true"
|
|
android:windowSoftInputMode="stateHidden|adjustPan"
|
|
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|mcc|mnc|screenLayout|smallestScreenSize|uiMode"
|
|
{% endblock %}>
|
|
</activity>
|
|
{% set enable_cardboard = enable_cardboard|default(0) %}
|
|
{% if enable_cardboard == "true" %}
|
|
<!-- Based on //third_party/cardboard/src/sdk/qrcode/android/AndroidManifest.xml -->
|
|
<activity
|
|
android:name="com.google.cardboard.sdk.QrCodeCaptureActivity"
|
|
android:exported="false"
|
|
android:label="@string/title_activity_qr_code_capture"
|
|
android:theme="@style/Theme.AppCompat.NoActionBar">
|
|
</activity>
|
|
{% endif %}
|
|
<!--
|
|
The windowSoftInputMode is set to adjustNothing to avoid visual glitch when the
|
|
fullscreen sign-in is started when a keyboard is shown on the screen. See https://crbug.com/414419626
|
|
-->
|
|
<activity android:name="org.chromium.chrome.browser.signin.SigninAndHistorySyncActivity"
|
|
android:theme="@style/Theme.Chromium.SigninAndHistorySyncActivity"
|
|
android:windowSoftInputMode="adjustNothing"
|
|
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|mcc|mnc|screenLayout|smallestScreenSize|uiMode"
|
|
android:exported="false">
|
|
</activity>
|
|
<activity android:name="org.chromium.chrome.browser.device_lock.DeviceLockActivity"
|
|
android:theme="@style/Theme.Chromium.DialogWhenLarge"
|
|
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|mcc|mnc|screenLayout|smallestScreenSize|uiMode"
|
|
android:exported="false">
|
|
</activity>
|
|
<activity android:name="org.chromium.chrome.browser.settings.SettingsActivity"
|
|
android:theme="@style/Theme.Chromium.Settings"
|
|
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|mcc|mnc|screenLayout|smallestScreenSize|uiMode"
|
|
android:label="@string/settings"
|
|
android:exported="false">
|
|
</activity>
|
|
<activity android:name="org.chromium.chrome.browser.site_settings.ManageSpaceActivity"
|
|
android:theme="@style/Theme.Chromium.Settings.ManageSpace"
|
|
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|mcc|mnc|screenLayout|smallestScreenSize"
|
|
android:label="@string/storage_management_activity_label"
|
|
android:exported="false">
|
|
</activity>
|
|
<activity
|
|
android:name="org.chromium.chrome.browser.chrome_item_picker.ChromeItemPickerActivity"
|
|
android:theme="@style/Theme.Chromium.Activity.FakeTranslucent"
|
|
android:exported="false"
|
|
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|mcc|mnc|screenLayout|smallestScreenSize|uiMode">
|
|
</activity>
|
|
|
|
<!-- Activities for bookmarks. -->
|
|
<activity android:name="org.chromium.chrome.browser.app.bookmarks.BookmarkActivity"
|
|
android:theme="@style/Theme.Chromium.Activity.Fullscreen"
|
|
android:exported="false"
|
|
android:windowSoftInputMode="stateAlwaysHidden|adjustResize"
|
|
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|mcc|mnc|screenLayout|smallestScreenSize|uiMode">
|
|
</activity>
|
|
<activity android:name="org.chromium.chrome.browser.app.bookmarks.BookmarkEditActivity"
|
|
android:theme="@style/Theme.Chromium.DialogWhenLarge"
|
|
android:windowSoftInputMode="stateHidden"
|
|
android:exported="false"
|
|
android:label="@string/edit_bookmark"
|
|
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|mcc|mnc|screenLayout|smallestScreenSize|uiMode">
|
|
</activity>
|
|
<activity android:name="org.chromium.chrome.browser.app.bookmarks.BookmarkFolderPickerActivity"
|
|
android:theme="@style/Theme.Chromium.DialogWhenLarge"
|
|
android:windowSoftInputMode="stateAlwaysHidden"
|
|
android:label="@string/bookmark_choose_folder"
|
|
android:exported="false"
|
|
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|mcc|mnc|screenLayout|smallestScreenSize|uiMode">
|
|
</activity>
|
|
|
|
<!-- Activities for downloads. -->
|
|
<activity-alias android:name="org.chromium.chrome.browser.download.DownloadActivity"
|
|
android:targetActivity="org.chromium.chrome.browser.app.download.home.DownloadActivity"
|
|
android:exported="false">
|
|
</activity-alias>
|
|
<activity android:name="org.chromium.chrome.browser.app.download.home.DownloadActivity"
|
|
android:theme="@style/Theme.Chromium.Activity.Fullscreen"
|
|
android:windowSoftInputMode="stateAlwaysHidden|adjustResize"
|
|
android:exported="false"
|
|
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|mcc|mnc|screenLayout|smallestScreenSize|uiMode">
|
|
</activity>
|
|
|
|
<!-- Activities for creator. -->
|
|
<activity android:name="org.chromium.chrome.browser.app.creator.CreatorActivity"
|
|
android:theme="@style/Theme.Chromium.Activity.Fullscreen"
|
|
android:windowSoftInputMode="stateAlwaysHidden|adjustResize"
|
|
android:exported="false"
|
|
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|mcc|mnc|screenLayout|smallestScreenSize|uiMode">
|
|
</activity>
|
|
|
|
<!-- Activities for history. -->
|
|
<activity android:name="org.chromium.chrome.browser.history.HistoryActivity"
|
|
android:theme="@style/Theme.Chromium.Activity.Fullscreen"
|
|
android:windowSoftInputMode="stateAlwaysHidden|adjustResize"
|
|
android:exported="false"
|
|
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|mcc|mnc|screenLayout|smallestScreenSize|uiMode">
|
|
</activity>
|
|
|
|
<!--
|
|
Activities for webapps.
|
|
TODO(dfalcantara): Remove the aliases for the WebappActivities once we're pretty sure
|
|
that users don't have any instances of the original Activity still
|
|
running.
|
|
-->
|
|
<activity android:name="org.chromium.chrome.browser.webapps.WebappLauncherActivity"
|
|
android:theme="@style/Theme.BrowserUI.NoDisplay"
|
|
android:taskAffinity=""
|
|
android:excludeFromRecents="true"
|
|
android:exported="true">
|
|
<intent-filter>
|
|
<action android:name="com.google.android.apps.chrome.webapps.WebappManager.ACTION_START_WEBAPP" />
|
|
<category android:name="android.intent.category.DEFAULT" />
|
|
</intent-filter>
|
|
<intent-filter>
|
|
<action android:name="org.webapk.ACTION_START_WEBAPK" />
|
|
<category android:name="android.intent.category.DEFAULT" />
|
|
</intent-filter>
|
|
</activity>
|
|
<!-- Non-exported alias that only Chrome can launch to verify shortcut intent comes from
|
|
Chrome (ShortcutManager on O+ launches under the shortcut creator's uid). -->
|
|
<activity-alias android:name="org.chromium.chrome.browser.webapps.SecureWebAppLauncher"
|
|
android:targetActivity="org.chromium.chrome.browser.webapps.WebappLauncherActivity"
|
|
android:exported="false">
|
|
<intent-filter>
|
|
<action android:name="org.chromium.chrome.browser.webapps.WebappManager.ACTION_START_SECURE_WEBAPP" />
|
|
<category android:name="android.intent.category.DEFAULT" />
|
|
</intent-filter>
|
|
</activity-alias>
|
|
<activity-alias android:name="com.google.android.apps.chrome.webapps.WebappManager"
|
|
android:targetActivity="org.chromium.chrome.browser.webapps.WebappLauncherActivity">
|
|
</activity-alias>
|
|
<activity android:name="org.chromium.chrome.browser.webapps.WebappActivity"
|
|
android:theme="@style/Theme.Chromium.Webapp"
|
|
android:label="@string/webapp_activity_title"
|
|
android:launchMode="singleTop"
|
|
android:documentLaunchMode="intoExisting"
|
|
android:exported="false"
|
|
android:persistableMode="persistNever"
|
|
{{ self.supports_video_persistence() }}
|
|
{{ self.chrome_activity_common() }}
|
|
>
|
|
{{ self.supports_vr() }}
|
|
{{ self.extra_web_rendering_activity_definitions() }}
|
|
</activity>
|
|
<activity-alias android:name="com.google.android.apps.chrome.webapps.WebappActivity"
|
|
android:targetActivity="org.chromium.chrome.browser.webapps.WebappActivity"
|
|
android:label="@string/webapp_activity_title">
|
|
</activity-alias>
|
|
<!-- Activities for WebAPKs. -->
|
|
<activity android:name="org.chromium.chrome.browser.webapps.SameTaskWebApkActivity"
|
|
android:theme="@style/Theme.Chromium.Webapp.Translucent"
|
|
android:label="@string/webapp_activity_title"
|
|
android:exported="false"
|
|
android:persistableMode="persistNever"
|
|
{{ self.supports_video_persistence() }}
|
|
{{ self.chrome_activity_common() }}
|
|
>
|
|
{{ self.supports_vr() }}
|
|
{{ self.extra_web_rendering_activity_definitions() }}
|
|
</activity>
|
|
|
|
<activity android:name="org.chromium.chrome.browser.webapps.ActivateWebApkActivity"
|
|
android:theme="@style/Theme.BrowserUI.NoDisplay"
|
|
android:exported="true">
|
|
<intent-filter>
|
|
<action android:name="org.chromium.chrome.browser.webapps.ActivateWebApkActivity.ACTIVATE" />
|
|
<category android:name="android.intent.category.DEFAULT" />
|
|
</intent-filter>
|
|
</activity>
|
|
|
|
<activity android:name="org.chromium.components.media_router.caf.remoting.CafExpandedControllerActivity"
|
|
android:theme="@style/Theme.Chromium.Activity"
|
|
android:label="Chrome.CafExpandedControllerActivity"
|
|
android:hardwareAccelerated="true"
|
|
android:launchMode="singleTask"
|
|
android:noHistory="true"
|
|
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|mcc|mnc|screenLayout|smallestScreenSize"
|
|
android:excludeFromRecents="true">
|
|
</activity>
|
|
|
|
<!-- This activity is used to restart the main Chrome process. Should never be exported. -->
|
|
<activity android:name="org.chromium.chrome.browser.BrowserRestartActivity"
|
|
android:launchMode="singleInstance"
|
|
android:exported="false"
|
|
android:theme="@style/Theme.BrowserUI.Translucent.NoTitleBar"
|
|
android:excludeFromRecents="true"
|
|
android:process=":browser_restart_process">
|
|
</activity>
|
|
|
|
<!-- This activity is used to show an error dialog when Chrome fails to load the native
|
|
library. It must be in a separate process as when the native library fails to load an
|
|
exception is thrown and may crash the main process immediately. Being in a separate
|
|
process allows the dialog to remain visible to the user. -->
|
|
<activity android:name="org.chromium.chrome.browser.init.LaunchFailedActivity"
|
|
android:launchMode="singleInstance"
|
|
android:exported="false"
|
|
android:theme="@style/Theme.BrowserUI.Translucent.NoTitleBar"
|
|
android:excludeFromRecents="true"
|
|
android:process=":launch_failed">
|
|
</activity>
|
|
|
|
<!-- Components for Trusted Web Activities -->
|
|
<receiver android:name="org.chromium.chrome.browser.browserservices.InstalledWebappBroadcastReceiver"
|
|
android:exported="true">
|
|
<intent-filter>
|
|
<data android:scheme="package" />
|
|
<action android:name="android.intent.action.PACKAGE_FULLY_REMOVED" />
|
|
<action android:name="android.intent.action.PACKAGE_DATA_CLEARED" />
|
|
</intent-filter>
|
|
{% if channel in ['default'] %}
|
|
<intent-filter>
|
|
<action android:name="org.chromium.chrome.browser.browserservices.InstalledWebappBroadcastReceiver.DEBUG" />
|
|
</intent-filter>
|
|
{% endif %}
|
|
</receiver>
|
|
|
|
<activity android:name="org.chromium.chrome.browser.browserservices.ClearDataDialogActivity"
|
|
android:theme="@style/Theme.Chromium.ClearDataDialogActivity"
|
|
android:exported="false"/>
|
|
|
|
<activity
|
|
android:name="org.chromium.chrome.browser.browserservices.ManageTrustedWebActivityDataActivity"
|
|
android:theme="@style/Theme.Chromium.Activity.Fullscreen.Transparent"
|
|
android:exported="true">
|
|
<intent-filter>
|
|
<action android:name="android.support.customtabs.action.ACTION_MANAGE_TRUSTED_WEB_ACTIVITY_DATA" />
|
|
<category android:name="android.intent.category.DEFAULT" />
|
|
</intent-filter>
|
|
<!-- Legacy filter. We no longer need data, but must accept intents that provide data. -->
|
|
<intent-filter>
|
|
<action android:name="android.support.customtabs.action.ACTION_MANAGE_TRUSTED_WEB_ACTIVITY_DATA" />
|
|
<category android:name="android.intent.category.DEFAULT" />
|
|
<data android:scheme="https"/>
|
|
</intent-filter>
|
|
</activity>
|
|
|
|
<receiver
|
|
android:name="org.chromium.chrome.browser.browserservices.ui.trustedwebactivity.DisclosureAcceptanceBroadcastReceiver"
|
|
android:exported="false" />
|
|
|
|
<receiver
|
|
android:name="org.chromium.chrome.browser.webapps.WebApkInstallBroadcastReceiver"
|
|
android:exported="false" />
|
|
|
|
<!-- Service for decoding images in a sandboxed process. -->
|
|
<service
|
|
android:description="@string/decoder_description"
|
|
android:name="org.chromium.chrome.browser.photo_picker.DecoderService"
|
|
android:exported="false"
|
|
android:isolatedProcess="true"
|
|
android:process=":decoder_service" />
|
|
|
|
<!-- Actor foreground service -->
|
|
<service android:name="org.chromium.chrome.browser.actor.ActorForegroundService"
|
|
android:foregroundServiceType="dataSync" android:exported="false">
|
|
</service>
|
|
|
|
<!-- Download foreground service -->
|
|
<service android:name="org.chromium.chrome.browser.download.DownloadForegroundService"
|
|
android:foregroundServiceType="dataSync" android:exported="false">
|
|
</service>
|
|
|
|
<!-- Download broadcast manager service -->
|
|
<service android:name="org.chromium.chrome.browser.download.DownloadBroadcastManager"
|
|
android:exported="false">
|
|
</service>
|
|
|
|
<!-- Quick Action Search widget -->
|
|
<receiver
|
|
android:name="org.chromium.chrome.browser.quickactionsearchwidget.QuickActionSearchWidgetProvider$QuickActionSearchWidgetProviderSearch"
|
|
android:label="@string/quick_action_search_widget_title"
|
|
android:exported="true">
|
|
<intent-filter>
|
|
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
|
|
</intent-filter>
|
|
<intent-filter>
|
|
<action android:name="android.intent.action.LOCALE_CHANGED" />
|
|
</intent-filter>
|
|
<meta-data
|
|
android:name="android.appwidget.provider"
|
|
android:resource="@xml/quick_action_search_widget_small_info" />
|
|
</receiver>
|
|
|
|
<receiver
|
|
android:name="org.chromium.chrome.browser.quickactionsearchwidget.QuickActionSearchWidgetProvider$QuickActionSearchWidgetProviderDino"
|
|
android:label="@string/dino_widget_text"
|
|
android:exported="true">
|
|
<intent-filter>
|
|
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
|
|
</intent-filter>
|
|
<intent-filter>
|
|
<action android:name="android.intent.action.LOCALE_CHANGED" />
|
|
</intent-filter>
|
|
<meta-data
|
|
android:name="android.appwidget.provider"
|
|
android:resource="@xml/quick_action_search_widget_dino_info" />
|
|
</receiver>
|
|
|
|
<!-- Bookmarks widget -->
|
|
<receiver android:name="com.google.android.apps.chrome.appwidget.bookmarks.BookmarkThumbnailWidgetProvider"
|
|
android:label="@string/bookmark_widget_title"
|
|
android:exported="true">
|
|
<intent-filter>
|
|
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
|
|
<action android:name=".BOOKMARK_APPWIDGET_UPDATE" />
|
|
</intent-filter>
|
|
<meta-data
|
|
android:name="android.appwidget.provider"
|
|
android:resource="@xml/bookmark_widget_info" />
|
|
</receiver>
|
|
<service android:name="org.chromium.chrome.browser.bookmarkswidget.BookmarkWidgetService"
|
|
android:permission="android.permission.BIND_REMOTEVIEWS"
|
|
android:exported="false" />
|
|
<activity
|
|
android:name="org.chromium.chrome.browser.bookmarkswidget.BookmarkWidgetProxy"
|
|
android:theme="@style/Theme.BrowserUI.NoDisplay"
|
|
android:noHistory="true"
|
|
android:excludeFromRecents="true"
|
|
android:taskAffinity=""
|
|
android:exported="false" />
|
|
|
|
<!-- Search widget -->
|
|
<receiver
|
|
android:name="org.chromium.chrome.browser.searchwidget.SearchWidgetProvider"
|
|
android:label="@string/search_widget_title"
|
|
android:exported="true">
|
|
<intent-filter>
|
|
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
|
|
</intent-filter>
|
|
<intent-filter>
|
|
<action android:name="android.intent.action.LOCALE_CHANGED" />
|
|
</intent-filter>
|
|
<meta-data
|
|
android:name="android.appwidget.provider"
|
|
android:resource="@xml/search_widget_info" />
|
|
</receiver>
|
|
|
|
<!-- Search Activity -->
|
|
<activity android:name="org.chromium.chrome.browser.searchwidget.SearchActivity"
|
|
android:theme="@style/Theme.Chromium.SearchActivity"
|
|
android:label="Search"
|
|
android:exported="true"
|
|
android:launchMode="singleTask"
|
|
android:taskAffinity=""
|
|
android:clearTaskOnLaunch="true"
|
|
android:excludeFromRecents="true"
|
|
android:windowSoftInputMode="adjustResize"
|
|
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|mcc|mnc|screenLayout|smallestScreenSize|uiMode"
|
|
android:hardwareAccelerated="false">
|
|
<intent-filter>
|
|
<action android:name="android.intent.action.WEB_SEARCH" />
|
|
<!-- Permits Chrome to act as a default handler for WEB_SEARCH intents. -->
|
|
<category android:name="android.intent.category.DEFAULT" />
|
|
</intent-filter>
|
|
</activity>
|
|
|
|
<!-- GcmListenerService for messages from GCM. -->
|
|
<service android:name="org.chromium.chrome.browser.services.gcm.ChromeGcmListenerService"
|
|
android:exported="false" >
|
|
<intent-filter>
|
|
<action android:name="com.google.firebase.MESSAGING_EVENT" />
|
|
</intent-filter>
|
|
</service>
|
|
<service android:name="org.chromium.chrome.browser.services.gcm.GCMBackgroundService"
|
|
android:exported="false"/>
|
|
<service android:name="org.chromium.chrome.browser.services.gcm.InvalidationGcmUpstreamSender"
|
|
android:exported="false"/>
|
|
|
|
<!-- Android Notification service listener -->
|
|
<service android:name="org.chromium.chrome.browser.notifications.NotificationService"
|
|
android:exported="false"/>
|
|
<receiver android:name="org.chromium.chrome.browser.notifications.NotificationService$Receiver"
|
|
android:exported="false"/>
|
|
<receiver android:name="org.chromium.chrome.browser.notifications.NotificationServiceImpl$Receiver"
|
|
android:exported="false">
|
|
<intent-filter>
|
|
<action android:name="org.chromium.chrome.browser.notifications.ALWAYS_ALLOW" />
|
|
<action android:name="org.chromium.chrome.browser.notifications.CLICK_NOTIFICATION" />
|
|
<action android:name="org.chromium.chrome.browser.notifications.CLOSE_NOTIFICATION" />
|
|
<action android:name="org.chromium.chrome.browser.notifications.COMMIT_UNSUBSCRIBE" />
|
|
<action android:name="org.chromium.chrome.browser.notifications.PRE_UNSUBSCRIBE" />
|
|
<action android:name="org.chromium.chrome.browser.notifications.SHOW_ORIGINAL_NOTIFICATION" />
|
|
<action android:name="org.chromium.chrome.browser.notifications.UNDO_UNSUBSCRIBE" />
|
|
<action android:name="org.chromium.chrome.browser.notifications.REPORT_AS_SAFE" />
|
|
<action android:name="org.chromium.chrome.browser.notifications.REPORT_WARNED_NOTIFICATION_AS_SPAM" />
|
|
<action android:name="org.chromium.chrome.browser.notifications.REPORT_UNWARNED_NOTIFICATION_AS_SPAM" />
|
|
</intent-filter>
|
|
</receiver>
|
|
|
|
<!-- Android Notification permission metrics -->
|
|
<receiver android:name="org.chromium.chrome.browser.notifications.permissions.NotificationPermissionChangeReceiver"
|
|
android:exported="false">
|
|
<intent-filter>
|
|
<action android:name="android.app.action.APP_BLOCK_STATE_CHANGED"/>
|
|
<action android:name="android.app.action.NOTIFICATION_CHANNEL_BLOCK_STATE_CHANGED" />
|
|
</intent-filter>
|
|
</receiver>
|
|
|
|
<!-- Android Notification job service -->
|
|
<service android:name="org.chromium.chrome.browser.notifications.NotificationJobService"
|
|
android:exported="false"
|
|
android:permission="android.permission.BIND_JOB_SERVICE"/>
|
|
|
|
<service android:name="org.chromium.chrome.browser.customtabs.CustomTabsConnectionService"
|
|
android:exported="true"
|
|
tools:ignore="ExportedService">
|
|
<intent-filter>
|
|
<action android:name="android.support.customtabs.action.CustomTabsService" />
|
|
<category android:name="androidx.browser.auth.category.AuthTab"/>
|
|
<category android:name="androidx.browser.customtabs.category.ColorSchemeCustomization"/>
|
|
<category android:name="androidx.browser.customtabs.category.EphemeralBrowsing"/>
|
|
<category android:name="androidx.browser.customtabs.category.NavBarColorCustomization"/>
|
|
<category android:name="androidx.browser.customtabs.category.SetNetwork"/>
|
|
<category android:name="androidx.browser.trusted.category.ImmersiveMode"/>
|
|
<category android:name="androidx.browser.trusted.category.LaunchSiteSettings" />
|
|
<category android:name="androidx.browser.trusted.category.LaunchWebApkSiteSettings"/>
|
|
<category android:name="androidx.browser.trusted.category.TrustedWebActivities"/>
|
|
<category android:name="androidx.browser.trusted.category.TrustedWebActivitySplashScreensV1"/>
|
|
<category android:name="androidx.browser.trusted.category.WebShareTargetV2"/>
|
|
</intent-filter>
|
|
</service>
|
|
<service android:name="androidx.browser.customtabs.PostMessageService" />
|
|
|
|
<!-- Crash reporting services. -->
|
|
<service android:name="org.chromium.chrome.browser.crash.ChromeMinidumpUploadJobService"
|
|
android:permission="android.permission.BIND_JOB_SERVICE"
|
|
android:exported="false"/>
|
|
<service android:name="org.chromium.chrome.browser.crash.MinidumpUploadService"
|
|
android:exported="false"/>
|
|
|
|
<service android:name="org.chromium.chrome.browser.incognito.IncognitoNotificationService"
|
|
android:exported="false"/>
|
|
|
|
<!-- 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.components.payments.PaymentDetailsUpdateService"
|
|
android:exported="true"
|
|
tools:ignore="ExportedService">
|
|
<intent-filter>
|
|
<action android:name="org.chromium.intent.action.UPDATE_PAYMENT_DETAILS" />
|
|
</intent-filter>
|
|
</service>
|
|
|
|
<receiver android:name="org.chromium.chrome.browser.data_sharing.DataSharingNotificationManager$Receiver"
|
|
android:exported="false" />
|
|
|
|
<receiver android:name="org.chromium.chrome.browser.announcement.AnnouncementNotificationManager$Receiver"
|
|
android:exported="false"/>
|
|
|
|
<service android:name="org.chromium.chrome.browser.notifications.NotificationIntentInterceptorService"
|
|
android:exported="false"/>
|
|
|
|
<receiver android:name="org.chromium.chrome.browser.notifications.NotificationIntentInterceptor$Receiver"
|
|
android:exported="false"/>
|
|
|
|
<activity
|
|
android:name="org.chromium.chrome.browser.notifications.NotificationIntentInterceptor$TrampolineActivity"
|
|
android:taskAffinity=""
|
|
android:theme="@style/Theme.BrowserUI.Translucent.NoTitleBar"
|
|
android:exported="false"
|
|
android:autoRemoveFromRecents="true"
|
|
android:excludeFromRecents="true"
|
|
android:noHistory="true"/>
|
|
|
|
<activity
|
|
android:name="org.chromium.chrome.browser.price_tracking.PriceDropNotificationManagerImpl$TrampolineActivity"
|
|
android:theme="@style/Theme.BrowserUI.NoDisplay"
|
|
android:exported="false"
|
|
android:autoRemoveFromRecents="true"
|
|
android:excludeFromRecents="true"
|
|
android:noHistory="true"/>
|
|
|
|
<activity
|
|
android:name="org.chromium.chrome.browser.price_tracking.PriceDropNotificationManagerImpl$DismissNotificationChromeActivity"
|
|
android:theme="@style/Theme.BrowserUI.NoDisplay"
|
|
android:exported="false"
|
|
android:autoRemoveFromRecents="true"
|
|
android:excludeFromRecents="true"
|
|
android:noHistory="true"/>
|
|
|
|
<!-- Activities for task manager. -->
|
|
<activity
|
|
android:name="org.chromium.chrome.browser.task_manager.ui.TaskManagerActivity"
|
|
android:exported="false"
|
|
android:theme="@style/Theme.Chromium.Activity"
|
|
android:launchMode="singleInstance">
|
|
</activity>
|
|
|
|
<receiver android:name="org.chromium.chrome.browser.notifications.scheduler.DisplayAgent$Receiver"
|
|
android:exported="false"/>
|
|
|
|
<receiver android:name="org.chromium.chrome.browser.app.send_tab_to_self.SendTabToSelfNotificationReceiver"
|
|
android:exported="false"/>
|
|
|
|
<receiver android:name="org.chromium.chrome.browser.customtabs.CustomTabsShareBroadcastReceiver"
|
|
android:exported="false"/>
|
|
|
|
<receiver android:name="org.chromium.chrome.browser.sharing.click_to_call.ClickToCallMessageHandler$TapReceiver"
|
|
android:exported="false"/>
|
|
<receiver android:name="org.chromium.chrome.browser.sharing.sms_fetcher.SmsFetcherMessageHandler$NotificationReceiver"
|
|
android:exported="false"/>
|
|
|
|
<receiver android:name="org.chromium.chrome.browser.offlinepages.AutoFetchNotifier$CompleteNotificationReceiver"
|
|
android:exported="false"/>
|
|
<receiver android:name="org.chromium.chrome.browser.offlinepages.AutoFetchNotifier$InProgressCancelReceiver"
|
|
android:exported="false"/>
|
|
|
|
<service android:name="org.chromium.chrome.browser.media.MediaCaptureNotificationService"
|
|
{% if enable_screen_capture == "true" %}
|
|
android:foregroundServiceType="camera|microphone|mediaProjection|mediaPlayback"
|
|
{% else %}
|
|
android:foregroundServiceType="camera|microphone"
|
|
{% endif %}
|
|
android:exported="false"/>
|
|
<service android:name="org.chromium.chrome.browser.media.ui.ChromeMediaNotificationControllerServices$PlaybackListenerService"
|
|
android:foregroundServiceType="mediaPlayback" android:exported="false">
|
|
<intent-filter>
|
|
<action android:name="android.intent.action.MEDIA_BUTTON" />
|
|
</intent-filter>
|
|
</service>
|
|
<service android:name="org.chromium.chrome.browser.media.ui.ChromeMediaNotificationControllerServices$PresentationListenerService"
|
|
android:foregroundServiceType="mediaPlayback" android:exported="false">
|
|
<intent-filter>
|
|
<action android:name="android.intent.action.MEDIA_BUTTON" />
|
|
</intent-filter>
|
|
</service>
|
|
<service android:name="org.chromium.chrome.browser.media.ui.ChromeMediaNotificationControllerServices$CastListenerService"
|
|
android:foregroundServiceType="mediaPlayback" android:exported="false">
|
|
<intent-filter>
|
|
<action android:name="android.intent.action.MEDIA_BUTTON" />
|
|
</intent-filter>
|
|
</service>
|
|
|
|
<service android:name="org.chromium.chrome.browser.tracing.TracingNotificationService"
|
|
android:exported="false"/>
|
|
|
|
<service android:name="org.chromium.chrome.browser.app.bluetooth.BluetoothNotificationService"
|
|
android:exported="false"/>
|
|
|
|
<service android:name="org.chromium.chrome.browser.app.serial.SerialNotificationService"
|
|
android:exported="false"/>
|
|
|
|
<service android:name="org.chromium.chrome.browser.app.usb.UsbNotificationService"
|
|
android:exported="false"/>
|
|
|
|
<service android:name="org.chromium.chrome.browser.data_import.DataImporterService"
|
|
android:exported="true" tools:ignore="ExportedService">
|
|
<intent-filter>
|
|
<action android:name="io.grpc.action.BIND" />
|
|
<data android:host=""
|
|
android:path="/com.google.osmigration.systemappapi.TargetService"
|
|
android:scheme="grpc" />
|
|
</intent-filter>
|
|
</service>
|
|
|
|
<meta-data android:name="org.chromium.content.browser.SMART_CLIP_PROVIDER"
|
|
android:value="org.chromium.content_public.browser.SmartClipProvider"/>
|
|
|
|
<activity
|
|
android:name="org.chromium.chrome.browser.test_dummy.TestDummyActivity"
|
|
android:excludeFromRecents="true"
|
|
android:exported="true"
|
|
android:noHistory="true"
|
|
android:theme="@style/Theme.Material3Expressive.DayNight"
|
|
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|mcc|mnc|screenLayout|smallestScreenSize" >
|
|
</activity>
|
|
|
|
<!-- This activity is Android P- only which is not supported by Chrome now. -->
|
|
<activity
|
|
android:name="androidx.biometric.internal.ui.FingerprintDialogActivity"
|
|
tools:node="remove">
|
|
</activity>
|
|
|
|
<!-- Disabled via CastOptionsProvider. -->
|
|
<service
|
|
android:name="com.google.android.gms.cast.framework.ReconnectionService"
|
|
tools:node="remove" />
|
|
|
|
<property android:name="android.adservices.AD_SERVICES_CONFIG"
|
|
android:resource="@xml/ad_services_config" />
|
|
|
|
{% set enable_openxr = enable_openxr|default(0) %}
|
|
{% if enable_openxr == "true" %}
|
|
<!-- launchMode is set to singleTask because there should never be multiple copies of the app running. -->
|
|
<!-- Theme.Black.NoTitleBar.Fullscreen gives solid black instead of a (bad stereoscopic) gradient on app transition. -->
|
|
<activity
|
|
android:name="org.chromium.components.webxr.XrHostActivity"
|
|
{{ self.chrome_activity_common() }}
|
|
android:excludeFromRecents="true"
|
|
android:noHistory="true"
|
|
android:launchMode="singleInstancePerTask"
|
|
android:exported="false"
|
|
android:resizeableActivity="false"
|
|
android:screenOrientation="landscape"
|
|
android:label="WebXR"
|
|
android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen"
|
|
tools:ignore="NonResizeableActivity,DiscouragedApi">
|
|
<property android:name="android.window.PROPERTY_XR_ACTIVITY_START_MODE"
|
|
android:value="XR_ACTIVITY_START_MODE_HOME_SPACE" />
|
|
<intent-filter>
|
|
<action android:name="android.intent.action.MAIN" />
|
|
<category android:name="org.khronos.openxr.intent.category.IMMERSIVE_HMD" />
|
|
</intent-filter>
|
|
</activity>
|
|
{% endif %}
|
|
|
|
{% block extra_application_definitions %}
|
|
{% endblock %}
|
|
{% endmacro %}
|
|
{% if not definitions_in_split %}
|
|
{{ application_definitions() }}
|
|
{% endif %}
|
|
|
|
<!-- The following service entries exist in order to allow us to
|
|
start more than one sandboxed process. -->
|
|
|
|
<!-- NOTE: If you change the value of "android:process" for the below services,
|
|
you also need to update kHelperProcessExecutableName in chrome_constants.cc. -->
|
|
<!-- NOTE: num_sandboxed_services is simply the number of name slots available,
|
|
and not a limit on the number of sandboxed processes that can be created.
|
|
In practice, many fewer slots are used, and process names are often reused,
|
|
such as many processes named with the suffix ":sandboxed_process0". -->
|
|
{% 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.content.app.SandboxedProcessService{{ i }}"
|
|
android:process=":sandboxed_process{{ i }}"
|
|
android:permission="{{ manifest_package }}.permission.CHILD_SERVICE"
|
|
android:isolatedProcess="true"
|
|
android:exported="{{sandboxed_service_exported|default(false)}}"
|
|
{% if (i == 0) %}
|
|
android:useAppZygote="true"
|
|
{% endif %}
|
|
{% if (sandboxed_service_exported|default(false)) == 'true' %}
|
|
android:externalService="true"
|
|
tools:ignore="ExportedService"
|
|
android:visibleToInstantApps="true"
|
|
{% endif %} />
|
|
{% endfor %}
|
|
{% if javaless_renderers is defined %}
|
|
<!-- Restricting to just 2 native-only services, one for zygote and one for non-zygote. -->
|
|
{% for i in range(2) %}
|
|
<service android:name="org.chromium.content.app.NativeOnlySandboxedProcessService{{ i }}"
|
|
android:nativeService="true"
|
|
android:process=":sandboxed_process{{ i }}"
|
|
android:permission="{{ manifest_package }}.permission.CHILD_SERVICE"
|
|
android:isolatedProcess="true"
|
|
android:useAppZygote="true"
|
|
android:exported="{{sandboxed_service_exported|default(false)}}"
|
|
{% if (sandboxed_service_exported|default(false)) == 'true' %}
|
|
android:externalService="true"
|
|
tools:ignore="ExportedService"
|
|
android:visibleToInstantApps="true"
|
|
{% endif %} >
|
|
<property android:name="android.app.PROPERTY_NATIVE_SERVICE_LIBRARY_NAME"
|
|
android:value="lib{{ library_name }}.so" />
|
|
<property android:name="android.app.PROPERTY_NATIVE_SERVICE_FUNCTION_NAME"
|
|
android:value="NativeChildProcessService_onCreate" />
|
|
</service>
|
|
{% endfor %}
|
|
{% endif %}
|
|
|
|
{% set num_privileged_services = 10 %}
|
|
<meta-data android:name="org.chromium.content.browser.NUM_PRIVILEGED_SERVICES"
|
|
android:value="{{ num_privileged_services }}"/>
|
|
|
|
{% for i in range(num_privileged_services) %}
|
|
{% set privileged_process_name = ':privileged_process%d' % i %}
|
|
<service android:name="org.chromium.content.app.PrivilegedProcessService{{ i }}"
|
|
android:process="{{ privileged_process_name }}"
|
|
android:permission="{{ manifest_package }}.permission.CHILD_SERVICE"
|
|
android:isolatedProcess="false"
|
|
android:exported="false" />
|
|
|
|
{% endfor %}
|
|
|
|
<meta-data android:name="android.allow_multiple_resumed_activities" android:value="true" />
|
|
|
|
<!-- Samsung MultiWindow Support -->
|
|
<meta-data android:name="com.samsung.android.sdk.multiwindow.enable"
|
|
android:value="true" />
|
|
|
|
<meta-data android:name="com.samsung.android.sdk.multiwindow.penwindow.enable"
|
|
android:value="true"/>
|
|
|
|
{% if backup_key is defined %}
|
|
<!-- Backup keys are channel dependent -->
|
|
<meta-data android:name="com.google.android.backup.api_key"
|
|
android:value="{{ backup_key }}" />
|
|
{% endif %}
|
|
|
|
{% if channel in ['dev', 'canary', 'default'] %}
|
|
<meta-data android:name="com.sec.android.support.multiwindow" android:value="true" />
|
|
{% endif %}
|
|
<meta-data android:name="android.content.APP_RESTRICTIONS"
|
|
android:resource="@xml/app_restrictions"/>
|
|
|
|
{% if enable_arcore == 'true' %}
|
|
<!-- This tag indicates that this application optionally uses ARCore. -->
|
|
<meta-data android:name="com.google.ar.core" android:value="optional" />
|
|
<meta-data
|
|
android:name="com.google.ar.core.load_32bit_so_from_split_module"
|
|
android:value="optional" />
|
|
|
|
<!-- ARCore APK integration -->
|
|
{% block base_application_extra_arcore_definitions %}
|
|
<meta-data android:name="com.google.ar.core.session_settings"
|
|
android:value="allow_front_facing_motion_tracking_6dof," />
|
|
{% endblock base_application_extra_arcore_definitions %}
|
|
|
|
{% endif %}
|
|
|
|
{% if enable_vr == "true" %}
|
|
<!-- TODO(https://crbug.com/393557658): Investigate removing this. -->
|
|
<uses-native-library android:name="libopenxr.google.so" android:required="false" />
|
|
{% endif %}
|
|
|
|
<!-- Cast support -->
|
|
<meta-data
|
|
android:name=
|
|
"com.google.android.gms.cast.framework.OPTIONS_PROVIDER_CLASS_NAME"
|
|
android:value="org.chromium.components.media_router.caf.CastOptionsProvider"/>
|
|
|
|
<!-- These providers are declared in the base module to give the chrome
|
|
split preloader more time to work. -->
|
|
<provider android:name="org.chromium.chrome.browser.util.ChromeFileProvider"
|
|
android:authorities="{{ manifest_package }}.FileProvider"
|
|
android:exported="false"
|
|
android:grantUriPermissions="true">
|
|
<meta-data android:name="android.support.FILE_PROVIDER_PATHS"
|
|
android:resource="@xml/file_paths" />
|
|
</provider>
|
|
|
|
<provider android:name="org.chromium.chrome.browser.download.DownloadFileProvider"
|
|
android:authorities="{{ manifest_package }}.DownloadFileProvider"
|
|
android:exported="false"
|
|
android:grantUriPermissions="true">
|
|
<meta-data android:name="android.support.FILE_PROVIDER_PATHS"
|
|
android:resource="@xml/file_paths" />
|
|
</provider>
|
|
|
|
<!-- Provider for image data from Drag and Drop. -->
|
|
<provider android:name="org.chromium.ui.dragdrop.DropDataContentProvider"
|
|
android:authorities="{{ manifest_package }}.DropDataProvider"
|
|
android:exported="false"
|
|
android:grantUriPermissions="true">
|
|
</provider>
|
|
|
|
<!-- Provider for incognito pdf page. -->
|
|
<provider android:name="org.chromium.chrome.browser.pdf.PdfContentProvider"
|
|
android:authorities="{{ manifest_package }}.PdfContentProvider"
|
|
android:exported="false"
|
|
android:grantUriPermissions="true">
|
|
</provider>
|
|
|
|
<!-- Disables at startup init of Emoji2. See http://crbug.com/1205141 -->
|
|
<provider
|
|
android:name="androidx.startup.InitializationProvider"
|
|
tools:node="remove">
|
|
</provider>
|
|
|
|
<!-- We call FirebaseApp.initializeApp() explicitly rather than relying on this hook for better control over when it happens. -->
|
|
<provider
|
|
android:name="com.google.firebase.provider.FirebaseInitProvider"
|
|
tools:node="remove">
|
|
</provider>
|
|
|
|
<!-- The Play Core library added support for Play Asset Delivery (PAD), which is primarily
|
|
used by game apps to allow dynamic delivery of resource bundles. Since chrome does not
|
|
currently use this feature, remove these services to reclaim 70kb+ of binary size. -->
|
|
<service
|
|
android:name="com.google.android.play.core.assetpacks.AssetPackExtractionService"
|
|
tools:node="remove"/>
|
|
<service
|
|
android:name="com.google.android.play.core.assetpacks.ExtractionForegroundService"
|
|
tools:node="remove"/>
|
|
|
|
<!-- Provider for chrome data. -->
|
|
<provider android:name="org.chromium.chrome.browser.provider.ChromeBrowserProvider"
|
|
android:authorities="{{ manifest_package }}.ChromeBrowserProvider;{{ manifest_package }}.browser;{{ manifest_package }}"
|
|
android:exported="true">
|
|
<path-permission android:path="/bookmarks/search_suggest_query"
|
|
android:readPermission="android.permission.GLOBAL_SEARCH" />
|
|
</provider>
|
|
|
|
<provider
|
|
android:name="org.chromium.chrome.browser.provider.PageContentProvider"
|
|
android:authorities="{{ manifest_package }}.PageContentProvider"
|
|
android:exported="false"
|
|
android:grantUriPermissions="true">
|
|
</provider>
|
|
|
|
<!-- Provider for querying the Autofill third party mode state. -->
|
|
<provider android:name="org.chromium.chrome.browser.autofill.AutofillThirdPartyModeContentProvider"
|
|
android:authorities="{{ manifest_package }}.AutofillThirdPartyModeContentProvider"
|
|
android:exported="true"
|
|
tools:ignore="ExportedContentProvider">
|
|
</provider>
|
|
|
|
{% block base_application_definitions %}
|
|
{% endblock %}
|
|
{% block extra_application_definitions_for_test %}
|
|
{% endblock %}
|
|
</application>
|
|
{% block extra_root_definitions %}
|
|
{% endblock %}
|
|
</manifest>
|