1 // Copyright 2014 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.shell; 6 7 import android.content.Intent; 8 import android.util.Log; 9 10 import org.chromium.base.CommandLine; 11 import org.chromium.base.PathUtils; 12 import org.chromium.chrome.browser.ChromiumApplication; 13 import org.chromium.chrome.browser.PKCS11AuthenticationManager; 14 import org.chromium.chrome.browser.Tab; 15 import org.chromium.chrome.browser.UmaUtils; 16 import org.chromium.chrome.browser.invalidation.UniqueIdInvalidationClientNameGenerator; 17 import org.chromium.content.browser.ResourceExtractor; 18 19 import java.util.ArrayList; 20 21 /** 22 * A basic test shell {@link android.app.Application}. Handles setting up the native library and 23 * loading the right resources. 24 */ 25 public class ChromeShellApplication extends ChromiumApplication { 26 private static final String TAG = "ChromeShellApplication"; 27 28 private static final String PRIVATE_DATA_DIRECTORY_SUFFIX = "chromeshell"; 29 /** 30 * icudtl.dat provides ICU (i18n library) with all the necessary data 31 * for its operation. We used to link the data statically to our binary, 32 * but don't do that any more and need to install along with pak files. 33 * See src/third_party/icu/README.chromium. 34 */ 35 private static final String[] CHROME_MANDATORY_PAKS = { 36 "en-US.pak", 37 "resources.pak", 38 "chrome_100_percent.pak", 39 "icudtl.dat", 40 }; 41 private static final String COMMAND_LINE_FILE = "/data/local/tmp/chrome-shell-command-line"; 42 43 ArrayList<ChromeShellApplicationObserver> mObservers; 44 45 @Override onCreate()46 public void onCreate() { 47 // We want to do this at the earliest possible point in startup. 48 UmaUtils.recordMainEntryPointTime(); 49 super.onCreate(); 50 51 ResourceExtractor.setMandatoryPaksToExtract(CHROME_MANDATORY_PAKS); 52 PathUtils.setPrivateDataDirectorySuffix(PRIVATE_DATA_DIRECTORY_SUFFIX); 53 54 mObservers = new ArrayList<ChromeShellApplicationObserver>(); 55 56 // Initialize the invalidations ID, just like we would in the downstream code. 57 UniqueIdInvalidationClientNameGenerator.doInitializeAndInstallGenerator(this); 58 } 59 60 @Override sendBroadcast(Intent intent)61 public void sendBroadcast(Intent intent) { 62 boolean shouldFire = true; 63 for (ChromeShellApplicationObserver observer : mObservers) { 64 shouldFire &= observer.onSendBroadcast(intent); 65 } 66 67 if (shouldFire) super.sendBroadcast(intent); 68 } 69 addObserver(ChromeShellApplicationObserver observer)70 public void addObserver(ChromeShellApplicationObserver observer) { 71 mObservers.add(observer); 72 } 73 removeObserver(ChromeShellApplicationObserver observer)74 public void removeObserver(ChromeShellApplicationObserver observer) { 75 mObservers.remove(observer); 76 } 77 initCommandLine()78 public static void initCommandLine() { 79 if (!CommandLine.isInitialized()) { 80 CommandLine.initFromFile(COMMAND_LINE_FILE); 81 } 82 } 83 84 @Override openProtectedContentSettings()85 protected void openProtectedContentSettings() { 86 } 87 88 @Override showSyncSettings()89 protected void showSyncSettings() { 90 } 91 92 @Override showTermsOfServiceDialog()93 protected void showTermsOfServiceDialog() { 94 } 95 96 @Override openClearBrowsingData(Tab tab)97 protected void openClearBrowsingData(Tab tab) { 98 Log.e(TAG, "Clear browsing data not currently supported in Chrome Shell"); 99 } 100 101 @Override areParentalControlsEnabled()102 protected boolean areParentalControlsEnabled() { 103 return false; 104 } 105 106 @Override getPKCS11AuthenticationManager()107 protected PKCS11AuthenticationManager getPKCS11AuthenticationManager() { 108 return new ChromeShellPKCS11AuthenticationManager(); 109 } 110 } 111