blob: 8ecd63f52e0c36c3dec74b2dd61e14eef0a50166 [file] [log] [blame]
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2015 The Chromium Authors. All rights reserved.
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 }}"
tools:ignore="MissingVersion">
<!-- android:versionCode and android:versionName is set through gyp. See build/common.gypi -->
<uses-sdk android:minSdkVersion="{{min_sdk_version}}" android:targetSdkVersion="{{target_sdk_version}}" />
<uses-feature android:glEsVersion="0x00020000" />
<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 android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CAMERA" />
<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.READ_SYNC_SETTINGS"/>
<uses-permission android:name="android.permission.READ_SYNC_STATS"/>
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<uses-permission android:name="android.permission.USE_CREDENTIALS"/>
<uses-permission android:name="android.permission.VIBRATE"/>
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_SYNC_SETTINGS"/>
<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:permissionGroup="android.permission-group.DEVELOPMENT_TOOLS"
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.android.browser.permission.READ_HISTORY_BOOKMARKS"/>
<uses-permission android:name="com.android.browser.permission.WRITE_HISTORY_BOOKMARKS"/>
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT"/>
{% block extra_uses_permissions %}
{% endblock %}
<!-- We may use GPS but it's not required -->
<uses-feature android:name="android.hardware.location.gps" android:required="false" />
<uses-feature android:name="android.hardware.camera" android:required="false" />
<!--
android.permission.RECORD_AUDIO makes this implied, however we don't
require a microphone.
-->
<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" />
<!-- 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.ChromeMobileApplication{% endblock %}"
android:icon="@mipmap/app_icon"
android:label="@string/app_name"
android:largeHeap="false"
android:allowBackup="false"
android:supportsRtl="true"
{% block extra_application_attributes %}{% endblock %}>
<!-- 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.multiinstance.enable"
android:value="true" />
<meta-data android:name="com.samsung.android.sdk.multiwindow.multiinstance.launchmode"
android:value="singleTask" />
<meta-data android:name="com.samsung.android.sdk.multiwindow.penwindow.enable"
android:value="true"/>
{% if channel in ['dev', 'canary', 'default'] %}
<meta-data android:name="com.sec.android.support.multiwindow" android:value="true" />
{% endif %}
{% if configuration_policy == '1' %}
<meta-data android:name="android.content.APP_RESTRICTIONS"
android:resource="@xml/app_restrictions"/>
{% endif %}
<!-- Note: Set android:hardwareAccelerated to "false" in the ".Main"
activity below to go into software, browser tiling mode.
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="@android:style/Theme.Translucent.NoTitleBar">
</activity>
<activity-alias android:name="com.google.android.apps.chrome.Main"
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.DEFAULT" />
<category android:name="android.intent.category.LAUNCHER" />
<category android:name="android.intent.category.BROWSABLE" />
<category android:name="android.intent.category.APP_BROWSER" />
<category android:name="android.intent.category.NOTIFICATION_PREFERENCES" />
{% if channel in ['dev', 'canary', 'default'] %}
<category android:name="android.intent.category.MULTIWINDOW_LAUNCHER" />
{% endif %}
</intent-filter>
<!-- Matches the common case of intents with no MIME type.
Make sure to keep in sync with the next filter. -->
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
{% if channel in ['stable', 'default'] %}<data android:scheme="googlechrome" />{% endif %}
<data android:scheme="http" />
<data android:scheme="https" />
<data android:scheme="about" />
<data android:scheme="javascript" />
</intent-filter>
<!-- Same filter as above but with MIME types. Intents that
do not specify a MIME type won't match. -->
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
{% if channel in ['stable', 'default'] %}<data android:scheme="googlechrome" />{% endif %}
<data android:scheme="http" />
<data android:scheme="https" />
<data android:scheme="about" />
<data android:scheme="content" />
<data android:scheme="javascript" />
<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" />
<data android:scheme="file" android:mimeType="multipart/related"/>
</intent-filter>
<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.document.DocumentActivity"
android:exported="false"
android:theme="@style/MainTheme"
android:windowSoftInputMode="adjustResize"
android:taskAffinity=""
android:persistableMode="persistAcrossReboots"
android:autoRemoveFromRecents="false"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|mcc|mnc"
android:hardwareAccelerated="true">
</activity>
<activity android:name="org.chromium.chrome.browser.document.IncognitoDocumentActivity"
android:icon="@mipmap/incognito_app_icon"
android:exported="false"
android:theme="@style/IncognitoTheme"
android:windowSoftInputMode="adjustResize"
android:taskAffinity=""
android:persistableMode="persistNever"
android:autoRemoveFromRecents="false"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|mcc|mnc"
android:hardwareAccelerated="true">
</activity>
<activity android:name="org.chromium.chrome.browser.customtabs.CustomTabActivity"
android:theme="@style/MainTheme"
android:exported="false"
android:windowSoftInputMode="adjustResize"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|mcc|mnc"
android:hardwareAccelerated="true">
</activity>
<activity android:name="org.chromium.chrome.browser.ChromeTabbedActivity"
android:theme="@style/MainTheme"
android:exported="false"
android:windowBackground="@drawable/window_background"
android:windowSoftInputMode="adjustResize"
android:launchMode="singleTask"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|mcc|mnc"
android:hardwareAccelerated="true">
</activity>
<activity android:name="org.chromium.chrome.browser.multiwindow.MultiInstanceChromeTabbedActivity"
android:theme="@style/MainTheme"
android:exported="false"
android:windowBackground="@drawable/window_background"
android:windowSoftInputMode="adjustResize"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|mcc|mnc"
android:hardwareAccelerated="true">
</activity>
<activity android:name="org.chromium.chrome.browser.sync.ui.PassphraseActivity"
android:theme="@style/MainTheme"
android:autoRemoveFromRecents="true">
</activity>
<activity android:name="org.chromium.chrome.browser.bookmark.ManageBookmarkActivity"
android:theme="@style/DialogWhenLargeHolo"
android:label="@string/save_bookmark"
android:windowSoftInputMode="stateHidden|adjustPan"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|mcc|mnc">
<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="chrome" android:host="editbookmark" />
</intent-filter>
<intent-filter>
<!-- This is sent by the BrowserProviderProxy as a result of
calls to android.provider.Browser.saveBookmark(). -->
<action android:name="{{ manifest_package }}.ADDBOOKMARK" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
<activity android:name="org.chromium.chrome.browser.firstrun.FirstRunActivityStaging"
android:theme="@style/DialogWhenLarge"
android:label="@string/fre_label"
android:launchMode="singleTop"
android:windowSoftInputMode="stateHidden|adjustPan"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|mcc|mnc">
</activity>
<activity android:name="org.chromium.chrome.browser.preferences.PreferencesStaging"
android:theme="@style/PreferencesTheme"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|mcc|mnc"
android:label="@string/preferences"
android:exported="false">
</activity>
<activity android:name="org.chromium.chrome.browser.EmbedContentViewActivity"
android:theme="@style/ThemeWithActionBar"
android:hardwareAccelerated="true"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|mcc|mnc">
</activity>
<activity android:name="org.chromium.chrome.browser.prerender.PrerenderAPITestActivity"
android:theme="@style/MainTheme"
android:exported="true">
</activity>
<activity android:name="org.chromium.chrome.browser.enhancedbookmarks.EnhancedBookmarkActivity"
android:theme="@style/EnhancedBookmarkDialogWhite"
android:windowSoftInputMode="stateHidden"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|mcc|mnc" >
</activity>
<activity android:name="org.chromium.chrome.browser.enhancedbookmarks.EnhancedBookmarkEditActivity"
android:theme="@style/EnhancedBookmarkDialogWhite"
android:label="@string/edit_bookmark"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|mcc|mnc" >
</activity>
<activity android:name="org.chromium.chrome.browser.enhancedbookmarks.EnhancedBookmarkAddEditFolderActivity"
android:theme="@style/EnhancedBookmarkDialogWhite"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|mcc|mnc" >
</activity>
<activity android:name="org.chromium.chrome.browser.enhancedbookmarks.EnhancedBookmarkFolderSelectActivity"
android:theme="@style/EnhancedBookmarkDialogWhite"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|mcc|mnc" >
</activity>
<activity android:name="org.chromium.chrome.browser.enhancedbookmarks.EnhancedBookmarkSigninActivity"
android:theme="@style/EnhancedBookmarkDialogWhite"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|mcc|mnc" >
</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-alias android:name="com.google.android.apps.chrome.webapps.WebappManager"
android:targetActivity="org.chromium.chrome.browser.document.ChromeLauncherActivity">
<intent-filter>
<action android:name="com.google.android.apps.chrome.webapps.WebappManager.ACTION_START_WEBAPP" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity-alias>
<activity android:name="org.chromium.chrome.browser.webapps.WebappActivity"
android:theme="@style/MainTheme"
android:label="@string/webapp_activity_title"
android:documentLaunchMode="intoExisting"
android:windowSoftInputMode="adjustResize"
android:persistableMode="persistNever"
android:hardwareAccelerated="true"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|mcc|mnc">
</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>
{% for i in range(10) %}
<activity android:name="org.chromium.chrome.browser.webapps.WebappActivity{{ i }}"
android:theme="@style/MainTheme"
android:icon="@mipmap/app_shortcut_icon"
android:label="@string/webapp_activity_title"
android:launchMode="singleTask"
android:windowSoftInputMode="adjustResize"
android:persistableMode="persistNever"
android:hardwareAccelerated="true"
android:taskAffinity="{{ manifest_package }}.webapps.WebappActivity{{ i }}"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|mcc|mnc">
</activity>
<activity-alias android:name="com.google.android.apps.chrome.webapps.WebappActivity{{ i }}"
android:targetActivity="org.chromium.chrome.browser.webapps.WebappActivity{{ i }}"
android:icon="@mipmap/app_shortcut_icon"
android:label="@string/webapp_activity_title">
</activity-alias>
{% endfor %}
<activity android:name="org.chromium.chrome.browser.media.remote.ExpandedControllerActivity"
android:theme="@style/MainTheme"
android:label="Chrome.ExpandedControllerActivity"
android:hardwareAccelerated="true"
android:launchMode="singleTask"
android:noHistory="true"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|mcc|mnc"
android:excludeFromRecents="true">
</activity>
<activity android:name="org.chromium.chrome.browser.document.CipherKeyActivity"
android:launchMode="singleInstance"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:excludeFromRecents="true">
</activity>
<!-- Providers for chrome data. -->
<provider android:name="org.chromium.chrome.browser.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 for FileProvider. -->
<provider android:name="org.chromium.chrome.browser.util.CompatibilityFileProvider"
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>
<!-- Sync adapter for browser invalidation. -->
<service android:name="org.chromium.chrome.browser.invalidation.ChromeBrowserSyncAdapterService"
android:exported="false">
<intent-filter>
<action android:name="android.content.SyncAdapter" />
</intent-filter>
<meta-data android:name="android.content.SyncAdapter"
android:resource="@xml/syncadapter" />
</service>
<!-- Broadcast receiver that will be notified of account changes -->
<receiver android:name="org.chromium.chrome.browser.services.AccountsChangedReceiver">
<intent-filter>
<action android:name="android.accounts.LOGIN_ACCOUNTS_CHANGED" />
</intent-filter>
</receiver>
<!-- Precache service. -->
<service android:name="org.chromium.chrome.browser.precache.PrecacheService"
android:exported="false" />
<receiver android:name="org.chromium.chrome.browser.precache.PrecacheServiceLauncher">
<intent-filter>
<action android:name="android.intent.action.ACTION_POWER_CONNECTED"/>
<action android:name="android.intent.action.ACTION_POWER_DISCONNECTED"/>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>
</receiver>
<receiver android:name="org.chromium.chrome.browser.firstrun.ToSAckedReceiver"
android:permission="{{ manifest_package }}.TOS_ACKED">
<intent-filter>
<action android:name="{{ manifest_package }}.TOS_ACKED" />
</intent-filter>
</receiver>
<activity android:name="org.chromium.chrome.browser.bookmark.ShortcutActivity"
android:enabled="{{ 'true' if channel in ['stable', 'default'] else 'false' }}"
android:label="@string/bookmark_shortcut_name"
android:icon="@mipmap/bookmark_shortcut_icon"
android:theme="@style/ThemeWithActionBar"
android:hardwareAccelerated="true">
<intent-filter>
<action android:name="android.intent.action.CREATE_SHORTCUT" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
<receiver android:name="com.google.android.apps.chrome.appwidget.bookmarks.BookmarkThumbnailWidgetProvider"
android:enabled="{{ 'true' if channel in ['stable', 'default'] else 'false' }}"
android:label="@string/bookmarks">
<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_thumbnail_widget_info" />
</receiver>
<service android:name="org.chromium.chrome.browser.bookmarkswidget.BookmarkThumbnailWidgetService"
android:permission="android.permission.BIND_REMOTEVIEWS"
android:exported="false" />
<receiver android:name="org.chromium.chrome.browser.bookmarkswidget.BookmarkWidgetProxy"
android:exported="false" />
<!-- Receiver for GCM messages. Rebroadcasts them locally for sync and cloudprint. -->
<receiver android:name="com.google.ipc.invalidation.external.client.contrib.MultiplexingGcmListener$GCMReceiver"
android:exported="true"
android:permission="com.google.android.c2dm.permission.SEND">
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<action android:name="com.google.android.c2dm.intent.REGISTRATION" />
<category android:name="{{ manifest_package }}"/>
</intent-filter>
</receiver>
<service android:name="com.google.ipc.invalidation.external.client.contrib.MultiplexingGcmListener"
android:exported="false">
<meta-data android:name="sender_ids"
android:value="cloudprint.c2dm@gmail.com,ipc.invalidation@gmail.com"/>
</service>
<!-- Notification service for sync. -->
<meta-data android:name="ipc.invalidation.ticl.listener_service_class"
android:value="org.chromium.components.invalidation.InvalidationClientService"/>
<service android:name="org.chromium.components.invalidation.InvalidationClientService"
android:exported="false">
<intent-filter>
<action android:name="com.google.ipc.invalidation.AUTH_TOKEN_REQUEST"/>
</intent-filter>
</service>
<service android:name="com.google.ipc.invalidation.ticl.android2.TiclService"
android:exported="false"/>
<service android:name="com.google.ipc.invalidation.ticl.android2.channel.AndroidMessageSenderService"
android:exported="false"/>
<receiver android:name="com.google.ipc.invalidation.ticl.android2.AndroidInternalScheduler$AlarmReceiver"
android:exported="false"/>
<receiver android:name="com.google.ipc.invalidation.external.client2.contrib.AndroidListener$AlarmReceiver"
android:exported="false"/>
<!-- Notification service multiplexed GCM receiver -->
<service android:name="com.google.ipc.invalidation.ticl.android2.channel.AndroidMessageReceiverService"
android:exported="false"
android:enabled="true"/>
<receiver android:name="com.google.ipc.invalidation.ticl.android2.channel.AndroidMessageReceiverService$Receiver"
android:exported="false">
<intent-filter>
<action android:name="com.google.ipc.invalidation.gcmmplex.EVENT" />
</intent-filter>
</receiver>
<!-- GCMDriver multiplexed GCM receiver -->
<service android:name="org.chromium.chrome.browser.services.gcm.GCMListener"
android:exported="false"/>
<receiver android:name="org.chromium.chrome.browser.services.gcm.GCMListener$Receiver"
android:exported="false">
<intent-filter>
<action android:name="com.google.ipc.invalidation.gcmmplex.EVENT" />
</intent-filter>
</receiver>
<!-- 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">
<intent-filter>
<action android:name="org.chromium.chrome.browser.notifications.CLICK_NOTIFICATION" />
<action android:name="org.chromium.chrome.browser.notifications.CLOSE_NOTIFICATION" />
</intent-filter>
</receiver>
<!-- Service Worker Background Sync service listener -->
<service android:name="org.chromium.content.browser.BackgroundSyncLauncherService"
android:exported="false" />
<receiver android:name="org.chromium.content.browser.BackgroundSyncLauncherService$Receiver">
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>
</receiver>
<service android:name="org.chromium.chrome.browser.prerender.ChromePrerenderService"
android:exported="true"
tools:ignore="ExportedService" />
<service android:name="org.chromium.chrome.browser.customtabs.CustomTabsConnectionService"
android:exported="{{ 'true' if channel in ['dev', 'canary', 'default'] else 'false' }}"
tools:ignore="ExportedService">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.CUSTOM_TABS" />
</intent-filter>
</service>
<service android:name="org.chromium.chrome.browser.crash.MinidumpUploadService"
android:exported="false"/>
<service android:name="org.chromium.chrome.browser.omaha.OmahaClient"
android:exported="false"/>
<!-- 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. -->
{% set num_sandboxed_services = 20 %}
<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="false" />
{% endfor %}
{% set num_privileged_services = 3 %}
<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.content.app.PrivilegedProcessService{{ i }}"
android:process=":privileged_process{{ i }}"
android:permission="{{ manifest_package }}.permission.CHILD_SERVICE"
android:isolatedProcess="false"
android:exported="false" />
{% endfor %}
<receiver android:name="org.chromium.chrome.browser.download.OpenDownloadReceiver">
<intent-filter>
<action android:name="android.intent.action.DOWNLOAD_NOTIFICATION_CLICKED"/>
</intent-filter>
</receiver>
<receiver android:name="org.chromium.base.PowerStatusReceiver">
<intent-filter>
<action android:name="android.intent.action.ACTION_POWER_CONNECTED"/>
<action android:name="android.intent.action.ACTION_POWER_DISCONNECTED"/>
</intent-filter>
</receiver>
<service android:name="org.chromium.chrome.browser.media.remote.NotificationTransportControl$ListenerService" />
<!-- Receiver for lock screen input when casting -->
<receiver android:name="org.chromium.chrome.browser.media.remote.LockScreenTransportControl$MediaButtonIntentReceiver"/>
<service android:name="org.chromium.chrome.browser.media.MediaNotificationService"
android:exported="false"/>
<meta-data android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" />
<meta-data android:name="org.chromium.content.browser.SMART_CLIP_PROVIDER"
android:value="org.chromium.content.browser.SmartClipProvider"/>
<meta-data android:name="org.chromium.components.service_tab_launcher.SERVICE_TAB_LAUNCHER"
android:value="org.chromium.chrome.browser.ChromeServiceTabLauncher" />
{% block extra_application_definitions %}
{% endblock %}
</application>
</manifest>