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