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

Side by Side Diff: web_apks/minting_example/src/org/chromium/minting/MintingServiceFactory.java

Issue 1888773004: 🙅 Bind a WebAPK to its "host" browser. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: xi comments Created 4 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
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 package org.chromium.minting; 5 package org.chromium.minting;
6 6
7 import android.app.Service; 7 import android.app.Service;
8 import android.content.Context; 8 import android.content.Context;
9 import android.content.Intent; 9 import android.content.Intent;
10 import android.os.IBinder; 10 import android.os.IBinder;
11 import android.util.Log; 11 import android.util.Log;
12 12
13 import org.chromium.minting.lib.common.WebAPKUtils;
14
13 import java.io.File; 15 import java.io.File;
14 import java.lang.reflect.Constructor; 16 import java.lang.reflect.Constructor;
15 17
16 /** 18 /**
17 * Shell class for services provided by Web APK to Chrome. Extracts code with im plementation of 19 * Shell class for services provided by Web APK to Chrome. Extracts code with im plementation of
18 * services from .dex file in Chrome APK. 20 * services from .dex file in Chrome APK.
19 */ 21 */
20 public class MintingServiceFactory extends Service { 22 public class MintingServiceFactory extends Service {
21 private static final String TAG = "cr.MintingServiceFactory"; 23 private static final String TAG = "cr.MintingServiceFactory";
22 24
23 /** 25 /**
24 * Name of the class with IBinder API implementation. 26 * Name of the class with IBinder API implementation.
25 */ 27 */
26 private static final String MINTED_SERVICE_IMPL_CLASS_NAME = 28 private static final String MINTED_SERVICE_IMPL_CLASS_NAME =
27 "org.chromium.minting.MintedServiceImpl"; 29 "org.chromium.minting.MintedServiceImpl";
28 30
29 @Override 31 @Override
30 public IBinder onBind(Intent intent) { 32 public IBinder onBind(Intent intent) {
31 // TODO(pkotwicz): Add dex to application's ClassLoader. Only load dex t he first time that 33 // TODO(pkotwicz): Add dex to application's ClassLoader. Only load dex t he first time that
32 // {@link MintingServiceFactory#onBind()} is called. 34 // {@link MintingServiceFactory#onBind()} is called.
33 35
34 String remotePackageName = getSharedPreferences(MintingApplication.MINT_ PREFS, MODE_PRIVATE) 36 Context remoteContext = WebAPKUtils.getHostBrowserContext(this);
35 .getString(MintingApplication.HOST_PA CKAGE_PREF,
36 MintingApplication.DEFAULT_CH ROME_PACKAGE_NAME);
37 Context remoteContext = DexLoader.getRemoteContext(this, remotePackageNa me);
38 if (remoteContext == null) { 37 if (remoteContext == null) {
39 Log.w(TAG, "Failed to get remote context."); 38 Log.w(TAG, "Failed to get remote context.");
40 } 39 }
41 40
42 File remoteDexFile = 41 File remoteDexFile =
43 new File(remoteContext.getDir("dex", Context.MODE_PRIVATE), "web _apk.dex"); 42 new File(remoteContext.getDir("dex", Context.MODE_PRIVATE), "web _apk.dex");
44 File localDexDir = getDir("dex", Context.MODE_PRIVATE); 43 File localDexDir = getDir("dex", Context.MODE_PRIVATE);
45 ClassLoader webApkClassLoader = DexLoader.load(remoteContext, "web_apk.d ex", 44 ClassLoader webApkClassLoader = DexLoader.load(remoteContext, "web_apk.d ex",
46 MINTED_SERVICE_IMPL_CLASS_NAME, remoteDexFile, localDexDir); 45 MINTED_SERVICE_IMPL_CLASS_NAME, remoteDexFile, localDexDir);
47 if (webApkClassLoader == null) { 46 if (webApkClassLoader == null) {
48 Log.w(TAG, "Unable to load web APK dex."); 47 Log.w(TAG, "Unable to load web APK dex.");
49 return null; 48 return null;
50 } 49 }
51 50
52 try { 51 try {
52
pkotwicz 2016/04/15 17:59:43 Nit: nuke the extraneous new line
Yaron 2016/04/15 21:58:11 Done.
53 Class<?> mintedServiceImplClass = 53 Class<?> mintedServiceImplClass =
54 webApkClassLoader.loadClass(MINTED_SERVICE_IMPL_CLASS_NAME); 54 webApkClassLoader.loadClass(MINTED_SERVICE_IMPL_CLASS_NAME);
55 Constructor mintedServiceImplConstructor = 55 Constructor<?> mintedServiceImplConstructor =
56 mintedServiceImplClass.getConstructor(Context.class); 56 mintedServiceImplClass.getConstructor(Context.class);
57 return (IBinder) mintedServiceImplConstructor.newInstance(new Object [] {this}); 57 return (IBinder) mintedServiceImplConstructor.newInstance(new Object [] {this});
58 } catch (Exception e) { 58 } catch (Exception e) {
59 Log.w(TAG, "Unable to create MintedServiceImpl"); 59 Log.w(TAG, "Unable to create MintedServiceImpl");
60 e.printStackTrace(); 60 e.printStackTrace();
61 return null; 61 return null;
62 } 62 }
63 } 63 }
64 } 64 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698