1a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)package org.chromium.chrome.shell; 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 73551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)import android.content.Intent; 8cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)import android.util.Log; 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)import org.chromium.base.CommandLine; 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import org.chromium.base.PathUtils; 121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciimport org.chromium.base.ResourceExtractor; 134e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)import org.chromium.chrome.browser.ChromiumApplication; 145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)import org.chromium.chrome.browser.PKCS11AuthenticationManager; 15cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)import org.chromium.chrome.browser.Tab; 1658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)import org.chromium.chrome.browser.UmaUtils; 17f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)import org.chromium.chrome.browser.invalidation.UniqueIdInvalidationClientNameGenerator; 183551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 193551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)import java.util.ArrayList; 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** 22d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) * A basic test shell {@link android.app.Application}. Handles setting up the native library and 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * loading the right resources. 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 25a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)public class ChromeShellApplication extends ChromiumApplication { 26cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) private static final String TAG = "ChromeShellApplication"; 27cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 28a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) private static final String PRIVATE_DATA_DIRECTORY_SUFFIX = "chromeshell"; 29a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) /** 30a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) * icudtl.dat provides ICU (i18n library) with all the necessary data 31a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) * for its operation. We used to link the data statically to our binary, 32a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) * but don't do that any more and need to install along with pak files. 33a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) * See src/third_party/icu/README.chromium. 34a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) */ 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private static final String[] CHROME_MANDATORY_PAKS = { 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "en-US.pak", 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "resources.pak", 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "chrome_100_percent.pak", 39a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "icudtl.dat", 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 41a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) private static final String COMMAND_LINE_FILE = "/data/local/tmp/chrome-shell-command-line"; 423551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 43a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ArrayList<ChromeShellApplicationObserver> mObservers; 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @Override 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public void onCreate() { 4758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // We want to do this at the earliest possible point in startup. 4858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) UmaUtils.recordMainEntryPointTime(); 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) super.onCreate(); 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ResourceExtractor.setMandatoryPaksToExtract(CHROME_MANDATORY_PAKS); 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PathUtils.setPrivateDataDirectorySuffix(PRIVATE_DATA_DIRECTORY_SUFFIX); 533551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 54a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) mObservers = new ArrayList<ChromeShellApplicationObserver>(); 55f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 56f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Initialize the invalidations ID, just like we would in the downstream code. 57f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) UniqueIdInvalidationClientNameGenerator.doInitializeAndInstallGenerator(this); 583551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 593551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 603551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) @Override 613551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) public void sendBroadcast(Intent intent) { 623551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) boolean shouldFire = true; 63a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) for (ChromeShellApplicationObserver observer : mObservers) { 643551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) shouldFire &= observer.onSendBroadcast(intent); 653551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 663551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 67a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (shouldFire) super.sendBroadcast(intent); 683551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 693551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 70a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) public void addObserver(ChromeShellApplicationObserver observer) { 713551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) mObservers.add(observer); 723551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 733551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 74a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) public void removeObserver(ChromeShellApplicationObserver observer) { 753551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) mObservers.remove(observer); 763551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 773551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 783551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) public static void initCommandLine() { 79a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (!CommandLine.isInitialized()) { 803551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) CommandLine.initFromFile(COMMAND_LINE_FILE); 81a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 834e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 844e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) @Override 854e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) protected void openProtectedContentSettings() { 864e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } 871e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 881e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) @Override 891e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) protected void showSyncSettings() { 901e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 911e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 921e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) @Override 931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci protected void showAutofillSettings() { 941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci @Override 971e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) protected void showTermsOfServiceDialog() { 981e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) @Override 101cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) protected void openClearBrowsingData(Tab tab) { 102cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) Log.e(TAG, "Clear browsing data not currently supported in Chrome Shell"); 103cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 104cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 105cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) @Override 1065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) protected boolean areParentalControlsEnabled() { 1075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return false; 1085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 1095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) @Override 1115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) protected PKCS11AuthenticationManager getPKCS11AuthenticationManager() { 112a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return new ChromeShellPKCS11AuthenticationManager(); 1135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 115