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