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

Side by Side Diff: content/shell/android/java/src/org/chromium/content_shell/ContentShellActivity.java

Issue 12047068: Add apk for running content_browsertests (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 11 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 | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright (c) 2012 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.content_shell;
6
7 import android.app.Activity;
8 import android.content.BroadcastReceiver;
9 import android.content.Context;
10 import android.content.Intent;
11 import android.content.IntentFilter;
12 import android.os.Bundle;
13 import android.text.TextUtils;
14 import android.util.Log;
15 import android.view.KeyEvent;
16
17 import org.chromium.base.ChromiumActivity;
18 import org.chromium.content.app.LibraryLoader;
19 import org.chromium.content.browser.ActivityContentVideoViewDelegate;
20 import org.chromium.content.browser.ContentVideoView;
21 import org.chromium.content.browser.ContentView;
22 import org.chromium.content.browser.DeviceUtils;
23 import org.chromium.content.browser.TracingIntentHandler;
24 import org.chromium.content.common.CommandLine;
25 import org.chromium.content.common.ProcessInitException;
26 import org.chromium.ui.gfx.ActivityNativeWindow;
27
28 /**
29 * Activity for managing the Content Shell.
30 */
31 public class ContentShellActivity extends ChromiumActivity {
32
33 public static final String COMMAND_LINE_FILE = "/data/local/tmp/content-shel l-command-line";
34 private static final String TAG = ContentShellActivity.class.getName();
35
36 private static final String ACTIVE_SHELL_URL_KEY = "activeUrl";
37 private static final String ACTION_START_TRACE =
38 "org.chromium.content_shell.action.PROFILE_START";
39 private static final String ACTION_STOP_TRACE =
40 "org.chromium.content_shell.action.PROFILE_STOP";
41 public static final String DEFAULT_SHELL_URL = "http://www.google.com";
42 public static final String COMMAND_LINE_ARGS_KEY = "commandLineArgs";
43
44 private ShellManager mShellManager;
45 private ActivityNativeWindow mActivityNativeWindow;
46 private BroadcastReceiver mReceiver;
47
48 @Override
49 protected void onCreate(Bundle savedInstanceState) {
50 super.onCreate(savedInstanceState);
51
52 // Initializing the command line must occur before loading the library.
53 if (!CommandLine.isInitialized()) {
54 CommandLine.initFromFile(COMMAND_LINE_FILE);
55 String[] commandLineParams = getCommandLineParamsFromIntent(getInten t());
56 if (commandLineParams != null) {
57 CommandLine.getInstance().appendSwitchesAndArguments(commandLine Params);
58 }
59 }
60 waitForDebuggerIfNeeded();
61
62 DeviceUtils.addDeviceSpecificUserAgentSwitch(this);
63 try {
64 LibraryLoader.ensureInitialized();
65
66 setContentView(R.layout.content_shell_activity);
67 mShellManager = (ShellManager) findViewById(R.id.shell_container);
68 mActivityNativeWindow = new ActivityNativeWindow(this);
69 mActivityNativeWindow.restoreInstanceState(savedInstanceState);
70 mShellManager.setWindow(mActivityNativeWindow);
71 ContentVideoView.registerContentVideoViewContextDelegate(
72 new ActivityContentVideoViewDelegate(this));
73
74 String startupUrl = getUrlFromIntent(getIntent());
75 if (!TextUtils.isEmpty(startupUrl)) {
76 mShellManager.setStartupUrl(Shell.sanitizeUrl(startupUrl));
77 }
78 if (!ContentView.enableMultiProcess(this, ContentView.MAX_RENDERERS_ AUTOMATIC)) {
79 String shellUrl = DEFAULT_SHELL_URL;
80 if (savedInstanceState != null
81 && savedInstanceState.containsKey(ACTIVE_SHELL_URL_KEY)) {
82 shellUrl = savedInstanceState.getString(ACTIVE_SHELL_URL_KEY );
83 }
84 mShellManager.launchShell(shellUrl);
85 }
86 } catch (ProcessInitException e) {
87 Log.e(TAG, "ContentView initialization failed.", e);
88 finish();
89 }
90 }
91
92 @Override
93 protected void onSaveInstanceState(Bundle outState) {
94 super.onSaveInstanceState(outState);
95 Shell activeShell = getActiveShell();
96 if (activeShell != null) {
97 outState.putString(ACTIVE_SHELL_URL_KEY, activeShell.getContentView( ).getUrl());
98 }
99
100 mActivityNativeWindow.saveInstanceState(outState);
101 }
102
103 private void waitForDebuggerIfNeeded() {
104 if (CommandLine.getInstance().hasSwitch(CommandLine.WAIT_FOR_JAVA_DEBUGG ER)) {
105 Log.e(TAG, "Waiting for Java debugger to connect...");
106 android.os.Debug.waitForDebugger();
107 Log.e(TAG, "Java debugger connected. Resuming execution.");
108 }
109 }
110
111 @Override
112 public boolean onKeyUp(int keyCode, KeyEvent event) {
113 if (keyCode != KeyEvent.KEYCODE_BACK) return super.onKeyUp(keyCode, even t);
114
115 Shell activeView = getActiveShell();
116 if (activeView != null && activeView.getContentView().canGoBack()) {
117 activeView.getContentView().goBack();
118 return true;
119 }
120
121 return super.onKeyUp(keyCode, event);
122 }
123
124 @Override
125 protected void onNewIntent(Intent intent) {
126 if (getCommandLineParamsFromIntent(intent) != null) {
127 Log.i(TAG, "Ignoring command line params: can only be set when creat ing the activity.");
128 }
129
130 String url = getUrlFromIntent(intent);
131 if (!TextUtils.isEmpty(url)) {
132 Shell activeView = getActiveShell();
133 if (activeView != null) {
134 activeView.loadUrl(url);
135 }
136 }
137 }
138
139 @Override
140 protected void onPause() {
141 ContentView view = getActiveContentView();
142 if (view != null) view.onActivityPause();
143
144 super.onPause();
145 unregisterReceiver(mReceiver);
146 }
147
148 @Override
149 protected void onResume() {
150 super.onResume();
151
152 ContentView view = getActiveContentView();
153 if (view != null) view.onActivityResume();
154 IntentFilter intentFilter = new IntentFilter(ACTION_START_TRACE);
155 intentFilter.addAction(ACTION_STOP_TRACE);
156 mReceiver = new BroadcastReceiver() {
157 @Override
158 public void onReceive(Context context, Intent intent) {
159 String action = intent.getAction();
160 String extra = intent.getStringExtra("file");
161 if (ACTION_START_TRACE.equals(action)) {
162 if (extra.isEmpty()) {
163 Log.e(TAG, "Can not start tracing without specifing savi ng location");
164 } else {
165 TracingIntentHandler.beginTracing(extra);
166 Log.i(TAG, "start tracing");
167 }
168 } else if (ACTION_STOP_TRACE.equals(action)) {
169 Log.i(TAG, "stop tracing");
170 TracingIntentHandler.endTracing();
171 }
172 }
173 };
174 registerReceiver(mReceiver, intentFilter);
175 }
176
177 @Override
178 public void onActivityResult(int requestCode, int resultCode, Intent data) {
179 super.onActivityResult(requestCode, resultCode, data);
180 mActivityNativeWindow.onActivityResult(requestCode, resultCode, data);
181 }
182
183 private static String getUrlFromIntent(Intent intent) {
184 return intent != null ? intent.getDataString() : null;
185 }
186
187 private static String[] getCommandLineParamsFromIntent(Intent intent) {
188 return intent != null ? intent.getStringArrayExtra(COMMAND_LINE_ARGS_KEY ) : null;
189 }
190
191 /**
192 * @return The {@link ShellManager} configured for the activity or null if i t has not been
193 * created yet.
194 */
195 public ShellManager getShellManager() {
196 return mShellManager;
197 }
198
199 /**
200 * @return The currently visible {@link Shell} or null if one is not showing .
201 */
202 public Shell getActiveShell() {
203 return mShellManager != null ? mShellManager.getActiveShell() : null;
204 }
205
206 /**
207 * @return The {@link ContentView} owned by the currently visible {@link She ll} or null if one
208 * is not showing.
209 */
210 public ContentView getActiveContentView() {
211 Shell shell = getActiveShell();
212 return shell != null ? shell.getContentView() : null;
213 }
214 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698