Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(92)

Side by Side Diff: chrome/android/java/src/org/chromium/chrome/browser/ServiceTabLauncher.java

Issue 1057533005: Make service tab launcher a component (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « chrome/android/BUILD.gn ('k') | chrome/android/shell/java/AndroidManifest.xml.jinja2 » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 package org.chromium.chrome.browser;
6
7 import android.content.Context;
8 import android.content.pm.ApplicationInfo;
9 import android.content.pm.PackageManager;
10 import android.content.pm.PackageManager.NameNotFoundException;
11 import android.util.Log;
12
13 import org.chromium.base.CalledByNative;
14 import org.chromium.content_public.browser.WebContents;
15
16 /**
17 * Tab Launcher to be used to launch new tabs from background Android Services, when it is not
18 * known whether an activity is available. It will send an intent to launch the activity.
19 *
20 * TODO(peter): Have the activity confirm that the tab has been launched.
21 */
22 public abstract class ServiceTabLauncher {
23 private static final String TAG = ServiceTabLauncher.class.getSimpleName();
24 private static final String SERVICE_TAB_LAUNCHER_KEY =
25 "org.chromium.chrome.browser.SERVICE_TAB_LAUNCHER";
26
27 // Name of the extra containing the Id of a tab launch request id.
28 public static final String LAUNCH_REQUEST_ID_EXTRA =
29 "org.chromium.chrome.browser.ServiceTabLauncher.LAUNCH_REQUEST_ID";
30
31 private static ServiceTabLauncher sInstance;
32
33 /**
34 * Launches the browser activity and launches a tab for |url|.
35 *
36 * @param context The context using which the URL is being loaded.
37 * @param requestId Id of the request for launching this tab.
38 * @param incognito Whether the tab should be launched in incognito mode.
39 * @param url The URL which should be launched in a tab.
40 * @param disposition The disposition requested by the navigation source.
41 * @param referrerUrl URL of the referrer which is opening the page.
42 * @param referrerPolicy The referrer policy to consider when applying the r eferrer.
43 * @param extraHeaders Extra headers to apply when requesting the tab's URL.
44 * @param postData Post-data to include in the tab URL's request body.
45 */
46 @CalledByNative
47 public abstract void launchTab(Context context, int requestId, boolean incog nito, String url,
48 int disposition, String referrerUrl, int refe rrerPolicy,
49 String extraHeaders, byte[] postData);
50
51 /**
52 * Returns the active instance of the ServiceTabLauncher. If none exists, a meta-data key will
53 * be read from the AndroidManifest.xml file to determine the class which im plements the
54 * service tab launcher activity. If that fails, NULL will be returned inste ad.
55 *
56 * We need to do this run-around because the ServiceTabLauncher must be avai lable from
57 * background services, where no activity may be alive. Furthermore, no brow ser shell code has
58 * to be involved in the process at all, which means that there's no common location where we
59 * can inject a delegate in the start-up paths.
60 *
61 * @param Context The application context for the running service.
62 */
63 @CalledByNative
64 private static ServiceTabLauncher getInstance(Context context) throws Except ion {
65 if (sInstance == null) {
66 Class<?> implementation = getServiceTabLauncherClassFromManifest(con text);
67 if (implementation != null) {
68 sInstance = (ServiceTabLauncher) implementation.newInstance();
69 }
70 }
71
72 return sInstance;
73 }
74
75 /**
76 * Reads the SERVICE_TAB_LAUNCHER_KEY from the manifest and returns the Clas s it
77 * refers to. If the class cannot be found, NULL will be returned instead.
78 *
79 * @param context The application context used to get the package name and m anager.
80 */
81 private static Class<?> getServiceTabLauncherClassFromManifest(Context conte xt) {
82 try {
83 ApplicationInfo info = context.getPackageManager().getApplicationInf o(
84 context.getPackageName(), PackageManager.GET_META_DATA);
85 String className = info.metaData.getString(SERVICE_TAB_LAUNCHER_KEY) ;
86
87 return Class.forName(className);
88 } catch (NameNotFoundException e) {
89 Log.e(TAG, "Context.getPackage() refers to an invalid package name." );
90 } catch (ClassNotFoundException e) {
91 Log.e(TAG, "Invalid value for SERVICE_TAB_LAUNCHER in the Android ma nifest file.");
92 }
93
94 return null;
95 }
96
97 /**
98 * To be called by the activity when the WebContents for |requestId| has bee n created, or has
99 * been recycled from previous use. The |webContents| must not yet have star ted provisional
100 * load for the main frame.
101 *
102 * @param requestId Id of the tab launching request which has been fulfilled .
103 * @param webContents The WebContents instance associated with this request.
104 */
105 public static void onWebContentsForRequestAvailable(int requestId, WebConten ts webContents) {
106 nativeOnWebContentsForRequestAvailable(requestId, webContents);
107 }
108
109 private static native void nativeOnWebContentsForRequestAvailable(
110 int requestId, WebContents webContents);
111 }
OLDNEW
« no previous file with comments | « chrome/android/BUILD.gn ('k') | chrome/android/shell/java/AndroidManifest.xml.jinja2 » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698