| 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.annotation.SuppressLint; | 7 import android.annotation.SuppressLint; |
| 8 import android.app.Activity; | 8 import android.app.Activity; |
| 9 import android.app.Application; | 9 import android.app.Application; |
| 10 import android.content.Context; | 10 import android.content.Context; |
| 11 import android.content.Intent; | 11 import android.content.Intent; |
| 12 import android.content.res.Resources; | 12 import android.content.res.Resources; |
| 13 import android.graphics.Bitmap; | 13 import android.graphics.Bitmap; |
| 14 import android.graphics.Color; | 14 import android.graphics.Color; |
| 15 import android.graphics.Rect; | 15 import android.graphics.Rect; |
| 16 import android.net.Uri; | 16 import android.net.Uri; |
| 17 import android.os.Bundle; | 17 import android.os.Bundle; |
| 18 import android.provider.Browser; | 18 import android.provider.Browser; |
| 19 import android.support.annotation.Nullable; | 19 import android.support.annotation.Nullable; |
| 20 import android.support.v4.view.ViewCompat; | 20 import android.support.v4.view.ViewCompat; |
| 21 import android.text.TextUtils; | 21 import android.text.TextUtils; |
| 22 import android.util.Log; | 22 import android.util.Log; |
| 23 import android.view.ContextThemeWrapper; | 23 import android.view.ContextThemeWrapper; |
| 24 import android.view.View; | 24 import android.view.View; |
| 25 import android.view.View.OnClickListener; | |
| 26 import android.view.ViewGroup; | 25 import android.view.ViewGroup; |
| 27 import android.view.accessibility.AccessibilityEvent; | 26 import android.view.accessibility.AccessibilityEvent; |
| 28 import android.widget.FrameLayout; | 27 import android.widget.FrameLayout; |
| 29 import android.widget.FrameLayout.LayoutParams; | 28 import android.widget.FrameLayout.LayoutParams; |
| 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; |
| (...skipping 1652 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1688 if (getInterceptNavigationDelegate() != null) { | 1687 if (getInterceptNavigationDelegate() != null) { |
| 1689 getInterceptNavigationDelegate().maybeUpdateNavigationHistory(); | 1688 getInterceptNavigationDelegate().maybeUpdateNavigationHistory(); |
| 1690 } | 1689 } |
| 1691 } | 1690 } |
| 1692 | 1691 |
| 1693 /** | 1692 /** |
| 1694 * Constructs and shows a sad tab (Aw, Snap!). | 1693 * Constructs and shows a sad tab (Aw, Snap!). |
| 1695 */ | 1694 */ |
| 1696 protected void showSadTab() { | 1695 protected void showSadTab() { |
| 1697 if (getContentViewCore() != null) { | 1696 if (getContentViewCore() != null) { |
| 1698 OnClickListener suggestionAction = new OnClickListener() { | 1697 // If the tab has crashed twice in a row change the sad tab view to
the "Send Feedback" |
| 1698 // version and change the onClickListener. |
| 1699 final boolean showSendFeedbackView = mSadTabSuccessiveRefreshCounter
>= 1; |
| 1700 |
| 1701 Runnable suggestionAction = new Runnable() { |
| 1699 @Override | 1702 @Override |
| 1700 public void onClick(View view) { | 1703 public void run() { |
| 1701 Activity activity = mWindowAndroid.getActivity().get(); | 1704 Activity activity = mWindowAndroid.getActivity().get(); |
| 1702 assert activity != null; | 1705 assert activity != null; |
| 1703 HelpAndFeedback.getInstance(activity).show(activity, | 1706 HelpAndFeedback.getInstance(activity).show(activity, |
| 1704 activity.getString(R.string.help_context_sad_tab), | 1707 activity.getString(R.string.help_context_sad_tab), |
| 1705 Profile.getLastUsedProfile(), null); | 1708 Profile.getLastUsedProfile(), null); |
| 1706 } | 1709 } |
| 1707 }; | 1710 }; |
| 1708 | 1711 |
| 1709 // If the tab has crashed twice in a row change the button to "Send
Feedback" and | 1712 Runnable buttonAction = new Runnable() { |
| 1710 // change the onClickListener. | |
| 1711 final boolean showSendFeedbackButton = mSadTabSuccessiveRefreshCount
er >= 1; | |
| 1712 OnClickListener buttonAction = new OnClickListener() { | |
| 1713 | |
| 1714 @Override | 1713 @Override |
| 1715 public void onClick(View v) { | 1714 public void run() { |
| 1716 if (showSendFeedbackButton) { | 1715 if (showSendFeedbackView) { |
| 1717 getActivity().startHelpAndFeedback(Tab.this, "MobileSadT
abFeedback"); | 1716 getActivity().startHelpAndFeedback(Tab.this, "MobileSadT
abFeedback"); |
| 1718 } else { | 1717 } else { |
| 1719 reload(); | 1718 reload(); |
| 1720 } | 1719 } |
| 1721 } | 1720 } |
| 1722 }; | 1721 }; |
| 1723 | 1722 |
| 1724 // Make sure we are not adding the "Aw, snap" view over an existing
one. | 1723 // Make sure we are not adding the "Aw, snap" view over an existing
one. |
| 1725 assert mSadTabView == null; | 1724 assert mSadTabView == null; |
| 1726 | 1725 |
| 1727 mSadTabView = SadTabViewFactory.createSadTabView(mThemedApplicationC
ontext, | 1726 mSadTabView = SadTabViewFactory.createSadTabView(mThemedApplicationC
ontext, |
| 1728 suggestionAction, buttonAction, showSendFeedbackButton | 1727 suggestionAction, buttonAction, showSendFeedbackView); |
| 1729 ? R.string.sad_tab_send_feedback_label : R.string.sa
d_tab_reload_label); | |
| 1730 mSadTabSuccessiveRefreshCounter++; | 1728 mSadTabSuccessiveRefreshCounter++; |
| 1731 // Show the sad tab inside ContentView. | 1729 // Show the sad tab inside ContentView. |
| 1732 getContentViewCore().getContainerView().addView( | 1730 getContentViewCore().getContainerView().addView( |
| 1733 mSadTabView, new FrameLayout.LayoutParams( | 1731 mSadTabView, new FrameLayout.LayoutParams( |
| 1734 LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT
)); | 1732 LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT
)); |
| 1735 notifyContentChanged(); | 1733 notifyContentChanged(); |
| 1736 } | 1734 } |
| 1737 FullscreenManager fullscreenManager = getFullscreenManager(); | 1735 FullscreenManager fullscreenManager = getFullscreenManager(); |
| 1738 if (fullscreenManager != null) { | 1736 if (fullscreenManager != null) { |
| 1739 fullscreenManager.setPositionsForTabToNonFullscreen(); | 1737 fullscreenManager.setPositionsForTabToNonFullscreen(); |
| (...skipping 1331 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3071 private native void nativeLoadOriginalImage(long nativeTabAndroid); | 3069 private native void nativeLoadOriginalImage(long nativeTabAndroid); |
| 3072 private native long nativeGetBookmarkId(long nativeTabAndroid, boolean onlyE
ditable); | 3070 private native long nativeGetBookmarkId(long nativeTabAndroid, boolean onlyE
ditable); |
| 3073 private native void nativeSetInterceptNavigationDelegate(long nativeTabAndro
id, | 3071 private native void nativeSetInterceptNavigationDelegate(long nativeTabAndro
id, |
| 3074 InterceptNavigationDelegate delegate); | 3072 InterceptNavigationDelegate delegate); |
| 3075 private native void nativeAttachToTabContentManager(long nativeTabAndroid, | 3073 private native void nativeAttachToTabContentManager(long nativeTabAndroid, |
| 3076 TabContentManager tabContentManager); | 3074 TabContentManager tabContentManager); |
| 3077 private native boolean nativeHasPrerenderedUrl(long nativeTabAndroid, String
url); | 3075 private native boolean nativeHasPrerenderedUrl(long nativeTabAndroid, String
url); |
| 3078 private native void nativeSetWebappManifestScope(long nativeTabAndroid, Stri
ng scope); | 3076 private native void nativeSetWebappManifestScope(long nativeTabAndroid, Stri
ng scope); |
| 3079 private native void nativeEnableEmbeddedMediaExperience(long nativeTabAndroi
d, boolean enabled); | 3077 private native void nativeEnableEmbeddedMediaExperience(long nativeTabAndroi
d, boolean enabled); |
| 3080 } | 3078 } |
| OLD | NEW |