EMMA Coverage Report (generated Fri Aug 23 16:39:17 PDT 2013)
[all classes][org.chromium.content.browser]

COVERAGE SUMMARY FOR SOURCE FILE [ContentView.java]

nameclass, %method, %block, %line, %
ContentView.java100% (1/1)26%  (26/101)33%  (195/584)35%  (59.9/172)

COVERAGE BREAKDOWN BY CLASS AND METHOD

nameclass, %method, %block, %line, %
     
class ContentView100% (1/1)26%  (26/101)33%  (195/584)35%  (59.9/172)
awakenScrollBars (): boolean 0%   (0/1)0%   (0/3)0%   (0/1)
canGoBack (): boolean 0%   (0/1)0%   (0/4)0%   (0/1)
canGoForward (): boolean 0%   (0/1)0%   (0/4)0%   (0/1)
canGoToOffset (int): boolean 0%   (0/1)0%   (0/5)0%   (0/1)
canZoomIn (): boolean 0%   (0/1)0%   (0/4)0%   (0/1)
canZoomOut (): boolean 0%   (0/1)0%   (0/4)0%   (0/1)
checkIsAlive (): void 0%   (0/1)0%   (0/4)0%   (0/2)
clearHistory (): void 0%   (0/1)0%   (0/4)0%   (0/2)
computeHorizontalScrollExtent (): int 0%   (0/1)0%   (0/4)0%   (0/1)
computeHorizontalScrollOffset (): int 0%   (0/1)0%   (0/4)0%   (0/1)
computeHorizontalScrollRange (): int 0%   (0/1)0%   (0/4)0%   (0/1)
computeVerticalScrollExtent (): int 0%   (0/1)0%   (0/4)0%   (0/1)
computeVerticalScrollOffset (): int 0%   (0/1)0%   (0/4)0%   (0/1)
computeVerticalScrollRange (): int 0%   (0/1)0%   (0/4)0%   (0/1)
dispatchKeyEvent (KeyEvent): boolean 0%   (0/1)0%   (0/12)0%   (0/3)
dispatchKeyEventPreIme (KeyEvent): boolean 0%   (0/1)0%   (0/5)0%   (0/1)
exitFullscreen (): void 0%   (0/1)0%   (0/4)0%   (0/2)
fling (long, int, int, int, int): void 0%   (0/1)0%   (0/10)0%   (0/2)
getBackgroundColor (): int 0%   (0/1)0%   (0/4)0%   (0/1)
getBitmap (): Bitmap 0%   (0/1)0%   (0/7)0%   (0/1)
getBitmap (int, int): Bitmap 0%   (0/1)0%   (0/6)0%   (0/1)
getContentHeight (): int 0%   (0/1)0%   (0/4)0%   (0/1)
getContentScrollY (): int 0%   (0/1)0%   (0/4)0%   (0/1)
getContentSettings (): ContentSettings 0%   (0/1)0%   (0/4)0%   (0/1)
getDownloadDelegate (): ContentViewDownloadDelegate 0%   (0/1)0%   (0/4)0%   (0/1)
getScale (): float 0%   (0/1)0%   (0/4)0%   (0/1)
getSingleTapX (): int 0%   (0/1)0%   (0/5)0%   (0/1)
getSingleTapY (): int 0%   (0/1)0%   (0/5)0%   (0/1)
getTitle (): String 0%   (0/1)0%   (0/4)0%   (0/1)
getUseDesktopUserAgent (): boolean 0%   (0/1)0%   (0/4)0%   (0/1)
getView (): View 0%   (0/1)0%   (0/2)0%   (0/1)
goForward (): void 0%   (0/1)0%   (0/4)0%   (0/2)
goToOffset (int): void 0%   (0/1)0%   (0/5)0%   (0/2)
hasHardwareAcceleration (Activity): boolean 0%   (0/1)0%   (0/3)0%   (0/1)
hideSelectActionBar (): void 0%   (0/1)0%   (0/4)0%   (0/2)
isAlive (): boolean 0%   (0/1)0%   (0/4)0%   (0/1)
isCrashed (): boolean 0%   (0/1)0%   (0/4)0%   (0/1)
isInjectingAccessibilityScript (): boolean 0%   (0/1)0%   (0/4)0%   (0/1)
isReady (): boolean 0%   (0/1)0%   (0/4)0%   (0/1)
isReadyForSnapshot (): boolean 0%   (0/1)0%   (0/10)0%   (0/1)
needsReload (): boolean 0%   (0/1)0%   (0/4)0%   (0/1)
newInstance (Context, int, WindowAndroid, AttributeSet): ContentView 0%   (0/1)0%   (0/7)0%   (0/1)
onActivityResume (): void 0%   (0/1)0%   (0/4)0%   (0/2)
onConfigurationChanged (Configuration): void 0%   (0/1)0%   (0/5)0%   (0/2)
onGenericMotionEvent (MotionEvent): boolean 0%   (0/1)0%   (0/5)0%   (0/1)
onHoverEvent (MotionEvent): boolean 0%   (0/1)0%   (0/13)0%   (0/4)
onInitializeAccessibilityEvent (AccessibilityEvent): void 0%   (0/1)0%   (0/8)0%   (0/3)
onInitializeAccessibilityNodeInfo (AccessibilityNodeInfo): void 0%   (0/1)0%   (0/8)0%   (0/3)
onKeyUp (int, KeyEvent): boolean 0%   (0/1)0%   (0/6)0%   (0/1)
onShow (): void 0%   (0/1)0%   (0/4)0%   (0/2)
onVisibilityChanged (View, int): void 0%   (0/1)0%   (0/10)0%   (0/3)
pinchBegin (long, int, int): void 0%   (0/1)0%   (0/8)0%   (0/2)
pinchBy (long, int, int, float): void 0%   (0/1)0%   (0/9)0%   (0/2)
pinchEnd (long): void 0%   (0/1)0%   (0/6)0%   (0/2)
scrollBy (int, int): void 0%   (0/1)0%   (0/6)0%   (0/2)
scrollTo (int, int): void 0%   (0/1)0%   (0/6)0%   (0/2)
setAccessibilityState (boolean): void 0%   (0/1)0%   (0/5)0%   (0/2)
setCurrentMotionEventOffsets (float, float): void 0%   (0/1)0%   (0/7)0%   (0/3)
setDownloadDelegate (ContentViewDownloadDelegate): void 0%   (0/1)0%   (0/5)0%   (0/2)
setIgnoreRemainingTouchEvents (): void 0%   (0/1)0%   (0/5)0%   (0/2)
setIgnoreSingleTap (boolean): void 0%   (0/1)0%   (0/6)0%   (0/2)
setUseDesktopUserAgent (boolean, boolean): void 0%   (0/1)0%   (0/6)0%   (0/2)
startFpsProfiling (): void 0%   (0/1)0%   (0/1)0%   (0/1)
stopCurrentAccessibilityNotifications (): void 0%   (0/1)0%   (0/4)0%   (0/2)
stopFpsProfiling (): float 0%   (0/1)0%   (0/2)0%   (0/1)
stopLoading (): void 0%   (0/1)0%   (0/4)0%   (0/2)
super_awakenScrollBars (int, boolean): boolean 0%   (0/1)0%   (0/5)0%   (0/1)
super_dispatchKeyEvent (KeyEvent): boolean 0%   (0/1)0%   (0/4)0%   (0/1)
super_dispatchKeyEventPreIme (KeyEvent): boolean 0%   (0/1)0%   (0/4)0%   (0/1)
super_onConfigurationChanged (Configuration): void 0%   (0/1)0%   (0/4)0%   (0/2)
super_onGenericMotionEvent (MotionEvent): boolean 0%   (0/1)0%   (0/4)0%   (0/1)
super_onKeyUp (int, KeyEvent): boolean 0%   (0/1)0%   (0/5)0%   (0/1)
zoomIn (): boolean 0%   (0/1)0%   (0/4)0%   (0/1)
zoomOut (): boolean 0%   (0/1)0%   (0/4)0%   (0/1)
zoomReset (): boolean 0%   (0/1)0%   (0/4)0%   (0/1)
newInstance (Context, int, WindowAndroid, AttributeSet, int): ContentView 100% (1/1)57%  (12/21)67%  (2/3)
ContentView (Context, int, WindowAndroid, AttributeSet, int): void 100% (1/1)95%  (38/40)99%  (8.9/9)
awakenScrollBars (int, boolean): boolean 100% (1/1)100% (6/6)100% (1/1)
createOffsetMotionEvent (MotionEvent): MotionEvent 100% (1/1)100% (11/11)100% (3/3)
destroy (): void 100% (1/1)100% (4/4)100% (2/2)
drawChild (Canvas, View, long): boolean 100% (1/1)100% (6/6)100% (1/1)
evaluateJavaScript (String): void 100% (1/1)100% (6/6)100% (2/2)
getContentViewClient (): ContentViewClient 100% (1/1)100% (4/4)100% (1/1)
getContentViewCore (): ContentViewCore 100% (1/1)100% (3/3)100% (1/1)
getRenderCoordinates (): RenderCoordinates 100% (1/1)100% (4/4)100% (1/1)
getUrl (): String 100% (1/1)100% (4/4)100% (1/1)
goBack (): void 100% (1/1)100% (4/4)100% (2/2)
loadUrl (LoadUrlParams): void 100% (1/1)100% (5/5)100% (2/2)
newInstance (Context, int, WindowAndroid): ContentView 100% (1/1)100% (7/7)100% (1/1)
onActivityPause (): void 100% (1/1)100% (4/4)100% (2/2)
onAttachedToWindow (): void 100% (1/1)100% (6/6)100% (3/3)
onCheckIsTextEditor (): boolean 100% (1/1)100% (4/4)100% (1/1)
onCreateInputConnection (EditorInfo): InputConnection 100% (1/1)100% (5/5)100% (1/1)
onDetachedFromWindow (): void 100% (1/1)100% (6/6)100% (3/3)
onFocusChanged (boolean, int, Rect): void 100% (1/1)100% (12/12)100% (5/5)
onHide (): void 100% (1/1)100% (4/4)100% (2/2)
onSizeChanged (int, int, int, int): void 100% (1/1)100% (16/16)100% (5/5)
onTouchEvent (MotionEvent): boolean 100% (1/1)100% (13/13)100% (4/4)
performLongClick (): boolean 100% (1/1)100% (2/2)100% (1/1)
reload (): void 100% (1/1)100% (4/4)100% (2/2)
setContentViewClient (ContentViewClient): void 100% (1/1)100% (5/5)100% (2/2)

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 
5package org.chromium.content.browser;
6 
7import android.app.Activity;
8import android.content.Context;
9import android.content.res.Configuration;
10import android.graphics.Bitmap;
11import android.graphics.Canvas;
12import android.graphics.Rect;
13import android.os.Build;
14import android.util.AttributeSet;
15import android.view.KeyEvent;
16import android.view.MotionEvent;
17import android.view.View;
18import android.view.accessibility.AccessibilityEvent;
19import android.view.accessibility.AccessibilityNodeInfo;
20import android.view.inputmethod.EditorInfo;
21import android.view.inputmethod.InputConnection;
22import android.widget.FrameLayout;
23 
24import com.google.common.annotations.VisibleForTesting;
25 
26import org.chromium.content.common.TraceEvent;
27import org.chromium.ui.WindowAndroid;
28 
29/**
30 * The containing view for {@link ContentViewCore} that exists in the Android UI hierarchy and
31 * exposes the various {@link View} functionality to it.
32 *
33 * TODO(joth): Remove any methods overrides from this class that were added for WebView
34 *             compatibility.
35 */
36public class ContentView extends FrameLayout
37        implements ContentViewCore.InternalAccessDelegate, PageInfo {
38 
39    private final ContentViewCore mContentViewCore;
40 
41    private float mCurrentTouchOffsetX;
42    private float mCurrentTouchOffsetY;
43 
44    /**
45     * Creates an instance of a ContentView.
46     * @param context The Context the view is running in, through which it can
47     *                access the current theme, resources, etc.
48     * @param nativeWebContents A pointer to the native web contents.
49     * @param windowAndroid An instance of the WindowAndroid.
50     * @return A ContentView instance.
51     */
52    public static ContentView newInstance(Context context, int nativeWebContents,
53            WindowAndroid windowAndroid) {
54        return newInstance(context, nativeWebContents, windowAndroid, null,
55                android.R.attr.webViewStyle);
56    }
57 
58    /**
59     * Creates an instance of a ContentView.
60     * @param context The Context the view is running in, through which it can
61     *                access the current theme, resources, etc.
62     * @param nativeWebContents A pointer to the native web contents.
63     * @param windowAndroid An instance of the WindowAndroid.
64     * @param attrs The attributes of the XML tag that is inflating the view.
65     * @return A ContentView instance.
66     */
67    public static ContentView newInstance(Context context, int nativeWebContents,
68            WindowAndroid windowAndroid, AttributeSet attrs) {
69        // TODO(klobag): use the WebViewStyle as the default style for now. It enables scrollbar.
70        // When ContentView is moved to framework, we can define its own style in the res.
71        return newInstance(context, nativeWebContents, windowAndroid, attrs,
72                android.R.attr.webViewStyle);
73    }
74 
75    /**
76     * Creates an instance of a ContentView.
77     * @param context The Context the view is running in, through which it can
78     *                access the current theme, resources, etc.
79     * @param nativeWebContents A pointer to the native web contents.
80     * @param windowAndroid An instance of the WindowAndroid.
81     * @param attrs The attributes of the XML tag that is inflating the view.
82     * @param defStyle The default style to apply to this view.
83     * @return A ContentView instance.
84     */
85    public static ContentView newInstance(Context context, int nativeWebContents,
86            WindowAndroid windowAndroid, AttributeSet attrs, int defStyle) {
87        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) {
88            return new ContentView(context, nativeWebContents, windowAndroid, attrs, defStyle);
89        } else {
90            return new JellyBeanContentView(context, nativeWebContents, windowAndroid, attrs,
91                    defStyle);
92        }
93    }
94 
95    protected ContentView(Context context, int nativeWebContents, WindowAndroid windowAndroid,
96            AttributeSet attrs, int defStyle) {
97        super(context, attrs, defStyle);
98 
99        if (getScrollBarStyle() == View.SCROLLBARS_INSIDE_OVERLAY) {
100            setHorizontalScrollBarEnabled(false);
101            setVerticalScrollBarEnabled(false);
102        }
103 
104        setFocusable(true);
105        setFocusableInTouchMode(true);
106 
107        mContentViewCore = new ContentViewCore(context);
108        mContentViewCore.initialize(this, this, nativeWebContents, windowAndroid,
109                Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN ?
110                ContentViewCore.INPUT_EVENTS_DELIVERED_AT_VSYNC :
111                ContentViewCore.INPUT_EVENTS_DELIVERED_IMMEDIATELY);
112    }
113 
114    // PageInfo implementation.
115 
116    @Override
117    public String getUrl() {
118        return mContentViewCore.getUrl();
119    }
120 
121    @Override
122    public String getTitle() {
123        return mContentViewCore.getTitle();
124    }
125 
126    @Override
127    public boolean isReadyForSnapshot() {
128        return !isCrashed() && isReady();
129    }
130 
131    @Override
132    public Bitmap getBitmap() {
133        return getBitmap(getWidth(), getHeight());
134    }
135 
136    @Override
137    public Bitmap getBitmap(int width, int height) {
138        return mContentViewCore.getBitmap(width, height);
139    }
140 
141    @Override
142    public int getBackgroundColor() {
143        return mContentViewCore.getBackgroundColor();
144    }
145 
146    @Override
147    public View getView() {
148        return this;
149    }
150 
151    /**
152     * @return The core component of the ContentView that handles JNI communication.  Should only be
153     *         used for passing to native.
154     */
155    public ContentViewCore getContentViewCore() {
156        return mContentViewCore;
157    }
158 
159    /**
160     * @return The cache of scales and positions used to convert coordinates from/to CSS.
161     */
162    public RenderCoordinates getRenderCoordinates() {
163        return mContentViewCore.getRenderCoordinates();
164    }
165 
166    /**
167     * Returns true if the given Activity has hardware acceleration enabled
168     * in its manifest, or in its foreground window.
169     *
170     * TODO(husky): Remove when ContentViewCore.initialize() is refactored (see TODO there)
171     * TODO(dtrainor) This is still used by other classes.  Make sure to pull some version of this
172     * out before removing it.
173     */
174    public static boolean hasHardwareAcceleration(Activity activity) {
175        return ContentViewCore.hasHardwareAcceleration(activity);
176    }
177 
178    /**
179     * Destroy the internal state of the WebView. This method may only be called
180     * after the WebView has been removed from the view system. No other methods
181     * may be called on this WebView after this method has been called.
182     */
183    public void destroy() {
184        mContentViewCore.destroy();
185    }
186 
187    /**
188     * Returns true initially, false after destroy() has been called.
189     * It is illegal to call any other public method after destroy().
190     */
191    public boolean isAlive() {
192        return mContentViewCore.isAlive();
193    }
194 
195    /**
196     * For internal use. Throws IllegalStateException if mNativeContentView is 0.
197     * Use this to ensure we get a useful Java stack trace, rather than a native
198     * crash dump, from use-after-destroy bugs in Java code.
199     */
200    void checkIsAlive() throws IllegalStateException {
201        mContentViewCore.checkIsAlive();
202    }
203 
204    public void setContentViewClient(ContentViewClient client) {
205        mContentViewCore.setContentViewClient(client);
206    }
207 
208    @VisibleForTesting
209    public ContentViewClient getContentViewClient() {
210        return mContentViewCore.getContentViewClient();
211    }
212 
213    /**
214     * Load url without fixing up the url string. Consumers of ContentView are responsible for
215     * ensuring the URL passed in is properly formatted (i.e. the scheme has been added if left
216     * off during user input).
217     *
218     * @param params Parameters for this load.
219     */
220    public void loadUrl(LoadUrlParams params) {
221        mContentViewCore.loadUrl(params);
222    }
223 
224    /**
225     * Stops loading the current web contents.
226     */
227    public void stopLoading() {
228        mContentViewCore.stopLoading();
229    }
230 
231    /**
232     * @return Whether the current WebContents has a previous navigation entry.
233     */
234    public boolean canGoBack() {
235        return mContentViewCore.canGoBack();
236    }
237 
238    /**
239     * @return Whether the current WebContents has a navigation entry after the current one.
240     */
241    public boolean canGoForward() {
242        return mContentViewCore.canGoForward();
243    }
244 
245    /**
246     * @param offset The offset into the navigation history.
247     * @return Whether we can move in history by given offset
248     */
249    public boolean canGoToOffset(int offset) {
250        return mContentViewCore.canGoToOffset(offset);
251    }
252 
253    /**
254     * Navigates to the specified offset from the "current entry". Does nothing if the offset is out
255     * of bounds.
256     * @param offset The offset into the navigation history.
257     */
258    public void goToOffset(int offset) {
259        mContentViewCore.goToOffset(offset);
260    }
261 
262    /**
263     * Goes to the navigation entry before the current one.
264     */
265    public void goBack() {
266        mContentViewCore.goBack();
267    }
268 
269    /**
270     * Goes to the navigation entry following the current one.
271     */
272    public void goForward() {
273        mContentViewCore.goForward();
274    }
275 
276    /**
277     * Reload the current page.
278     */
279    public void reload() {
280        mContentViewCore.reload();
281    }
282 
283    /**
284     * Clears the WebView's page history in both the backwards and forwards
285     * directions.
286     */
287    public void clearHistory() {
288        mContentViewCore.clearHistory();
289    }
290 
291    /**
292     * Start profiling the update speed. You must call {@link #stopFpsProfiling}
293     * to stop profiling.
294     */
295    @VisibleForTesting
296    public void startFpsProfiling() {
297        // TODO(nileshagrawal): Implement this.
298    }
299 
300    /**
301     * Stop profiling the update speed.
302     */
303    @VisibleForTesting
304    public float stopFpsProfiling() {
305        // TODO(nileshagrawal): Implement this.
306        return 0.0f;
307    }
308 
309    /**
310     * Fling the ContentView from the current position.
311     * @param x Fling touch starting position
312     * @param y Fling touch starting position
313     * @param velocityX Initial velocity of the fling (X) measured in pixels per second.
314     * @param velocityY Initial velocity of the fling (Y) measured in pixels per second.
315     */
316    @VisibleForTesting
317    public void fling(long timeMs, int x, int y, int velocityX, int velocityY) {
318        mContentViewCore.getContentViewGestureHandler().fling(timeMs, x, y, velocityX, velocityY);
319    }
320 
321    /**
322     * Start pinch zoom. You must call {@link #pinchEnd} to stop.
323     */
324    @VisibleForTesting
325    public void pinchBegin(long timeMs, int x, int y) {
326        mContentViewCore.getContentViewGestureHandler().pinchBegin(timeMs, x, y);
327    }
328 
329    /**
330     * Stop pinch zoom.
331     */
332    @VisibleForTesting
333    public void pinchEnd(long timeMs) {
334        mContentViewCore.getContentViewGestureHandler().pinchEnd(timeMs);
335    }
336 
337    void setIgnoreSingleTap(boolean value) {
338        mContentViewCore.getContentViewGestureHandler().setIgnoreSingleTap(value);
339    }
340 
341    /** @see ContentViewGestureHandler#setIgnoreRemainingTouchEvents */
342    public void setIgnoreRemainingTouchEvents() {
343        mContentViewCore.getContentViewGestureHandler().setIgnoreRemainingTouchEvents();
344    }
345 
346    /**
347     * Modify the ContentView magnification level. The effect of calling this
348     * method is exactly as after "pinch zoom".
349     *
350     * @param timeMs The event time in milliseconds.
351     * @param delta The ratio of the new magnification level over the current
352     *            magnification level.
353     * @param anchorX The magnification anchor (X) in the current view
354     *            coordinate.
355     * @param anchorY The magnification anchor (Y) in the current view
356     *            coordinate.
357     */
358    @VisibleForTesting
359    public void pinchBy(long timeMs, int anchorX, int anchorY, float delta) {
360        mContentViewCore.getContentViewGestureHandler().pinchBy(timeMs, anchorX, anchorY, delta);
361    }
362 
363    /**
364     * Injects the passed JavaScript code in the current page and evaluates it.
365     *
366     * @throws IllegalStateException If the ContentView has been destroyed.
367     */
368    public void evaluateJavaScript(String script) throws IllegalStateException {
369        mContentViewCore.evaluateJavaScript(script, null);
370    }
371 
372    /**
373     * This method should be called when the containing activity is paused.
374     **/
375    public void onActivityPause() {
376        mContentViewCore.onActivityPause();
377    }
378 
379    /**
380     * This method should be called when the containing activity is resumed.
381     **/
382    public void onActivityResume() {
383        mContentViewCore.onActivityResume();
384    }
385 
386    /**
387     * To be called when the ContentView is shown.
388     **/
389    public void onShow() {
390        mContentViewCore.onShow();
391    }
392 
393    /**
394     * To be called when the ContentView is hidden.
395     **/
396    public void onHide() {
397        mContentViewCore.onHide();
398    }
399 
400    /**
401     * Return the ContentSettings object used to retrieve the settings for this
402     * ContentView.
403     * @return A ContentSettings object that can be used to retrieve this ContentView's
404     *         settings.
405     */
406    public ContentSettings getContentSettings() {
407        return mContentViewCore.getContentSettings();
408    }
409 
410    /**
411     * Hides the select action bar.
412     */
413    public void hideSelectActionBar() {
414        mContentViewCore.hideSelectActionBar();
415    }
416 
417    // FrameLayout overrides.
418 
419    // Needed by ContentViewCore.InternalAccessDelegate
420    @Override
421    public boolean drawChild(Canvas canvas, View child, long drawingTime) {
422        return super.drawChild(canvas, child, drawingTime);
423    }
424 
425    @Override
426    protected void onSizeChanged(int w, int h, int ow, int oh) {
427        TraceEvent.begin();
428        super.onSizeChanged(w, h, ow, oh);
429        mContentViewCore.onSizeChanged(w, h, ow, oh);
430        TraceEvent.end();
431    }
432 
433    @Override
434    public InputConnection onCreateInputConnection(EditorInfo outAttrs) {
435        return mContentViewCore.onCreateInputConnection(outAttrs);
436    }
437 
438    @Override
439    public boolean onCheckIsTextEditor() {
440        return mContentViewCore.onCheckIsTextEditor();
441    }
442 
443    @Override
444    protected void onFocusChanged(boolean gainFocus, int direction, Rect previouslyFocusedRect) {
445        TraceEvent.begin();
446        super.onFocusChanged(gainFocus, direction, previouslyFocusedRect);
447        mContentViewCore.onFocusChanged(gainFocus);
448        TraceEvent.end();
449    }
450 
451    @Override
452    public boolean onKeyUp(int keyCode, KeyEvent event) {
453        return mContentViewCore.onKeyUp(keyCode, event);
454    }
455 
456    @Override
457    public boolean dispatchKeyEventPreIme(KeyEvent event) {
458        return mContentViewCore.dispatchKeyEventPreIme(event);
459    }
460 
461    @Override
462    public boolean dispatchKeyEvent(KeyEvent event) {
463        if (isFocused()) {
464            return mContentViewCore.dispatchKeyEvent(event);
465        } else {
466            return super.dispatchKeyEvent(event);
467        }
468    }
469 
470    @Override
471    public boolean onTouchEvent(MotionEvent event) {
472        MotionEvent offset = createOffsetMotionEvent(event);
473        boolean consumed = mContentViewCore.onTouchEvent(offset);
474        offset.recycle();
475        return consumed;
476    }
477 
478    /**
479     * Mouse move events are sent on hover enter, hover move and hover exit.
480     * They are sent on hover exit because sometimes it acts as both a hover
481     * move and hover exit.
482     */
483    @Override
484    public boolean onHoverEvent(MotionEvent event) {
485        MotionEvent offset = createOffsetMotionEvent(event);
486        boolean consumed = mContentViewCore.onHoverEvent(offset);
487        offset.recycle();
488        return consumed;
489    }
490 
491    @Override
492    public boolean onGenericMotionEvent(MotionEvent event) {
493        return mContentViewCore.onGenericMotionEvent(event);
494    }
495 
496    @Override
497    public boolean performLongClick() {
498        return false;
499    }
500 
501    /**
502     * Sets the current amount to offset incoming touch events by.  This is used to handle content
503     * moving and not lining up properly with the android input system.
504     * @param dx The X offset in pixels to shift touch events.
505     * @param dy The Y offset in pixels to shift touch events.
506     */
507    public void setCurrentMotionEventOffsets(float dx, float dy) {
508        mCurrentTouchOffsetX = dx;
509        mCurrentTouchOffsetY = dy;
510    }
511 
512    private MotionEvent createOffsetMotionEvent(MotionEvent src) {
513        MotionEvent dst = MotionEvent.obtain(src);
514        dst.offsetLocation(mCurrentTouchOffsetX, mCurrentTouchOffsetY);
515        return dst;
516    }
517 
518    @Override
519    protected void onConfigurationChanged(Configuration newConfig) {
520        mContentViewCore.onConfigurationChanged(newConfig);
521    }
522 
523    /**
524     * Currently the ContentView scrolling happens in the native side. In
525     * the Java view system, it is always pinned at (0, 0). scrollBy() and scrollTo()
526     * are overridden, so that View's mScrollX and mScrollY will be unchanged at
527     * (0, 0). This is critical for drawing ContentView correctly.
528     */
529    @Override
530    public void scrollBy(int x, int y) {
531        mContentViewCore.scrollBy(x, y);
532    }
533 
534    @Override
535    public void scrollTo(int x, int y) {
536        mContentViewCore.scrollTo(x, y);
537    }
538 
539    @Override
540    protected int computeHorizontalScrollExtent() {
541        // TODO (dtrainor): Need to expose scroll events properly to public. Either make getScroll*
542        // work or expose computeHorizontalScrollOffset()/computeVerticalScrollOffset as public.
543        return mContentViewCore.computeHorizontalScrollExtent();
544    }
545 
546    @Override
547    protected int computeHorizontalScrollOffset() {
548        return mContentViewCore.computeHorizontalScrollOffset();
549    }
550 
551    @Override
552    protected int computeHorizontalScrollRange() {
553        return mContentViewCore.computeHorizontalScrollRange();
554    }
555 
556    @Override
557    protected int computeVerticalScrollExtent() {
558        return mContentViewCore.computeVerticalScrollExtent();
559    }
560 
561    @Override
562    protected int computeVerticalScrollOffset() {
563        return mContentViewCore.computeVerticalScrollOffset();
564    }
565 
566    @Override
567    protected int computeVerticalScrollRange() {
568        return mContentViewCore.computeVerticalScrollRange();
569    }
570 
571    // End FrameLayout overrides.
572 
573    @Override
574    public boolean awakenScrollBars(int startDelay, boolean invalidate) {
575        return mContentViewCore.awakenScrollBars(startDelay, invalidate);
576    }
577 
578    @Override
579    public boolean awakenScrollBars() {
580        return super.awakenScrollBars();
581    }
582 
583    public int getSingleTapX()  {
584        return mContentViewCore.getContentViewGestureHandler().getSingleTapX();
585    }
586 
587    public int getSingleTapY()  {
588        return mContentViewCore.getContentViewGestureHandler().getSingleTapY();
589    }
590 
591    @Override
592    public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
593        super.onInitializeAccessibilityNodeInfo(info);
594        mContentViewCore.onInitializeAccessibilityNodeInfo(info);
595    }
596 
597    /**
598     * Fills in scrolling values for AccessibilityEvents.
599     * @param event Event being fired.
600     */
601    @Override
602    public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
603        super.onInitializeAccessibilityEvent(event);
604        mContentViewCore.onInitializeAccessibilityEvent(event);
605    }
606 
607    @Override
608    protected void onAttachedToWindow() {
609        super.onAttachedToWindow();
610        mContentViewCore.onAttachedToWindow();
611    }
612 
613    @Override
614    protected void onDetachedFromWindow() {
615        super.onDetachedFromWindow();
616        mContentViewCore.onDetachedFromWindow();
617    }
618 
619    @Override
620    protected void onVisibilityChanged(View changedView, int visibility) {
621        super.onVisibilityChanged(changedView, visibility);
622        mContentViewCore.onVisibilityChanged(changedView, visibility);
623    }
624 
625    /**
626     * Register the delegate to be used when content can not be handled by
627     * the rendering engine, and should be downloaded instead. This will replace
628     * the current delegate.
629     * @param delegate An implementation of ContentViewDownloadDelegate.
630     */
631    public void setDownloadDelegate(ContentViewDownloadDelegate delegate) {
632        mContentViewCore.setDownloadDelegate(delegate);
633    }
634 
635    // Called by DownloadController.
636    ContentViewDownloadDelegate getDownloadDelegate() {
637        return mContentViewCore.getDownloadDelegate();
638    }
639 
640    public boolean getUseDesktopUserAgent() {
641        return mContentViewCore.getUseDesktopUserAgent();
642    }
643 
644    /**
645     * Set whether or not we're using a desktop user agent for the currently loaded page.
646     * @param override If true, use a desktop user agent.  Use a mobile one otherwise.
647     * @param reloadOnChange Reload the page if the UA has changed.
648     */
649    public void setUseDesktopUserAgent(boolean override, boolean reloadOnChange) {
650        mContentViewCore.setUseDesktopUserAgent(override, reloadOnChange);
651    }
652 
653    /**
654     * @return Whether the native ContentView has crashed.
655     */
656    public boolean isCrashed() {
657        return mContentViewCore.isCrashed();
658    }
659 
660    /**
661     * @return Whether a reload happens when this ContentView is activated.
662     */
663    public boolean needsReload() {
664        return mContentViewCore.needsReload();
665    }
666 
667    /**
668     * Checks whether the WebView can be zoomed in.
669     *
670     * @return True if the WebView can be zoomed in.
671     */
672    // This method uses the term 'zoom' for legacy reasons, but relates
673    // to what chrome calls the 'page scale factor'.
674    public boolean canZoomIn() {
675        return mContentViewCore.canZoomIn();
676    }
677 
678    /**
679     * Checks whether the WebView can be zoomed out.
680     *
681     * @return True if the WebView can be zoomed out.
682     */
683    // This method uses the term 'zoom' for legacy reasons, but relates
684    // to what chrome calls the 'page scale factor'.
685    public boolean canZoomOut() {
686        return mContentViewCore.canZoomOut();
687    }
688 
689    /**
690     * Zooms in the WebView by 25% (or less if that would result in zooming in
691     * more than possible).
692     *
693     * @return True if there was a zoom change, false otherwise.
694     */
695    // This method uses the term 'zoom' for legacy reasons, but relates
696    // to what chrome calls the 'page scale factor'.
697    public boolean zoomIn() {
698        return mContentViewCore.zoomIn();
699    }
700 
701    /**
702     * Zooms out the WebView by 20% (or less if that would result in zooming out
703     * more than possible).
704     *
705     * @return True if there was a zoom change, false otherwise.
706     */
707    // This method uses the term 'zoom' for legacy reasons, but relates
708    // to what chrome calls the 'page scale factor'.
709    public boolean zoomOut() {
710        return mContentViewCore.zoomOut();
711    }
712 
713    /**
714     * Resets the zoom factor of the WebView.
715     *
716     * @return True if there was a zoom change, false otherwise.
717     */
718    // This method uses the term 'zoom' for legacy reasons, but relates
719    // to what chrome calls the 'page scale factor'.
720    public boolean zoomReset() {
721        return mContentViewCore.zoomReset();
722    }
723 
724    /**
725     * Return the current scale of the WebView
726     * @return The current scale.
727     */
728    public float getScale() {
729        return mContentViewCore.getScale();
730    }
731 
732    /**
733     * If the view is ready to draw contents to the screen. In hardware mode,
734     * the initialization of the surface texture may not occur until after the
735     * view has been added to the layout. This method will return {@code true}
736     * once the texture is actually ready.
737     */
738    public boolean isReady() {
739        return mContentViewCore.isReady();
740    }
741 
742    /**
743     * Returns whether or not accessibility injection is being used.
744     */
745    public boolean isInjectingAccessibilityScript() {
746        return mContentViewCore.isInjectingAccessibilityScript();
747    }
748 
749    /**
750     * Enable or disable accessibility features.
751     */
752    public void setAccessibilityState(boolean state) {
753        mContentViewCore.setAccessibilityState(state);
754    }
755 
756    /**
757     * Stop any TTS notifications that are currently going on.
758     */
759    public void stopCurrentAccessibilityNotifications() {
760        mContentViewCore.stopCurrentAccessibilityNotifications();
761    }
762 
763    /**
764     * Inform WebKit that Fullscreen mode has been exited by the user.
765     */
766    public void exitFullscreen() {
767        mContentViewCore.exitFullscreen();
768    }
769 
770    /**
771     * Return content scroll y.
772     *
773     * @return The vertical scroll position in pixels.
774     */
775    public int getContentScrollY() {
776        return mContentViewCore.computeVerticalScrollOffset();
777    }
778 
779    /**
780     * Return content height.
781     *
782     * @return The height of the content in pixels.
783     */
784    public int getContentHeight() {
785        return mContentViewCore.computeVerticalScrollRange();
786    }
787 
788    ///////////////////////////////////////////////////////////////////////////////////////////////
789    //              Start Implementation of ContentViewCore.InternalAccessDelegate               //
790    ///////////////////////////////////////////////////////////////////////////////////////////////
791 
792    @Override
793    public boolean super_onKeyUp(int keyCode, KeyEvent event) {
794        return super.onKeyUp(keyCode, event);
795    }
796 
797    @Override
798    public boolean super_dispatchKeyEventPreIme(KeyEvent event) {
799        return super.dispatchKeyEventPreIme(event);
800    }
801 
802    @Override
803    public boolean super_dispatchKeyEvent(KeyEvent event) {
804        return super.dispatchKeyEvent(event);
805    }
806 
807    @Override
808    public boolean super_onGenericMotionEvent(MotionEvent event) {
809        return super.onGenericMotionEvent(event);
810    }
811 
812    @Override
813    public void super_onConfigurationChanged(Configuration newConfig) {
814        super.onConfigurationChanged(newConfig);
815    }
816 
817    @Override
818    public boolean super_awakenScrollBars(int startDelay, boolean invalidate) {
819        return super.awakenScrollBars(startDelay, invalidate);
820    }
821 
822    ///////////////////////////////////////////////////////////////////////////////////////////////
823    //                End Implementation of ContentViewCore.InternalAccessDelegate               //
824    ///////////////////////////////////////////////////////////////////////////////////////////////
825}

[all classes][org.chromium.content.browser]
EMMA 2.0.5312 (C) Vladimir Roubtsov