Advance the 'permission is off in Android' handling for Site Settings.
[chromium-blink-merge.git] / chrome / android / java / AndroidManifest.xml
blob6ed14860411ffd864be0b2b06c271ea079db0b09
1 <?xml version="1.0" encoding="utf-8"?>
2 <!-- Copyright 2015 The Chromium Authors. All rights reserved.
3      Use of this source code is governed by a BSD-style license that can be
4      found in the LICENSE file. -->
6 <!--
7 Note: This is a jinja2 template, processed at build time into the final manifest.
9 Blocks denoted with { % block some_name % }foo{ % endblock % } can be overridden
10 by a child template that "extends" this file.
11 -->
13 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
14     xmlns:tools="http://schemas.android.com/tools"
15     package="{{ manifest_package }}"
16     tools:ignore="MissingVersion">
17     <!-- android:versionCode and android:versionName is set through gyp. See build/common.gypi -->
19     <uses-sdk android:minSdkVersion="{{min_sdk_version}}" android:targetSdkVersion="{{target_sdk_version}}" />
20     <uses-feature android:glEsVersion="0x00020000" />
22     <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
23     <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
24     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
25     <uses-permission android:name="android.permission.CAMERA" />
26     <uses-permission android:name="android.permission.GET_ACCOUNTS"/>
27     <uses-permission android:name="android.permission.INTERNET"/>
28     <uses-permission android:name="android.permission.MANAGE_ACCOUNTS"/>
29     <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
30     <uses-permission android:name="android.permission.NFC"/>
31     <uses-permission android:name="android.permission.READ_SYNC_SETTINGS"/>
32     <uses-permission android:name="android.permission.READ_SYNC_STATS"/>
33     <uses-permission android:name="android.permission.RECORD_AUDIO"/>
34     <uses-permission android:name="android.permission.USE_CREDENTIALS"/>
35     <uses-permission android:name="android.permission.VIBRATE"/>
36     <uses-permission android:name="android.permission.WAKE_LOCK"/>
37     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
38     <uses-permission android:name="android.permission.WRITE_SYNC_SETTINGS"/>
40     <permission android:name="{{ manifest_package }}.permission.CHILD_SERVICE" android:protectionLevel="signature" />
41     <permission android:name="{{ manifest_package }}.permission.READ_WRITE_BOOKMARK_FOLDERS" android:protectionLevel="signatureOrSystem" />
42     <permission android:name="{{ manifest_package }}.TOS_ACKED" android:protectionLevel="signatureOrSystem" />
43     <!-- Only chrome can receive the messages and registration result -->
44     <permission android:name="{{ manifest_package }}.permission.C2D_MESSAGE"
45         android:protectionLevel="signature" />
46     <permission android:name="{{ manifest_package }}.permission.DEBUG"
47                 android:label="Debug web pages"
48                 android:permissionGroup="android.permission-group.DEVELOPMENT_TOOLS"
49                 android:protectionLevel="signature" />
51     <uses-permission android:name="{{ manifest_package }}.permission.C2D_MESSAGE" />
52     <uses-permission android:name="{{ manifest_package }}.permission.READ_WRITE_BOOKMARK_FOLDERS" />
53     <uses-permission android:name="{{ manifest_package }}.TOS_ACKED" />
55     <uses-permission android:name="com.chrome.permission.DEVICE_EXTRAS" />
56     <uses-permission android:name="com.android.browser.permission.READ_HISTORY_BOOKMARKS"/>
57     <uses-permission android:name="com.android.browser.permission.WRITE_HISTORY_BOOKMARKS"/>
58     <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
59     <uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT"/>
61     {% block extra_uses_permissions %}
62     {% endblock %}
64     <!-- We may use GPS but it's not required -->
65     <uses-feature android:name="android.hardware.location.gps" android:required="false" />
66     <uses-feature android:name="android.hardware.camera" android:required="false" />
68     <!--
69       android.permission.RECORD_AUDIO makes this implied, however we don't
70       require a microphone.
71     -->
72     <uses-feature android:name="android.hardware.microphone" android:required="false" />
73     <!--
74       The app is usable with keyboard/mouse. This feature is implicitly true for
75       all applications and needs to be disabled manually.
76     -->
77     <uses-feature android:name="android.hardware.touchscreen" android:required="false" />
79     <!-- Set android:largeHeap to "true" to allow more than the default
80          Java heap limit (32Mb on Nexus S, 48Mb on Xoom). -->
81     <application android:name="{% block application_name %}org.chromium.chrome.browser.ChromeApplication{% endblock %}"
82         android:icon="@mipmap/app_icon"
83         android:label="@string/app_name"
84         android:largeHeap="false"
85         android:allowBackup="false"
86         android:supportsRtl="true"
87         {% block extra_application_attributes %}{% endblock %}>
89         <!-- Samsung MultiWindow Support -->
90         <meta-data android:name="com.samsung.android.sdk.multiwindow.enable"
91             android:value="true" />
92         <meta-data android:name="com.samsung.android.sdk.multiwindow.multiinstance.enable"
93             android:value="true" />
94         <meta-data android:name="com.samsung.android.sdk.multiwindow.multiinstance.launchmode"
95             android:value="singleTask" />
96         <meta-data android:name="com.samsung.android.sdk.multiwindow.penwindow.enable"
97             android:value="true"/>
99         {% if channel in ['dev', 'canary', 'default'] %}
100         <meta-data android:name="com.sec.android.support.multiwindow" android:value="true" />
101         {% endif %}
102         {% if configuration_policy == '1' %}
103         <meta-data android:name="android.content.APP_RESTRICTIONS"
104             android:resource="@xml/app_restrictions"/>
105         {% endif %}
107         <!-- Note: Set android:hardwareAccelerated to "false" in the ".Main"
108              activity below to go into software, browser tiling mode.
110              Since this activity (shown in the launcher) and the application
111              (shown in Android's Settings/Apps list) share the same label, we
112              do not specify one here to allow it to inherit from the app. -->
113         <activity android:name="org.chromium.chrome.browser.document.ChromeLauncherActivity"
114             android:theme="@android:style/Theme.Translucent.NoTitleBar">
115         </activity>
116         <activity-alias android:name="com.google.android.apps.chrome.Main"
117             android:targetActivity="org.chromium.chrome.browser.document.ChromeLauncherActivity"
118             android:exported="true">
119             <intent-filter>
120                 <action android:name="android.intent.action.MAIN" />
121                 <category android:name="android.intent.category.DEFAULT" />
122                 <category android:name="android.intent.category.LAUNCHER" />
123                 <category android:name="android.intent.category.BROWSABLE" />
124                 <category android:name="android.intent.category.APP_BROWSER" />
125                 <category android:name="android.intent.category.NOTIFICATION_PREFERENCES" />
126                 {% if channel in ['dev', 'canary', 'default'] %}
127                 <category android:name="android.intent.category.MULTIWINDOW_LAUNCHER" />
128                 {% endif %}
129             </intent-filter>
130             <!-- Matches the common case of intents with no MIME type.
131                  Make sure to keep in sync with the next filter.  -->
132             <intent-filter>
133                 <action android:name="android.intent.action.VIEW" />
134                 <category android:name="android.intent.category.DEFAULT" />
135                 <category android:name="android.intent.category.BROWSABLE" />
136                 {% if channel in ['stable', 'default'] %}<data android:scheme="googlechrome" />{% endif %}
137                 <data android:scheme="http" />
138                 <data android:scheme="https" />
139                 <data android:scheme="about" />
140                 <data android:scheme="javascript" />
141             </intent-filter>
142             <!-- Same filter as above but with MIME types.  Intents that
143                  do not specify a MIME type won't match. -->
144             <intent-filter>
145                 <action android:name="android.intent.action.VIEW" />
146                 <category android:name="android.intent.category.DEFAULT" />
147                 <category android:name="android.intent.category.BROWSABLE" />
148                 {% if channel in ['stable', 'default'] %}<data android:scheme="googlechrome" />{% endif %}
149                 <data android:scheme="http" />
150                 <data android:scheme="https" />
151                 <data android:scheme="about" />
152                 <data android:scheme="content" />
153                 <data android:scheme="javascript" />
154                 <data android:mimeType="text/html"/>
155                 <data android:mimeType="text/plain"/>
156                 <data android:mimeType="application/xhtml+xml"/>
157             </intent-filter>
158             <!-- MHTML support, used for snapshots -->
159             <intent-filter>
160                 <action android:name="android.intent.action.VIEW" />
161                 <category android:name="android.intent.category.DEFAULT" />
162                 <data android:scheme="file" android:mimeType="multipart/related"/>
163             </intent-filter>
164             <intent-filter>
165                 <action android:name="android.intent.action.MEDIA_SEARCH" />
166                 <category android:name="android.intent.category.DEFAULT" />
167             </intent-filter>
168             <intent-filter>
169                 <action android:name="android.speech.action.VOICE_SEARCH_RESULTS" />
170                 <category android:name="android.intent.category.DEFAULT" />
171             </intent-filter>
172             <intent-filter>
173                 <action android:name="android.nfc.action.NDEF_DISCOVERED" />
174                 <category android:name="android.intent.category.DEFAULT" />
175                 <data android:scheme="http" />
176                 <data android:scheme="https" />
177             </intent-filter>
178             <intent-filter>
179                 <action android:name="android.intent.action.SEARCH" />
180             </intent-filter>
181             <intent-filter>
182                 <action android:name="com.sec.android.airview.HOVER" />
183             </intent-filter>
184             <meta-data android:name="android.app.searchable"
185                 android:resource="@xml/searchable" />
186         </activity-alias>
187         <activity android:name="org.chromium.chrome.browser.document.DocumentActivity"
188             android:exported="false"
189             android:theme="@style/MainTheme"
190             android:windowSoftInputMode="adjustResize"
191             android:taskAffinity=""
192             android:persistableMode="persistAcrossReboots"
193             android:autoRemoveFromRecents="false"
194             android:configChanges="orientation|keyboardHidden|keyboard|screenSize|mcc|mnc"
195             android:hardwareAccelerated="true">
196         </activity>
197         <activity-alias android:name="com.google.android.apps.chrome.document.DocumentActivity"
198             android:targetActivity="org.chromium.chrome.browser.document.DocumentActivity"
199             android:exported="false"/>
200         <activity android:name="org.chromium.chrome.browser.document.IncognitoDocumentActivity"
201             android:icon="@mipmap/incognito_app_icon"
202             android:exported="false"
203             android:theme="@style/IncognitoTheme"
204             android:windowSoftInputMode="adjustResize"
205             android:taskAffinity=""
206             android:persistableMode="persistNever"
207             android:autoRemoveFromRecents="false"
208             android:configChanges="orientation|keyboardHidden|keyboard|screenSize|mcc|mnc"
209             android:hardwareAccelerated="true">
210         </activity>
211         <activity-alias android:name="com.google.android.apps.chrome.document.IncognitoDocumentActivity"
212             android:targetActivity="org.chromium.chrome.browser.document.IncognitoDocumentActivity"
213             android:exported="false"/>
214         <activity android:name="org.chromium.chrome.browser.customtabs.CustomTabActivity"
215             android:theme="@style/MainTheme"
216             android:exported="false"
217             android:windowSoftInputMode="adjustResize"
218             android:configChanges="orientation|keyboardHidden|keyboard|screenSize|mcc|mnc"
219             android:hardwareAccelerated="true">
220         </activity>
221         <activity android:name="org.chromium.chrome.browser.ChromeTabbedActivity"
222              android:theme="@style/MainTheme"
223              android:exported="false"
224              android:windowBackground="@drawable/window_background"
225              android:windowSoftInputMode="adjustResize"
226              android:launchMode="singleTask"
227              android:configChanges="orientation|keyboardHidden|keyboard|screenSize|mcc|mnc"
228              android:hardwareAccelerated="true">
229         </activity>
230         <activity android:name="org.chromium.chrome.browser.multiwindow.MultiInstanceChromeTabbedActivity"
231             android:theme="@style/MainTheme"
232             android:exported="false"
233             android:windowBackground="@drawable/window_background"
234             android:windowSoftInputMode="adjustResize"
235             android:configChanges="orientation|keyboardHidden|keyboard|screenSize|mcc|mnc"
236             android:hardwareAccelerated="true">
237         </activity>
238         <activity android:name="org.chromium.chrome.browser.sync.ui.PassphraseActivity"
239             android:theme="@style/MainTheme"
240             android:autoRemoveFromRecents="true">
241         </activity>
242         <activity android:name="org.chromium.chrome.browser.bookmark.ManageBookmarkActivity"
243             android:theme="@style/DialogWhenLargeHolo"
244             android:label="@string/save_bookmark"
245             android:windowSoftInputMode="stateHidden|adjustPan"
246             android:configChanges="orientation|keyboardHidden|keyboard|screenSize|mcc|mnc">
247             <intent-filter>
248                 <action android:name="android.intent.action.VIEW" />
249                 <category android:name="android.intent.category.DEFAULT" />
250                 <category android:name="android.intent.category.BROWSABLE" />
251                 <data android:scheme="chrome" android:host="editbookmark" />
252             </intent-filter>
253             <intent-filter>
254                 <!-- This is sent by the BrowserProviderProxy as a result of
255                      calls to android.provider.Browser.saveBookmark(). -->
256                 <action android:name="{{ manifest_package }}.ADDBOOKMARK" />
257                 <category android:name="android.intent.category.DEFAULT" />
258             </intent-filter>
259         </activity>
260         <activity android:name="org.chromium.chrome.browser.firstrun.FirstRunActivity"
261             android:theme="@style/DialogWhenLarge"
262             android:label="@string/fre_label"
263             android:launchMode="singleTop"
264             android:windowSoftInputMode="stateHidden|adjustPan"
265             android:configChanges="orientation|keyboardHidden|keyboard|screenSize|mcc|mnc">
266         </activity>
267         <activity android:name="org.chromium.chrome.browser.preferences.Preferences"
268             android:theme="@style/PreferencesTheme"
269             android:configChanges="orientation|keyboardHidden|keyboard|screenSize|mcc|mnc"
270             android:label="@string/preferences"
271             android:exported="false">
272         </activity>
273         <activity android:name="org.chromium.chrome.browser.EmbedContentViewActivity"
274             android:theme="@style/ThemeWithActionBar"
275             android:hardwareAccelerated="true"
276             android:configChanges="orientation|keyboardHidden|keyboard|screenSize|mcc|mnc">
277         </activity>
278         <activity android:name="org.chromium.chrome.browser.prerender.PrerenderAPITestActivity"
279             android:theme="@style/MainTheme"
280             android:exported="true">
281         </activity>
282         <activity android:name="org.chromium.chrome.browser.enhancedbookmarks.EnhancedBookmarkActivity"
283             android:theme="@style/EnhancedBookmarkDialog"
284             android:windowSoftInputMode="stateAlwaysHidden"
285             android:configChanges="orientation|keyboardHidden|keyboard|screenSize|mcc|mnc" >
286         </activity>
287         <activity android:name="org.chromium.chrome.browser.enhancedbookmarks.EnhancedBookmarkEditActivity"
288             android:theme="@style/EnhancedBookmarkDialogWhite"
289             android:label="@string/edit_bookmark"
290             android:windowSoftInputMode="stateHidden"
291             android:configChanges="orientation|keyboardHidden|keyboard|screenSize|mcc|mnc" >
292         </activity>
293         <activity android:name="org.chromium.chrome.browser.enhancedbookmarks.EnhancedBookmarkAddEditFolderActivity"
294             android:theme="@style/EnhancedBookmarkDialogWhite"
295             android:configChanges="orientation|keyboardHidden|keyboard|screenSize|mcc|mnc" >
296         </activity>
297         <activity android:name="org.chromium.chrome.browser.enhancedbookmarks.EnhancedBookmarkFolderSelectActivity"
298             android:theme="@style/EnhancedBookmarkDialogWhite"
299             android:windowSoftInputMode="stateAlwaysHidden"
300             android:label="@string/enhanced_bookmark_choose_folder"
301             android:configChanges="orientation|keyboardHidden|keyboard|screenSize|mcc|mnc" >
302         </activity>
303         <activity android:name="org.chromium.chrome.browser.enhancedbookmarks.EnhancedBookmarkSigninActivity"
304             android:theme="@style/EnhancedBookmarkDialogWhite"
305             android:configChanges="orientation|keyboardHidden|keyboard|screenSize|mcc|mnc" >
306         </activity>
308         <!--
309             Activities for webapps.
310             TODO(dfalcantara): Remove the aliases for the WebappActivities once we're pretty sure
311                                that users don't have any instances of the original Activity still
312                                running.
313         -->
314         <activity-alias android:name="com.google.android.apps.chrome.webapps.WebappManager"
315             android:targetActivity="org.chromium.chrome.browser.document.ChromeLauncherActivity">
316             <intent-filter>
317                 <action android:name="com.google.android.apps.chrome.webapps.WebappManager.ACTION_START_WEBAPP" />
318                 <category android:name="android.intent.category.DEFAULT" />
319             </intent-filter>
320         </activity-alias>
321         <activity android:name="org.chromium.chrome.browser.webapps.WebappActivity"
322             android:theme="@style/MainTheme"
323             android:label="@string/webapp_activity_title"
324             android:documentLaunchMode="intoExisting"
325             android:windowSoftInputMode="adjustResize"
326             android:persistableMode="persistNever"
327             android:hardwareAccelerated="true"
328             android:configChanges="orientation|keyboardHidden|keyboard|screenSize|mcc|mnc">
329         </activity>
330         <activity-alias android:name="com.google.android.apps.chrome.webapps.WebappActivity"
331             android:targetActivity="org.chromium.chrome.browser.webapps.WebappActivity"
332             android:label="@string/webapp_activity_title">
333         </activity-alias>
334         {% for i in range(10) %}
335         <activity android:name="org.chromium.chrome.browser.webapps.WebappActivity{{ i }}"
336             android:theme="@style/MainTheme"
337             android:icon="@mipmap/app_shortcut_icon"
338             android:label="@string/webapp_activity_title"
339             android:launchMode="singleTask"
340             android:windowSoftInputMode="adjustResize"
341             android:persistableMode="persistNever"
342             android:hardwareAccelerated="true"
343             android:taskAffinity="{{ manifest_package }}.webapps.WebappActivity{{ i }}"
344             android:configChanges="orientation|keyboardHidden|keyboard|screenSize|mcc|mnc">
345         </activity>
346         <activity-alias android:name="com.google.android.apps.chrome.webapps.WebappActivity{{ i }}"
347             android:targetActivity="org.chromium.chrome.browser.webapps.WebappActivity{{ i }}"
348             android:icon="@mipmap/app_shortcut_icon"
349             android:label="@string/webapp_activity_title">
350         </activity-alias>
351         {% endfor %}
353         <activity android:name="org.chromium.chrome.browser.media.remote.ExpandedControllerActivity"
354             android:theme="@style/MainTheme"
355             android:label="Chrome.ExpandedControllerActivity"
356             android:hardwareAccelerated="true"
357             android:launchMode="singleTask"
358             android:noHistory="true"
359             android:configChanges="orientation|keyboardHidden|keyboard|screenSize|mcc|mnc"
360             android:excludeFromRecents="true">
361         </activity>
363         <activity android:name="org.chromium.chrome.browser.childaccounts.ResetDataActivity"
364             android:theme="@android:style/Theme.Translucent.NoTitleBar"
365             android:exported="true"
366             android:excludeFromRecents="true">
367         </activity>
369         <activity android:name="org.chromium.chrome.browser.document.CipherKeyActivity"
370             android:launchMode="singleInstance"
371             android:theme="@android:style/Theme.Translucent.NoTitleBar"
372             android:excludeFromRecents="true">
373         </activity>
375         <!-- Providers for chrome data. -->
376         <provider android:name="org.chromium.chrome.browser.ChromeBrowserProvider"
377             android:authorities="{{ manifest_package }}.ChromeBrowserProvider;{{ manifest_package }}.browser;{{ manifest_package }}"
378             android:exported="true">
379             <path-permission android:path="/bookmarks/search_suggest_query"
380                     android:readPermission="android.permission.GLOBAL_SEARCH" />
381         </provider>
383         <!-- Provider for FileProvider. -->
384         <provider android:name="org.chromium.chrome.browser.util.CompatibilityFileProvider"
385             android:authorities="{{ manifest_package }}.FileProvider"
386             android:exported="false"
387             android:grantUriPermissions="true">
388             <meta-data android:name="android.support.FILE_PROVIDER_PATHS"
389                 android:resource="@xml/file_paths" />
390         </provider>
392         <!-- Sync adapter for browser invalidation. -->
393         <service android:name="org.chromium.chrome.browser.invalidation.ChromeBrowserSyncAdapterService"
394             android:exported="false">
395             <intent-filter>
396                 <action android:name="android.content.SyncAdapter" />
397             </intent-filter>
398             <meta-data android:name="android.content.SyncAdapter"
399                        android:resource="@xml/syncadapter" />
400         </service>
402         <!-- Broadcast receiver that will be notified of account changes -->
403         <receiver android:name="org.chromium.chrome.browser.services.AccountsChangedReceiver">
404             <intent-filter>
405                 <action android:name="android.accounts.LOGIN_ACCOUNTS_CHANGED" />
406             </intent-filter>
407         </receiver>
409         <!-- Precache service. -->
410         <service android:name="org.chromium.chrome.browser.precache.PrecacheService"
411             android:exported="false" />
412         <receiver android:name="org.chromium.chrome.browser.precache.PrecacheServiceLauncher">
413             <intent-filter>
414                 <action android:name="android.intent.action.ACTION_POWER_CONNECTED"/>
415                 <action android:name="android.intent.action.ACTION_POWER_DISCONNECTED"/>
416                 <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
417             </intent-filter>
418         </receiver>
420         <receiver android:name="org.chromium.chrome.browser.firstrun.ToSAckedReceiver"
421             android:permission="{{ manifest_package }}.TOS_ACKED">
422             <intent-filter>
423                 <action android:name="{{ manifest_package }}.TOS_ACKED" />
424             </intent-filter>
425         </receiver>
427         <activity android:name="org.chromium.chrome.browser.bookmark.ShortcutActivity"
428             android:enabled="{{ 'true' if channel in ['stable', 'default'] else 'false' }}"
429             android:label="@string/bookmark_shortcut_name"
430             android:icon="@mipmap/bookmark_shortcut_icon"
431             android:theme="@style/ThemeWithActionBar"
432             android:hardwareAccelerated="true">
434             <intent-filter>
435                 <action android:name="android.intent.action.CREATE_SHORTCUT" />
436                 <category android:name="android.intent.category.DEFAULT" />
437             </intent-filter>
438         </activity>
440         <receiver android:name="com.google.android.apps.chrome.appwidget.bookmarks.BookmarkThumbnailWidgetProvider"
441             android:enabled="{{ 'true' if channel in ['stable', 'default'] else 'false' }}"
442             android:label="@string/bookmarks">
443             <intent-filter>
444                 <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
445                 <action android:name=".BOOKMARK_APPWIDGET_UPDATE" />
446             </intent-filter>
447             <meta-data
448                 android:name="android.appwidget.provider"
449                 android:resource="@xml/bookmark_thumbnail_widget_info" />
450         </receiver>
451         <service android:name="org.chromium.chrome.browser.bookmarkswidget.BookmarkThumbnailWidgetService"
452             android:permission="android.permission.BIND_REMOTEVIEWS"
453             android:exported="false" />
454         <receiver android:name="org.chromium.chrome.browser.bookmarkswidget.BookmarkWidgetProxy"
455             android:exported="false" />
457         <!-- Receiver for GCM messages. Rebroadcasts them locally for sync and cloudprint. -->
458         <receiver android:name="com.google.ipc.invalidation.external.client.contrib.MultiplexingGcmListener$GCMReceiver"
459             android:exported="true"
460             android:permission="com.google.android.c2dm.permission.SEND">
461             <intent-filter>
462                 <action android:name="com.google.android.c2dm.intent.RECEIVE" />
463                 <action android:name="com.google.android.c2dm.intent.REGISTRATION" />
464                <category android:name="{{ manifest_package }}"/>
465             </intent-filter>
466         </receiver>
467         <service android:name="com.google.ipc.invalidation.external.client.contrib.MultiplexingGcmListener"
468             android:exported="false">
469             <meta-data android:name="sender_ids"
470                 android:value="cloudprint.c2dm@gmail.com,ipc.invalidation@gmail.com"/>
471         </service>
473         <!-- Notification service for sync. -->
474         <meta-data android:name="ipc.invalidation.ticl.listener_service_class"
475             android:value="org.chromium.components.invalidation.InvalidationClientService"/>
476         <service android:name="org.chromium.components.invalidation.InvalidationClientService"
477             android:exported="false">
478             <intent-filter>
479               <action android:name="com.google.ipc.invalidation.AUTH_TOKEN_REQUEST"/>
480             </intent-filter>
481         </service>
482         <service android:name="com.google.ipc.invalidation.ticl.android2.TiclService"
483             android:exported="false"/>
484         <service android:name="com.google.ipc.invalidation.ticl.android2.channel.AndroidMessageSenderService"
485             android:exported="false"/>
486         <receiver android:name="com.google.ipc.invalidation.ticl.android2.AndroidInternalScheduler$AlarmReceiver"
487             android:exported="false"/>
488         <receiver android:name="com.google.ipc.invalidation.external.client2.contrib.AndroidListener$AlarmReceiver"
489             android:exported="false"/>
491         <!-- Notification service multiplexed GCM receiver -->
492         <service android:name="com.google.ipc.invalidation.ticl.android2.channel.AndroidMessageReceiverService"
493             android:exported="false"
494             android:enabled="true"/>
495         <receiver android:name="com.google.ipc.invalidation.ticl.android2.channel.AndroidMessageReceiverService$Receiver"
496             android:exported="false">
497             <intent-filter>
498                 <action android:name="com.google.ipc.invalidation.gcmmplex.EVENT" />
499             </intent-filter>
500         </receiver>
502         <!-- GCMDriver multiplexed GCM receiver -->
503         <service android:name="org.chromium.chrome.browser.services.gcm.GCMListener"
504             android:exported="false"/>
505         <receiver android:name="org.chromium.chrome.browser.services.gcm.GCMListener$Receiver"
506             android:exported="false">
507             <intent-filter>
508                 <action android:name="com.google.ipc.invalidation.gcmmplex.EVENT" />
509             </intent-filter>
510         </receiver>
512         <!-- Android Notification service listener -->
513         <service android:name="org.chromium.chrome.browser.notifications.NotificationService"
514             android:exported="false"/>
515         <receiver android:name="org.chromium.chrome.browser.notifications.NotificationService$Receiver"
516             android:exported="false">
517             <intent-filter>
518                 <action android:name="org.chromium.chrome.browser.notifications.CLICK_NOTIFICATION" />
519                 <action android:name="org.chromium.chrome.browser.notifications.CLOSE_NOTIFICATION" />
520             </intent-filter>
521         </receiver>
523         <!-- Service Worker Background Sync service listener -->
524         <service android:name="org.chromium.content.browser.BackgroundSyncLauncherService"
525             android:exported="false" />
526         <receiver android:name="org.chromium.content.browser.BackgroundSyncLauncherService$Receiver">
527             <intent-filter>
528                 <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
529             </intent-filter>
530         </receiver>
532         <service android:name="org.chromium.chrome.browser.prerender.ChromePrerenderService"
533             android:exported="true"
534             tools:ignore="ExportedService" />
535         <service android:name="org.chromium.chrome.browser.customtabs.CustomTabsConnectionService"
536              android:exported="{{ 'true' if channel in ['dev', 'canary', 'default'] else 'false' }}"
537              tools:ignore="ExportedService">
538             <intent-filter>
539               <action android:name="android.intent.action.MAIN" />
540               <category android:name="android.intent.category.CUSTOM_TABS" />
541             </intent-filter>
542         </service>
543         <service android:name="org.chromium.chrome.browser.crash.LogcatExtractionService"
544                  android:exported="false"/>
545         <service android:name="org.chromium.chrome.browser.crash.MinidumpPreparationService"
546                  android:exported="false"/>
547         <service android:name="org.chromium.chrome.browser.crash.MinidumpUploadService"
548             android:exported="false"/>
550         <service android:name="org.chromium.chrome.browser.omaha.OmahaClient"
551             android:exported="false"/>
553         <!-- The following service entries exist in order to allow us to
554              start more than one sandboxed process. -->
556         <!-- NOTE: If you change the value of "android:process" for the below services,
557              you also need to update kHelperProcessExecutableName in chrome_constants.cc. -->
558         {% set num_sandboxed_services = 20 %}
559         <meta-data android:name="org.chromium.content.browser.NUM_SANDBOXED_SERVICES"
560             android:value="{{ num_sandboxed_services }}"/>
561         {% for i in range(num_sandboxed_services) %}
562         <service android:name="org.chromium.content.app.SandboxedProcessService{{ i }}"
563             android:process=":sandboxed_process{{ i }}"
564             android:permission="{{ manifest_package }}.permission.CHILD_SERVICE"
565             android:isolatedProcess="true"
566             android:exported="false" />
567         {% endfor %}
569         {% set num_privileged_services = 3 %}
570         <meta-data android:name="org.chromium.content.browser.NUM_PRIVILEGED_SERVICES"
571             android:value="{{ num_privileged_services }}"/>
572         {% for i in range(num_privileged_services) %}
573         <service android:name="org.chromium.content.app.PrivilegedProcessService{{ i }}"
574             android:process=":privileged_process{{ i }}"
575             android:permission="{{ manifest_package }}.permission.CHILD_SERVICE"
576             android:isolatedProcess="false"
577             android:exported="false" />
578         {% endfor %}
580         <receiver android:name="org.chromium.chrome.browser.download.OpenDownloadReceiver">
581             <intent-filter>
582                 <action android:name="android.intent.action.DOWNLOAD_NOTIFICATION_CLICKED"/>
583             </intent-filter>
584         </receiver>
586         <receiver android:name="org.chromium.base.PowerStatusReceiver">
587             <intent-filter>
588                 <action android:name="android.intent.action.ACTION_POWER_CONNECTED"/>
589                 <action android:name="android.intent.action.ACTION_POWER_DISCONNECTED"/>
590             </intent-filter>
591         </receiver>
593         <service android:name="org.chromium.chrome.browser.media.remote.NotificationTransportControl$ListenerService" />
595         <!--  Receiver for lock screen input when casting -->
596         <receiver android:name="org.chromium.chrome.browser.media.remote.LockScreenTransportControl$MediaButtonIntentReceiver"/>
598         <service android:name="org.chromium.chrome.browser.media.MediaNotificationService"
599             android:exported="false"/>
600         <service android:name="org.chromium.chrome.browser.media.ui.NotificationMediaPlaybackControls$ListenerService"
601             android:exported="false"/>
603         <meta-data android:name="com.google.android.gms.version"
604             android:value="@integer/google_play_services_version" />
606         <meta-data android:name="org.chromium.content.browser.SMART_CLIP_PROVIDER"
607             android:value="org.chromium.content.browser.SmartClipProvider"/>
608         <meta-data android:name="org.chromium.components.service_tab_launcher.SERVICE_TAB_LAUNCHER"
609                    android:value="org.chromium.chrome.browser.ChromeServiceTabLauncher" />
611         {% block extra_application_definitions %}
613         <!-- Media route controllers to use for remote playback (cast).
614              This is here, rather than in code, since it varies between upstream and downstream,
615              yet we need this list of classes in the notification service, which belongs upstream
616              and doesn't run the downstream startup code. The Cast code will, for each media element,
617              choose the first MediaRouteController that can play it, so the order of the list can be important.
618              The most specific MediaRouteControllers should be listed first, followed by more generic ones.
619              The downstream manifest replaces this block, and hence replaces the list of media route
620              controllers with its own list. -->
621         <meta-data android:name="org.chromium.content.browser.REMOTE_MEDIA_PLAYERS"
622             android:value="org.chromium.chrome.browser.media.remote.DefaultMediaRouteController"/>
624         {% endblock %}
625     </application>
626 </manifest>