OLD | NEW |
---|---|
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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.contextualsearch; | 5 package org.chromium.chrome.browser.contextualsearch; |
6 | 6 |
7 import android.app.Activity; | 7 import android.app.Activity; |
8 import android.view.View; | 8 import android.view.View; |
9 import android.view.ViewGroup; | 9 import android.view.ViewGroup; |
10 import android.view.ViewTreeObserver; | 10 import android.view.ViewTreeObserver; |
11 import android.view.ViewTreeObserver.OnGlobalFocusChangeListener; | 11 import android.view.ViewTreeObserver.OnGlobalFocusChangeListener; |
12 | 12 |
13 import org.chromium.base.ActivityState; | 13 import org.chromium.base.ActivityState; |
14 import org.chromium.base.ApplicationStatus; | 14 import org.chromium.base.ApplicationStatus; |
15 import org.chromium.base.ApplicationStatus.ActivityStateListener; | 15 import org.chromium.base.ApplicationStatus.ActivityStateListener; |
16 import org.chromium.base.SysUtils; | 16 import org.chromium.base.SysUtils; |
17 import org.chromium.base.VisibleForTesting; | 17 import org.chromium.base.VisibleForTesting; |
18 import org.chromium.base.annotations.CalledByNative; | 18 import org.chromium.base.annotations.CalledByNative; |
19 import org.chromium.chrome.R; | 19 import org.chromium.chrome.R; |
20 import org.chromium.chrome.browser.ChromeActivity; | 20 import org.chromium.chrome.browser.ChromeActivity; |
21 import org.chromium.chrome.browser.compositor.bottombar.OverlayContentDelegate; | |
21 import org.chromium.chrome.browser.compositor.bottombar.contextualsearch.Context ualSearchPanel.PanelState; | 22 import org.chromium.chrome.browser.compositor.bottombar.contextualsearch.Context ualSearchPanel.PanelState; |
22 import org.chromium.chrome.browser.compositor.bottombar.contextualsearch.Context ualSearchPanel.StateChangeReason; | 23 import org.chromium.chrome.browser.compositor.bottombar.contextualsearch.Context ualSearchPanel.StateChangeReason; |
23 import org.chromium.chrome.browser.compositor.bottombar.contextualsearch.Context ualSearchPanelDelegate; | 24 import org.chromium.chrome.browser.compositor.bottombar.contextualsearch.Context ualSearchPanelDelegate; |
24 import org.chromium.chrome.browser.contextualsearch.ContextualSearchSelectionCon troller.SelectionType; | 25 import org.chromium.chrome.browser.contextualsearch.ContextualSearchSelectionCon troller.SelectionType; |
25 import org.chromium.chrome.browser.device.DeviceClassManager; | 26 import org.chromium.chrome.browser.device.DeviceClassManager; |
26 import org.chromium.chrome.browser.externalnav.ExternalNavigationHandler; | 27 import org.chromium.chrome.browser.externalnav.ExternalNavigationHandler; |
27 import org.chromium.chrome.browser.externalnav.ExternalNavigationHandler.Overrid eUrlLoadingResult; | 28 import org.chromium.chrome.browser.externalnav.ExternalNavigationHandler.Overrid eUrlLoadingResult; |
28 import org.chromium.chrome.browser.externalnav.ExternalNavigationParams; | 29 import org.chromium.chrome.browser.externalnav.ExternalNavigationParams; |
29 import org.chromium.chrome.browser.gsa.GSAContextDisplaySelection; | 30 import org.chromium.chrome.browser.gsa.GSAContextDisplaySelection; |
30 import org.chromium.chrome.browser.infobar.InfoBarContainer; | 31 import org.chromium.chrome.browser.infobar.InfoBarContainer; |
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
99 private long mLoadedSearchUrlTimeMs; | 100 private long mLoadedSearchUrlTimeMs; |
100 // TODO(donnd): consider changing this member's name to indicate "opened" in stead of "seen". | 101 // TODO(donnd): consider changing this member's name to indicate "opened" in stead of "seen". |
101 private boolean mWereSearchResultsSeen; | 102 private boolean mWereSearchResultsSeen; |
102 private boolean mWereInfoBarsHidden; | 103 private boolean mWereInfoBarsHidden; |
103 private boolean mDidLoadAnyUrl; | 104 private boolean mDidLoadAnyUrl; |
104 private boolean mDidPromoteSearchNavigation; | 105 private boolean mDidPromoteSearchNavigation; |
105 private boolean mDidBasePageLoadJustStart; | 106 private boolean mDidBasePageLoadJustStart; |
106 private boolean mWasActivatedByTap; | 107 private boolean mWasActivatedByTap; |
107 private boolean mIsInitialized; | 108 private boolean mIsInitialized; |
108 | 109 |
110 /** | |
111 * This boolean is used for loading content after a long-press when content is not immediately | |
112 * loaded. | |
113 */ | |
114 private boolean mShouldLoadDelayedSearch; | |
115 | |
109 private boolean mIsShowingPromo; | 116 private boolean mIsShowingPromo; |
110 private boolean mDidLogPromoOutcome; | 117 private boolean mDidLogPromoOutcome; |
111 | 118 |
112 /** | 119 /** |
113 * Whether contextual search manager is currently promoting a tab. We should be ignoring hide | 120 * Whether contextual search manager is currently promoting a tab. We should be ignoring hide |
114 * requests when mIsPromotingTab is set to true. | 121 * requests when mIsPromotingTab is set to true. |
115 */ | 122 */ |
116 private boolean mIsPromotingToTab; | 123 private boolean mIsPromotingToTab; |
117 | 124 |
118 private ContextualSearchNetworkCommunicator mNetworkCommunicator; | 125 private ContextualSearchNetworkCommunicator mNetworkCommunicator; |
(...skipping 340 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
459 } | 466 } |
460 | 467 |
461 // If the user is jumping from one unseen search to another search, remo ve the last search | 468 // If the user is jumping from one unseen search to another search, remo ve the last search |
462 // from history. | 469 // from history. |
463 PanelState state = mSearchPanelDelegate.getPanelState(); | 470 PanelState state = mSearchPanelDelegate.getPanelState(); |
464 if (!mWereSearchResultsSeen && mLoadedSearchUrlTimeMs != 0L | 471 if (!mWereSearchResultsSeen && mLoadedSearchUrlTimeMs != 0L |
465 && state != PanelState.UNDEFINED && state != PanelState.CLOSED) { | 472 && state != PanelState.UNDEFINED && state != PanelState.CLOSED) { |
466 removeLastSearchVisit(); | 473 removeLastSearchVisit(); |
467 } | 474 } |
468 | 475 |
476 mSearchPanelDelegate.setSearchContentViewVisibility(false); | |
477 | |
469 boolean isTap = mSelectionController.getSelectionType() == SelectionType .TAP; | 478 boolean isTap = mSelectionController.getSelectionType() == SelectionType .TAP; |
470 boolean didRequestSurroundings = false; | 479 boolean didRequestSurroundings = false; |
480 | |
481 if (isTap) { | |
482 // If the user action was not a long-press, immediately start loadin g content. | |
483 mShouldLoadDelayedSearch = false; | |
pedro (no code reviews)
2015/09/23 00:00:12
I'm not very happy with adding a new boolean, beca
mdjones
2015/09/23 00:29:31
Acknowledged.
| |
484 } | |
485 | |
471 if (isTap && mPolicy.shouldPreviousTapResolve( | 486 if (isTap && mPolicy.shouldPreviousTapResolve( |
472 mNetworkCommunicator.getBasePageUrl())) { | 487 mNetworkCommunicator.getBasePageUrl())) { |
473 mNetworkCommunicator.startSearchTermResolutionRequest( | 488 mNetworkCommunicator.startSearchTermResolutionRequest( |
474 mSelectionController.getSelectedText()); | 489 mSelectionController.getSelectedText()); |
475 didRequestSurroundings = true; | 490 didRequestSurroundings = true; |
476 } else { | 491 } else { |
477 boolean shouldPrefetch = mPolicy.shouldPrefetchSearchResult(isTap); | 492 boolean shouldPrefetch = mPolicy.shouldPrefetchSearchResult(isTap); |
478 mSearchRequest = new ContextualSearchRequest(mSelectionController.ge tSelectedText(), | 493 mSearchRequest = new ContextualSearchRequest(mSelectionController.ge tSelectedText(), |
479 null, shouldPrefetch); | 494 null, shouldPrefetch); |
480 mDidLoadResolvedSearchRequest = false; | 495 mDidLoadResolvedSearchRequest = false; |
(...skipping 269 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
750 /** | 765 /** |
751 * @return Whether a Tap gesture is currently supported. | 766 * @return Whether a Tap gesture is currently supported. |
752 */ | 767 */ |
753 private boolean isTapSupported() { | 768 private boolean isTapSupported() { |
754 // Base page just started navigating away, so taps should be ignored. | 769 // Base page just started navigating away, so taps should be ignored. |
755 if (mDidBasePageLoadJustStart) return false; | 770 if (mDidBasePageLoadJustStart) return false; |
756 | 771 |
757 return mPolicy.isTapSupported(); | 772 return mPolicy.isTapSupported(); |
758 } | 773 } |
759 | 774 |
775 // ========================================================================= =================== | |
776 // OverlayContentDelegate | |
777 // ========================================================================= =================== | |
778 | |
779 @Override | |
780 public OverlayContentDelegate getOverlayContentDelegate() { | |
781 return new SearchOverlayContentDelegate(); | |
782 } | |
783 | |
784 /** | |
785 * Implementation of OverlayContentDelegate. Made public for testing purpose s. | |
786 */ | |
787 public class SearchOverlayContentDelegate extends OverlayContentDelegate { | |
788 | |
789 public SearchOverlayContentDelegate() {} | |
790 | |
791 @Override | |
792 public void onMainFrameLoadStarted(String url) { | |
793 onExternalNavigation(url); | |
794 } | |
795 | |
796 @Override | |
797 public void onMainFrameNavigation(String url, boolean isFailure) { | |
798 handleDidNavigateMainFrame(url, isFailure); | |
799 } | |
800 | |
801 @Override | |
802 public void onContentLoadStarted(String url) { | |
803 onStartedLoading(); | |
804 } | |
805 | |
806 @Override | |
807 public void onContentLoadFinished() { | |
808 onSearchResultsLoaded(); | |
809 } | |
810 | |
811 @Override | |
812 public void onVisibilityChanged(boolean isVisible) { | |
813 onContentViewVisibilityChanged(isVisible); | |
814 } | |
815 | |
816 @Override | |
817 public void onContentViewCreated(ContentViewCore contentViewCore) { | |
818 // TODO: implemented in manager | |
819 ContextualSearchManager.this.onContentViewCreated(contentViewCore); | |
820 } | |
821 | |
822 @Override | |
823 public void onContentViewDestroyed() { | |
824 // TODO: implemented in manager | |
825 ContextualSearchManager.this.onContentViewDestroyed(); | |
826 } | |
827 | |
828 @Override | |
829 public void onContentViewSeen() { | |
830 mSearchPanelDelegate.setWasSearchContentViewSeen(); | |
831 } | |
832 | |
833 @Override | |
834 public boolean shouldInterceptNavigation(ExternalNavigationHandler exter nalNavHandler, | |
835 NavigationParams navigationParams) { | |
836 return ContextualSearchManager.this.shouldInterceptNavigation(extern alNavHandler, | |
837 navigationParams); | |
838 } | |
839 } | |
840 | |
841 | |
760 // ------------------------------------------------------------------------- ------------------- | 842 // ------------------------------------------------------------------------- ------------------- |
761 // Search Content View | 843 // Search Content View |
762 // ------------------------------------------------------------------------- ------------------- | 844 // ------------------------------------------------------------------------- ------------------- |
763 | 845 |
764 /** | 846 /** |
765 * Gets the {@code ContentViewCore} associated with Contextual Search Panel. | 847 * Gets the {@code ContentViewCore} associated with Contextual Search Panel. |
766 * @return Contextual Search Panel's {@code ContentViewCore}. | 848 * @return Contextual Search Panel's {@code ContentViewCore}. |
767 */ | 849 */ |
768 @Override | 850 @Override |
769 public ContentViewCore getSearchContentViewCore() { | 851 public ContentViewCore getSearchContentViewCore() { |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
828 @Override | 910 @Override |
829 public void logPromoOutcome() { | 911 public void logPromoOutcome() { |
830 ContextualSearchUma.logPromoOutcome(mWasActivatedByTap); | 912 ContextualSearchUma.logPromoOutcome(mWasActivatedByTap); |
831 mDidLogPromoOutcome = true; | 913 mDidLogPromoOutcome = true; |
832 } | 914 } |
833 | 915 |
834 /** | 916 /** |
835 * Called when the Search Content view has finished loading to record how lo ng it takes the SERP | 917 * Called when the Search Content view has finished loading to record how lo ng it takes the SERP |
836 * to load after opening the panel. | 918 * to load after opening the panel. |
837 */ | 919 */ |
838 @Override | |
839 public void onSearchResultsLoaded() { | 920 public void onSearchResultsLoaded() { |
840 if (mSearchRequest == null) return; | 921 if (mSearchRequest == null) return; |
841 | 922 |
842 mSearchPanelDelegate.onSearchResultsLoaded(mSearchRequest.wasPrefetch()) ; | 923 mSearchPanelDelegate.onSearchResultsLoaded(mSearchRequest.wasPrefetch()) ; |
843 | 924 |
844 // Any time we place a page in a ContentViewCore, clear history if neede d. | 925 // Any time we place a page in a ContentViewCore, clear history if neede d. |
845 // This prevents error URLs from appearing in the Tab's history stack. | 926 // This prevents error URLs from appearing in the Tab's history stack. |
846 // Also please note that clearHistory() will not | 927 // Also please note that clearHistory() will not |
847 // clear the current entry (search results page in this case), | 928 // clear the current entry (search results page in this case), |
848 // and it will not work properly if there are pending navigations. | 929 // and it will not work properly if there are pending navigations. |
849 // That's why we need to clear the history here, after the navigation | 930 // That's why we need to clear the history here, after the navigation |
850 // is completed. | 931 // is completed. |
851 boolean shouldClearHistory = mSearchRequest.getHasFailed(); | 932 boolean shouldClearHistory = mSearchRequest.getHasFailed(); |
852 if (shouldClearHistory && mSearchPanelDelegate.getContentViewCore() != n ull) { | 933 if (shouldClearHistory && mSearchPanelDelegate.getContentViewCore() != n ull) { |
853 mSearchPanelDelegate.getContentViewCore().getWebContents().getNaviga tionController() | 934 mSearchPanelDelegate.getContentViewCore().getWebContents().getNaviga tionController() |
854 .clearHistory(); | 935 .clearHistory(); |
855 } | 936 } |
856 } | 937 } |
857 | 938 |
858 @Override | 939 /** |
859 public void handleDidNavigateMainFrame(String url, int httpResultCode) { | 940 * Handles the WebContentsObserver#didNavigateMainFrame callback. |
941 * @param url The URL of the navigation. | |
942 * @param isFailure True if the navigation resulted in a failure. | |
943 */ | |
944 public void handleDidNavigateMainFrame(String url, boolean isFailure) { | |
860 if (shouldPromoteSearchNavigation()) { | 945 if (shouldPromoteSearchNavigation()) { |
861 onExternalNavigation(url); | 946 onExternalNavigation(url); |
862 } else { | 947 } else { |
863 // Could be just prefetching, check if that failed. | 948 // Could be just prefetching, check if that failed. |
864 boolean isFailure = isHttpFailureCode(httpResultCode); | |
865 onContextualSearchRequestNavigation(isFailure); | 949 onContextualSearchRequestNavigation(isFailure); |
866 } | 950 } |
867 } | 951 } |
868 | 952 |
869 @Override | 953 /** |
954 * Called when the WebContents for the panel starts loading. | |
955 */ | |
870 public void onStartedLoading() { | 956 public void onStartedLoading() { |
871 mDidPromoteSearchNavigation = false; | 957 mDidPromoteSearchNavigation = false; |
872 } | 958 } |
873 | 959 |
874 @Override | 960 /** |
961 * Determine if the panel should intercept a particular navigation. | |
962 * @param externamNavHandler External navigation handler. | |
963 * @param navigationParams Params associated with the navigation. | |
964 * @return True if the navigation should be intecepted. | |
965 */ | |
875 public boolean shouldInterceptNavigation( | 966 public boolean shouldInterceptNavigation( |
876 ExternalNavigationHandler externalNavHandler, NavigationParams navig ationParams) { | 967 ExternalNavigationHandler externalNavHandler, NavigationParams navig ationParams) { |
877 mTabRedirectHandler.updateNewUrlLoading(navigationParams.pageTransitionT ype, | 968 mTabRedirectHandler.updateNewUrlLoading(navigationParams.pageTransitionT ype, |
878 navigationParams.isRedirect, | 969 navigationParams.isRedirect, |
879 navigationParams.hasUserGesture || navigationParams.hasUserGestu reCarryover, | 970 navigationParams.hasUserGesture || navigationParams.hasUserGestu reCarryover, |
880 mActivity.getLastUserInteractionTime(), TabRedirectHandler.INVAL ID_ENTRY_INDEX); | 971 mActivity.getLastUserInteractionTime(), TabRedirectHandler.INVAL ID_ENTRY_INDEX); |
881 ExternalNavigationParams params = new ExternalNavigationParams.Builder( | 972 ExternalNavigationParams params = new ExternalNavigationParams.Builder( |
882 navigationParams.url, false, navigationParams.referrer, | 973 navigationParams.url, false, navigationParams.referrer, |
883 navigationParams.pageTransitionType, navigationParams.isRedirect ) | 974 navigationParams.pageTransitionType, navigationParams.isRedirect ) |
884 .setApplicationMustBeInForeground(true) | 975 .setApplicationMustBeInForeground(true) |
885 .setRedirectHandler(mTabRedirectHandler) | 976 .setRedirectHandler(mTabRedirectHandler) |
886 .setIsMainFrame(navigationParams.isMainFrame) | 977 .setIsMainFrame(navigationParams.isMainFrame) |
887 .build(); | 978 .build(); |
888 if (externalNavHandler.shouldOverrideUrlLoading(params) | 979 if (externalNavHandler.shouldOverrideUrlLoading(params) |
889 != OverrideUrlLoadingResult.NO_OVERRIDE) { | 980 != OverrideUrlLoadingResult.NO_OVERRIDE) { |
890 mSearchPanelDelegate.maximizePanelThenPromoteToTab(StateChangeReason .TAB_PROMOTION, | 981 mSearchPanelDelegate.maximizePanelThenPromoteToTab(StateChangeReason .TAB_PROMOTION, |
891 INTERCEPT_NAVIGATION_PROMOTION_ANIMATION_DURATION_MS); | 982 INTERCEPT_NAVIGATION_PROMOTION_ANIMATION_DURATION_MS); |
892 return true; | 983 return false; |
893 } | 984 } |
894 if (navigationParams.isExternalProtocol) { | 985 if (navigationParams.isExternalProtocol) { |
895 return true; | 986 return false; |
896 } | 987 } |
897 return false; | 988 return true; |
898 } | 989 } |
899 | 990 |
900 /** | 991 /** |
901 * @return Whether the given HTTP result code represents a failure or not. | 992 * @return Whether the given HTTP result code represents a failure or not. |
902 */ | 993 */ |
903 private boolean isHttpFailureCode(int httpResultCode) { | 994 private boolean isHttpFailureCode(int httpResultCode) { |
904 return httpResultCode <= 0 || httpResultCode >= 400; | 995 return httpResultCode <= 0 || httpResultCode >= 400; |
905 } | 996 } |
906 | 997 |
907 /** | 998 /** |
908 * @return whether a navigation in the search content view should promote to a separate tab. | 999 * @return whether a navigation in the search content view should promote to a separate tab. |
909 */ | 1000 */ |
910 private boolean shouldPromoteSearchNavigation() { | 1001 private boolean shouldPromoteSearchNavigation() { |
911 // A navigation can be due to us loading a URL, or a touch in the search content view. | 1002 // A navigation can be due to us loading a URL, or a touch in the search content view. |
912 // Require a touch, but no recent loading, in order to promote to a sepa rate tab. | 1003 // Require a touch, but no recent loading, in order to promote to a sepa rate tab. |
913 // Note that tapping the opt-in button requires checking for recent load ing. | 1004 // Note that tapping the opt-in button requires checking for recent load ing. |
914 return mSearchPanelDelegate.didTouchSearchContentView() | 1005 return mSearchPanelDelegate.didTouchSearchContentView() |
915 && !mSearchPanelDelegate.didLoadAnyUrl(); | 1006 && !mSearchPanelDelegate.didLoadAnyUrl(); |
916 } | 1007 } |
917 | 1008 |
918 /** | 1009 /** |
919 * Called to check if an external navigation is being done and take the appr opriate action: | 1010 * Called to check if an external navigation is being done and take the appr opriate action: |
920 * Auto-promotes the panel into a separate tab if that's not already being d one. | 1011 * Auto-promotes the panel into a separate tab if that's not already being d one. |
921 * @param url The URL we are navigating to. | 1012 * @param url The URL we are navigating to. |
922 */ | 1013 */ |
923 @Override | |
924 public void onExternalNavigation(String url) { | 1014 public void onExternalNavigation(String url) { |
925 mSearchPanelDelegate.updateTopControlState(); | 1015 mSearchPanelDelegate.updateTopControlState(); |
926 | 1016 |
927 if (!mDidPromoteSearchNavigation | 1017 if (!mDidPromoteSearchNavigation |
928 && !BLACKLISTED_URL.equals(url) | 1018 && !BLACKLISTED_URL.equals(url) |
929 && !url.startsWith(INTENT_URL_PREFIX) | 1019 && !url.startsWith(INTENT_URL_PREFIX) |
930 && shouldPromoteSearchNavigation()) { | 1020 && shouldPromoteSearchNavigation()) { |
931 // Do not promote to a regular tab if we're loading our Resolved Sea rch | 1021 // Do not promote to a regular tab if we're loading our Resolved Sea rch |
932 // URL, otherwise we'll promote it when prefetching the Serp. | 1022 // URL, otherwise we'll promote it when prefetching the Serp. |
933 // Don't promote URLs when they are navigating to an intent - this i s | 1023 // Don't promote URLs when they are navigating to an intent - this i s |
934 // handled by the InterceptNavigationDelegate which uses a faster | 1024 // handled by the InterceptNavigationDelegate which uses a faster |
935 // maximizing animation. | 1025 // maximizing animation. |
936 mDidPromoteSearchNavigation = true; | 1026 mDidPromoteSearchNavigation = true; |
937 mSearchPanelDelegate.maximizePanelThenPromoteToTab(StateChangeReason .SERP_NAVIGATION); | 1027 mSearchPanelDelegate.maximizePanelThenPromoteToTab(StateChangeReason .SERP_NAVIGATION); |
938 } | 1028 } |
939 } | 1029 } |
940 | 1030 |
941 @Override | 1031 /** |
1032 * This method is called when the panel's ContentViewCore is created. | |
1033 * @param contentView The created ContentViewCore. | |
1034 */ | |
942 public void onContentViewCreated(ContentViewCore contentView) { | 1035 public void onContentViewCreated(ContentViewCore contentView) { |
943 // TODO(mdjones): Move SearchContentViewDelegate ownership to panel. | 1036 // TODO(mdjones): Move SearchContentViewDelegate ownership to panel. |
944 mSearchContentViewDelegate.setContextualSearchContentViewCore(contentVie w); | 1037 mSearchContentViewDelegate.setContextualSearchContentViewCore(contentVie w); |
945 } | 1038 } |
946 | 1039 |
947 @Override | 1040 /** |
1041 * This method is called when the panel's ContentViewCore is destroyed. | |
1042 */ | |
948 public void onContentViewDestroyed() { | 1043 public void onContentViewDestroyed() { |
949 if (mSearchContentViewDelegate != null) { | 1044 if (mSearchContentViewDelegate != null) { |
950 mSearchContentViewDelegate.releaseContextualSearchContentViewCore(); | 1045 mSearchContentViewDelegate.releaseContextualSearchContentViewCore(); |
951 } | 1046 } |
952 } | 1047 } |
953 | 1048 |
954 @Override | 1049 @Override |
955 public void openResolvedSearchUrlInNewTab() { | 1050 public void openResolvedSearchUrlInNewTab() { |
956 if (mSearchRequest != null && mSearchRequest.getSearchUrl() != null) { | 1051 if (mSearchRequest != null && mSearchRequest.getSearchUrl() != null) { |
957 openUrlInNewTab(mSearchRequest.getSearchUrl()); | 1052 openUrlInNewTab(mSearchRequest.getSearchUrl()); |
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1019 ? entry.getUrl() : searchContentViewCore.getWebContents().getUrl (); | 1114 ? entry.getUrl() : searchContentViewCore.getWebContents().getUrl (); |
1020 return url; | 1115 return url; |
1021 } | 1116 } |
1022 | 1117 |
1023 @Override | 1118 @Override |
1024 public float getSearchContentViewVerticalScroll() { | 1119 public float getSearchContentViewVerticalScroll() { |
1025 return mSearchPanelDelegate.getContentViewCore() != null | 1120 return mSearchPanelDelegate.getContentViewCore() != null |
1026 ? mSearchPanelDelegate.getContentViewCore().computeVerticalScrol lOffset() : -1.f; | 1121 ? mSearchPanelDelegate.getContentViewCore().computeVerticalScrol lOffset() : -1.f; |
1027 } | 1122 } |
1028 | 1123 |
1029 @Override | 1124 /** |
1125 * This is called when the search panel is shown or is hidden. | |
1126 * @param isVisible True if the panel is now visible. | |
1127 */ | |
1030 public void onContentViewVisibilityChanged(boolean isVisible) { | 1128 public void onContentViewVisibilityChanged(boolean isVisible) { |
1031 if (isVisible) { | 1129 if (isVisible) { |
1032 mWereSearchResultsSeen = true; | 1130 mWereSearchResultsSeen = true; |
1033 // If there's no current request, then either a search term resoluti on | 1131 // If there's no current request, then either a search term resoluti on |
1034 // is in progress or we should do a verbatim search now. | 1132 // is in progress or we should do a verbatim search now. |
1035 if (mSearchRequest == null | 1133 if (mSearchRequest == null |
1036 && mPolicy.shouldCreateVerbatimRequest(mSelectionController, | 1134 && mPolicy.shouldCreateVerbatimRequest(mSelectionController, |
1037 mNetworkCommunicator.getBasePageUrl())) { | 1135 mNetworkCommunicator.getBasePageUrl())) { |
1038 mSearchRequest = new ContextualSearchRequest( | 1136 mSearchRequest = new ContextualSearchRequest( |
1039 mSelectionController.getSelectedText()); | 1137 mSelectionController.getSelectedText()); |
1040 mDidLoadResolvedSearchRequest = false; | 1138 mDidLoadResolvedSearchRequest = false; |
1041 } | 1139 } |
1042 if (mSearchRequest != null && !mDidLoadResolvedSearchRequest) { | 1140 if ((mSearchRequest != null && !mDidLoadResolvedSearchRequest) |
1141 || mShouldLoadDelayedSearch) { | |
pedro (no code reviews)
2015/09/23 00:00:12
Could you please include a comment here detailing
mdjones
2015/09/23 00:29:31
Done.
| |
1043 mSearchRequest.setNormalPriority(); | 1142 mSearchRequest.setNormalPriority(); |
1044 loadSearchUrl(); | 1143 loadSearchUrl(); |
1045 } | 1144 } |
1145 mShouldLoadDelayedSearch = true; | |
1046 mPolicy.updateCountersForOpen(); | 1146 mPolicy.updateCountersForOpen(); |
1047 } | 1147 } |
1048 } | 1148 } |
1049 | 1149 |
1050 @Override | 1150 @Override |
1051 public void preserveBasePageSelectionOnNextLossOfFocus() { | 1151 public void preserveBasePageSelectionOnNextLossOfFocus() { |
1052 ContentViewCore basePageContentView = getBaseContentView(); | 1152 ContentViewCore basePageContentView = getBaseContentView(); |
1053 if (basePageContentView != null) { | 1153 if (basePageContentView != null) { |
1054 basePageContentView.preserveSelectionOnNextLossOfFocus(); | 1154 basePageContentView.preserveSelectionOnNextLossOfFocus(); |
1055 } | 1155 } |
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1171 | 1271 |
1172 private native long nativeInit(); | 1272 private native long nativeInit(); |
1173 private native void nativeDestroy(long nativeContextualSearchManager); | 1273 private native void nativeDestroy(long nativeContextualSearchManager); |
1174 private native void nativeStartSearchTermResolutionRequest(long nativeContex tualSearchManager, | 1274 private native void nativeStartSearchTermResolutionRequest(long nativeContex tualSearchManager, |
1175 String selection, boolean useResolvedSearchTerm, ContentViewCore bas eContentViewCore, | 1275 String selection, boolean useResolvedSearchTerm, ContentViewCore bas eContentViewCore, |
1176 boolean maySendBasePageUrl); | 1276 boolean maySendBasePageUrl); |
1177 private native void nativeGatherSurroundingText(long nativeContextualSearchM anager, | 1277 private native void nativeGatherSurroundingText(long nativeContextualSearchM anager, |
1178 String selection, boolean useResolvedSearchTerm, ContentViewCore bas eContentViewCore, | 1278 String selection, boolean useResolvedSearchTerm, ContentViewCore bas eContentViewCore, |
1179 boolean maySendBasePageUrl); | 1279 boolean maySendBasePageUrl); |
1180 } | 1280 } |
OLD | NEW |