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