| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 package org.chromium.chrome.browser.tab; | 5 package org.chromium.chrome.browser.tab; |
| 6 | 6 |
| 7 import android.app.Activity; | 7 import android.app.Activity; |
| 8 import android.app.Application; | 8 import android.app.Application; |
| 9 import android.content.Context; | 9 import android.content.Context; |
| 10 import android.content.Intent; | 10 import android.content.Intent; |
| 11 import android.content.res.Resources; | 11 import android.content.res.Resources; |
| 12 import android.graphics.Bitmap; | 12 import android.graphics.Bitmap; |
| 13 import android.graphics.Color; | 13 import android.graphics.Color; |
| 14 import android.graphics.Point; | 14 import android.graphics.Point; |
| 15 import android.net.Uri; | 15 import android.net.Uri; |
| 16 import android.os.Build; | |
| 17 import android.os.Bundle; | 16 import android.os.Bundle; |
| 18 import android.os.Handler; | 17 import android.os.Handler; |
| 19 import android.os.Message; | 18 import android.os.Message; |
| 20 import android.provider.Browser; | 19 import android.provider.Browser; |
| 21 import android.text.TextUtils; | 20 import android.text.TextUtils; |
| 22 import android.util.Log; | 21 import android.util.Log; |
| 23 import android.view.ContextThemeWrapper; | 22 import android.view.ContextThemeWrapper; |
| 24 import android.view.View; | 23 import android.view.View; |
| 25 import android.view.View.OnClickListener; | 24 import android.view.View.OnClickListener; |
| 26 import android.view.ViewGroup; | 25 import android.view.ViewGroup; |
| 27 import android.view.ViewGroup.LayoutParams; | 26 import android.view.ViewGroup.LayoutParams; |
| 28 import android.view.accessibility.AccessibilityEvent; | 27 import android.view.accessibility.AccessibilityEvent; |
| 29 import android.widget.FrameLayout; | 28 import android.widget.FrameLayout; |
| 30 | 29 |
| 31 import org.chromium.base.ApiCompatibilityUtils; | 30 import org.chromium.base.ApiCompatibilityUtils; |
| 32 import org.chromium.base.ApplicationStatus; | 31 import org.chromium.base.ApplicationStatus; |
| 33 import org.chromium.base.ContextUtils; | 32 import org.chromium.base.ContextUtils; |
| 34 import org.chromium.base.ObserverList; | 33 import org.chromium.base.ObserverList; |
| 35 import org.chromium.base.ObserverList.RewindableIterator; | 34 import org.chromium.base.ObserverList.RewindableIterator; |
| 36 import org.chromium.base.ThreadUtils; | 35 import org.chromium.base.ThreadUtils; |
| 37 import org.chromium.base.TraceEvent; | 36 import org.chromium.base.TraceEvent; |
| 38 import org.chromium.base.VisibleForTesting; | 37 import org.chromium.base.VisibleForTesting; |
| 39 import org.chromium.base.annotations.CalledByNative; | 38 import org.chromium.base.annotations.CalledByNative; |
| 40 import org.chromium.base.metrics.RecordHistogram; | 39 import org.chromium.base.metrics.RecordHistogram; |
| 41 import org.chromium.base.metrics.RecordUserAction; | |
| 42 import org.chromium.blimp_public.contents.BlimpContents; | 40 import org.chromium.blimp_public.contents.BlimpContents; |
| 43 import org.chromium.chrome.R; | 41 import org.chromium.chrome.R; |
| 44 import org.chromium.chrome.browser.ChromeActivity; | 42 import org.chromium.chrome.browser.ChromeActivity; |
| 45 import org.chromium.chrome.browser.ChromeApplication; | 43 import org.chromium.chrome.browser.ChromeApplication; |
| 46 import org.chromium.chrome.browser.ChromeFeatureList; | 44 import org.chromium.chrome.browser.ChromeFeatureList; |
| 47 import org.chromium.chrome.browser.ChromeVersionInfo; | 45 import org.chromium.chrome.browser.ChromeVersionInfo; |
| 48 import org.chromium.chrome.browser.FrozenNativePage; | 46 import org.chromium.chrome.browser.FrozenNativePage; |
| 49 import org.chromium.chrome.browser.IntentHandler; | 47 import org.chromium.chrome.browser.IntentHandler; |
| 50 import org.chromium.chrome.browser.IntentHandler.TabOpenType; | 48 import org.chromium.chrome.browser.IntentHandler.TabOpenType; |
| 51 import org.chromium.chrome.browser.NativePage; | 49 import org.chromium.chrome.browser.NativePage; |
| 52 import org.chromium.chrome.browser.SwipeRefreshHandler; | 50 import org.chromium.chrome.browser.SwipeRefreshHandler; |
| 53 import org.chromium.chrome.browser.TabState; | 51 import org.chromium.chrome.browser.TabState; |
| 54 import org.chromium.chrome.browser.TabState.WebContentsState; | 52 import org.chromium.chrome.browser.TabState.WebContentsState; |
| 55 import org.chromium.chrome.browser.UrlConstants; | 53 import org.chromium.chrome.browser.UrlConstants; |
| 56 import org.chromium.chrome.browser.WarmupManager; | 54 import org.chromium.chrome.browser.WarmupManager; |
| 57 import org.chromium.chrome.browser.WebContentsFactory; | 55 import org.chromium.chrome.browser.WebContentsFactory; |
| 58 import org.chromium.chrome.browser.banners.AppBannerManager; | 56 import org.chromium.chrome.browser.banners.AppBannerManager; |
| 59 import org.chromium.chrome.browser.blimp.BlimpClientContextFactory; | 57 import org.chromium.chrome.browser.blimp.BlimpClientContextFactory; |
| 60 import org.chromium.chrome.browser.compositor.layouts.content.TabContentManager; | 58 import org.chromium.chrome.browser.compositor.layouts.content.TabContentManager; |
| 61 import org.chromium.chrome.browser.contextmenu.ContextMenuPopulator; | 59 import org.chromium.chrome.browser.contextmenu.ContextMenuPopulator; |
| 62 import org.chromium.chrome.browser.contextualsearch.ContextualSearchTabHelper; | 60 import org.chromium.chrome.browser.contextualsearch.ContextualSearchTabHelper; |
| 63 import org.chromium.chrome.browser.crash.MinidumpDirectoryObserver; | |
| 64 import org.chromium.chrome.browser.crash.MinidumpUploadService; | |
| 65 import org.chromium.chrome.browser.customtabs.CustomTabActivity; | 61 import org.chromium.chrome.browser.customtabs.CustomTabActivity; |
| 66 import org.chromium.chrome.browser.download.ChromeDownloadDelegate; | 62 import org.chromium.chrome.browser.download.ChromeDownloadDelegate; |
| 67 import org.chromium.chrome.browser.fullscreen.FullscreenManager; | 63 import org.chromium.chrome.browser.fullscreen.FullscreenManager; |
| 68 import org.chromium.chrome.browser.help.HelpAndFeedback; | 64 import org.chromium.chrome.browser.help.HelpAndFeedback; |
| 69 import org.chromium.chrome.browser.infobar.InfoBarContainer; | 65 import org.chromium.chrome.browser.infobar.InfoBarContainer; |
| 70 import org.chromium.chrome.browser.media.ui.MediaSessionTabHelper; | 66 import org.chromium.chrome.browser.media.ui.MediaSessionTabHelper; |
| 71 import org.chromium.chrome.browser.ntp.NativePageAssassin; | 67 import org.chromium.chrome.browser.ntp.NativePageAssassin; |
| 72 import org.chromium.chrome.browser.ntp.NativePageFactory; | 68 import org.chromium.chrome.browser.ntp.NativePageFactory; |
| 73 import org.chromium.chrome.browser.offlinepages.OfflinePageItem; | 69 import org.chromium.chrome.browser.offlinepages.OfflinePageItem; |
| 74 import org.chromium.chrome.browser.omnibox.geo.GeolocationHeader; | 70 import org.chromium.chrome.browser.omnibox.geo.GeolocationHeader; |
| (...skipping 12 matching lines...) Expand all Loading... |
| 87 import org.chromium.chrome.browser.tabmodel.TabModel; | 83 import org.chromium.chrome.browser.tabmodel.TabModel; |
| 88 import org.chromium.chrome.browser.tabmodel.TabModel.TabLaunchType; | 84 import org.chromium.chrome.browser.tabmodel.TabModel.TabLaunchType; |
| 89 import org.chromium.chrome.browser.tabmodel.TabModel.TabSelectionType; | 85 import org.chromium.chrome.browser.tabmodel.TabModel.TabSelectionType; |
| 90 import org.chromium.chrome.browser.tabmodel.TabModelImpl; | 86 import org.chromium.chrome.browser.tabmodel.TabModelImpl; |
| 91 import org.chromium.chrome.browser.tabmodel.TabModelSelector; | 87 import org.chromium.chrome.browser.tabmodel.TabModelSelector; |
| 92 import org.chromium.chrome.browser.tabmodel.TabReparentingParams; | 88 import org.chromium.chrome.browser.tabmodel.TabReparentingParams; |
| 93 import org.chromium.chrome.browser.util.ColorUtils; | 89 import org.chromium.chrome.browser.util.ColorUtils; |
| 94 import org.chromium.components.dom_distiller.core.DomDistillerUrlUtils; | 90 import org.chromium.components.dom_distiller.core.DomDistillerUrlUtils; |
| 95 import org.chromium.components.navigation_interception.InterceptNavigationDelega
te; | 91 import org.chromium.components.navigation_interception.InterceptNavigationDelega
te; |
| 96 import org.chromium.components.security_state.ConnectionSecurityLevel; | 92 import org.chromium.components.security_state.ConnectionSecurityLevel; |
| 97 import org.chromium.components.variations.VariationsAssociatedData; | |
| 98 import org.chromium.content.browser.ActivityContentVideoViewEmbedder; | 93 import org.chromium.content.browser.ActivityContentVideoViewEmbedder; |
| 99 import org.chromium.content.browser.ChildProcessLauncher; | 94 import org.chromium.content.browser.ChildProcessLauncher; |
| 100 import org.chromium.content.browser.ContentVideoViewEmbedder; | 95 import org.chromium.content.browser.ContentVideoViewEmbedder; |
| 101 import org.chromium.content.browser.ContentView; | 96 import org.chromium.content.browser.ContentView; |
| 102 import org.chromium.content.browser.ContentViewClient; | 97 import org.chromium.content.browser.ContentViewClient; |
| 103 import org.chromium.content.browser.ContentViewCore; | 98 import org.chromium.content.browser.ContentViewCore; |
| 104 import org.chromium.content.browser.crypto.CipherFactory; | 99 import org.chromium.content.browser.crypto.CipherFactory; |
| 105 import org.chromium.content_public.browser.GestureStateListener; | 100 import org.chromium.content_public.browser.GestureStateListener; |
| 106 import org.chromium.content_public.browser.LoadUrlParams; | 101 import org.chromium.content_public.browser.LoadUrlParams; |
| 107 import org.chromium.content_public.browser.WebContents; | 102 import org.chromium.content_public.browser.WebContents; |
| (...skipping 2705 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2813 } | 2808 } |
| 2814 | 2809 |
| 2815 /** | 2810 /** |
| 2816 * Performs any subclass-specific tasks when the Tab crashes. | 2811 * Performs any subclass-specific tasks when the Tab crashes. |
| 2817 */ | 2812 */ |
| 2818 void handleTabCrash() { | 2813 void handleTabCrash() { |
| 2819 mIsLoading = false; | 2814 mIsLoading = false; |
| 2820 mIsBeingRestored = false; | 2815 mIsBeingRestored = false; |
| 2821 | 2816 |
| 2822 if (mTabUma != null) mTabUma.onRendererCrashed(); | 2817 if (mTabUma != null) mTabUma.onRendererCrashed(); |
| 2823 | |
| 2824 if (!TextUtils.equals("true", VariationsAssociatedData.getVariationParam
Value( | |
| 2825 MinidumpDirectoryObserver.MINIDUMP_EXPERIMENT_NAME, "Enabled")))
{ | |
| 2826 try { | |
| 2827 // Update the most recent minidump file with the logcat. Doing t
his asynchronously | |
| 2828 // adds a race condition in the case of multiple simultaneously
renderer crashses | |
| 2829 // but because the data will be the same for all of them it is i
nnocuous. We can | |
| 2830 // attempt to do this regardless of whether it was a foreground
tab in the event | |
| 2831 // that it's a real crash and not just android killing the tab. | |
| 2832 Context context = getApplicationContext(); | |
| 2833 Intent intent = MinidumpUploadService.createFindAndUploadLastCra
shIntent(context); | |
| 2834 context.startService(intent); | |
| 2835 RecordUserAction.record("MobileBreakpadUploadAttempt"); | |
| 2836 } catch (SecurityException e) { | |
| 2837 // For KitKat and below, there was a framework bug which cause u
s to not be able to | |
| 2838 // find our own crash uploading service. Ignore a SecurityExcept
ion here on older | |
| 2839 // OS versions since the crash will eventually get uploaded on n
ext start. | |
| 2840 // crbug/542533 | |
| 2841 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { | |
| 2842 throw e; | |
| 2843 } | |
| 2844 } | |
| 2845 } | |
| 2846 } | 2818 } |
| 2847 | 2819 |
| 2848 /** | 2820 /** |
| 2849 * @return Whether showing top controls is enabled or not. | 2821 * @return Whether showing top controls is enabled or not. |
| 2850 */ | 2822 */ |
| 2851 public boolean isShowingTopControlsEnabled() { | 2823 public boolean isShowingTopControlsEnabled() { |
| 2852 return mTopControlsVisibilityDelegate.isShowingTopControlsEnabled(); | 2824 return mTopControlsVisibilityDelegate.isShowingTopControlsEnabled(); |
| 2853 } | 2825 } |
| 2854 | 2826 |
| 2855 /** | 2827 /** |
| (...skipping 475 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3331 private native void nativeSetInterceptNavigationDelegate(long nativeTabAndro
id, | 3303 private native void nativeSetInterceptNavigationDelegate(long nativeTabAndro
id, |
| 3332 InterceptNavigationDelegate delegate); | 3304 InterceptNavigationDelegate delegate); |
| 3333 private native void nativeAttachToTabContentManager(long nativeTabAndroid, | 3305 private native void nativeAttachToTabContentManager(long nativeTabAndroid, |
| 3334 TabContentManager tabContentManager); | 3306 TabContentManager tabContentManager); |
| 3335 private native void nativeAttachOverlayWebContents( | 3307 private native void nativeAttachOverlayWebContents( |
| 3336 long nativeTabAndroid, WebContents webContents, boolean visible); | 3308 long nativeTabAndroid, WebContents webContents, boolean visible); |
| 3337 private native void nativeDetachOverlayWebContents( | 3309 private native void nativeDetachOverlayWebContents( |
| 3338 long nativeTabAndroid, WebContents webContents); | 3310 long nativeTabAndroid, WebContents webContents); |
| 3339 private native boolean nativeHasPrerenderedUrl(long nativeTabAndroid, String
url); | 3311 private native boolean nativeHasPrerenderedUrl(long nativeTabAndroid, String
url); |
| 3340 } | 3312 } |
| OLD | NEW |