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

Unified Diff: content/shell/android/linker_test_apk/src/org/chromium/content_linker_test_apk/ContentLinkerTestActivity.java

Issue 23717023: Android: Add chrome-specific dynamic linker. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Update content_tests.gypi Created 7 years, 2 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 side-by-side diff with in-line comments
Download patch
Index: content/shell/android/linker_test_apk/src/org/chromium/content_linker_test_apk/ContentLinkerTestActivity.java
diff --git a/content/shell/android/linker_test_apk/src/org/chromium/content_linker_test_apk/ContentLinkerTestActivity.java b/content/shell/android/linker_test_apk/src/org/chromium/content_linker_test_apk/ContentLinkerTestActivity.java
new file mode 100644
index 0000000000000000000000000000000000000000..ea0b60d40fec4a2f99daa3c268021fe01c8babdf
--- /dev/null
+++ b/content/shell/android/linker_test_apk/src/org/chromium/content_linker_test_apk/ContentLinkerTestActivity.java
@@ -0,0 +1,188 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.content_linker_test_apk;
+
+import android.app.Activity;
+import android.content.Context;
+import android.content.Intent;
+import android.os.Bundle;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+
+import org.chromium.content.app.LibraryLoader;
+import org.chromium.content.app.Linker;
+import org.chromium.content.browser.BrowserStartupController;
+import org.chromium.content.browser.ContentView;
+import org.chromium.content.browser.ContentViewClient;
+import org.chromium.content.common.CommandLine;
+import org.chromium.content.common.ProcessInitException;
+import org.chromium.content_shell.Shell;
+import org.chromium.content_shell.ShellManager;
+import org.chromium.ui.WindowAndroid;
+
+public class ContentLinkerTestActivity extends Activity {
+ public static final String COMMAND_LINE_FILE =
+ "/data/local/tmp/content-linker-test-command-line";
+
+ private static final String TAG = "ContentLinkerTestActivity";
+
+ public static final String COMMAND_LINE_ARGS_KEY = "commandLineArgs";
+
+ // Use this on the command-line to simulate a low-memory device, otherwise
+ // a regular device is simulated by this test, independently from what the
+ // target device running the test really is.
+ private static final String LOW_MEMORY_DEVICE = "--low-memory-device";
+
+ private ShellManager mShellManager;
+ private WindowAndroid mWindowAndroid;
+
+ @Override
+ public void onCreate(final Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ // Initializing the command line must occur before loading the library.
+ if (!CommandLine.isInitialized()) {
+ CommandLine.initFromFile(COMMAND_LINE_FILE);
+ String[] commandLineParams = getCommandLineParamsFromIntent(getIntent());
+ if (commandLineParams != null) {
+ CommandLine.getInstance().appendSwitchesAndArguments(commandLineParams);
+ }
+ }
+ waitForDebuggerIfNeeded();
+
+ // CommandLine.getInstance().hasSwitch() doesn't work here for some funky
+ // reason, so parse the command-line differently here:
+ boolean hasLowMemoryDeviceSwitch = false;
+ String[] cmdline = CommandLine.getJavaSwitchesOrNull();
+ if (cmdline == null)
+ Log.i(TAG, "Command line is null");
+ else {
+ Log.i(TAG, "Command line is:");
+ for (int n = 0; n < cmdline.length; ++n) {
+ Log.i(TAG, " '" + cmdline[n] + "'");
+ if (cmdline[n].equals(LOW_MEMORY_DEVICE))
+ hasLowMemoryDeviceSwitch = true;
+ }
+ }
+
+ // Determine which kind of device to simulate from the command-line.
+ int memoryDeviceConfig = Linker.MEMORY_DEVICE_CONFIG_NORMAL;
+ if (hasLowMemoryDeviceSwitch)
+ memoryDeviceConfig = Linker.MEMORY_DEVICE_CONFIG_LOW;
+ Linker.setMemoryDeviceConfig(memoryDeviceConfig);
+
+ // Register the test runner class by name.
+ Linker.setTestRunnerClassName(LinkerTests.class.getName());
+
+ // Load the library in the browser process, this will also run the test
+ // runner in this process.
+ try {
+ LibraryLoader.ensureInitialized();
+ } catch (ProcessInitException e) {
+ Log.i(TAG, "Cannot load content_linker_test:" + e);
+ }
+
+ // Now, start a new renderer process by creating a new view.
+ // This will run the test runner in the renderer process.
+
+ BrowserStartupController.get(getApplicationContext()).initChromiumBrowserProcessForTests();
+
+ LayoutInflater inflater =
+ (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+ View view = inflater.inflate(R.layout.test_activity, null);
+ mShellManager = (ShellManager) view.findViewById(R.id.shell_container);
+ mWindowAndroid = new WindowAndroid(this);
+ mShellManager.setWindow(mWindowAndroid);
+
+ mShellManager.setStartupUrl("about:blank");
+
+ BrowserStartupController.get(this).startBrowserProcessesAsync(
+ new BrowserStartupController.StartupCallback() {
+ @Override
+ public void onSuccess(boolean alreadyStarted) {
+ finishInitialization(savedInstanceState);
+ }
+
+ @Override
+ public void onFailure() {
+ initializationFailed();
+ }
+ });
+
+ // TODO(digit): Ensure that after the content view is initialized,
+ // the program finishes().
+ }
+
+ private void finishInitialization(Bundle savedInstanceState) {
+ String shellUrl = ShellManager.DEFAULT_SHELL_URL;
+ mShellManager.launchShell(shellUrl);
+ getActiveContentView().setContentViewClient(new ContentViewClient());
+ }
+
+ private void initializationFailed() {
+ Log.e(TAG, "ContentView initialization failed.");
+ finish();
+ }
+
+ @Override
+ protected void onSaveInstanceState(Bundle outState) {
+ super.onSaveInstanceState(outState);
+ mWindowAndroid.saveInstanceState(outState);
+ }
+
+ private void waitForDebuggerIfNeeded() {
+ if (CommandLine.getInstance().hasSwitch(CommandLine.WAIT_FOR_JAVA_DEBUGGER)) {
+ Log.e(TAG, "Waiting for Java debugger to connect...");
+ android.os.Debug.waitForDebugger();
+ Log.e(TAG, "Java debugger connected. Resuming execution.");
+ }
+ }
+
+ @Override
+ protected void onStop() {
+ super.onStop();
+
+ ContentView view = getActiveContentView();
+ if (view != null) view.onHide();
+ }
+
+ @Override
+ protected void onStart() {
+ super.onStart();
+
+ ContentView view = getActiveContentView();
+ if (view != null) view.onShow();
+ }
+
+ @Override
+ public void onActivityResult(int requestCode, int resultCode, Intent data) {
+ super.onActivityResult(requestCode, resultCode, data);
+ mWindowAndroid.onActivityResult(requestCode, resultCode, data);
+ }
+
+ private static String getUrlFromIntent(Intent intent) {
+ return intent != null ? intent.getDataString() : null;
+ }
+
+ private static String[] getCommandLineParamsFromIntent(Intent intent) {
+ return intent != null ? intent.getStringArrayExtra(COMMAND_LINE_ARGS_KEY) : null;
+ }
+
+ /**
+ * @return The {@link ContentView} owned by the currently visible {@link Shell} or null if one
+ * is not showing.
+ */
+ public ContentView getActiveContentView() {
+ if (mShellManager == null)
+ return null;
+
+ Shell shell = mShellManager.getActiveShell();
+ if (shell == null)
+ return null;
+
+ return shell.getContentView();
+ }
+}

Powered by Google App Engine
This is Rietveld 408576698