| Index: chrome/android/javatests/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchFakeServer.java
|
| diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchFakeServer.java b/chrome/android/javatests/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchFakeServer.java
|
| index 2cbed012a1193a970fe7d140bdc6df4df16a83c1..de6f1c71c8d3f57d86cca42c9bdbfc2529eeb99f 100644
|
| --- a/chrome/android/javatests/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchFakeServer.java
|
| +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchFakeServer.java
|
| @@ -10,14 +10,9 @@
|
| import org.chromium.chrome.browser.compositor.bottombar.OverlayContentProgressObserver;
|
| import org.chromium.chrome.browser.compositor.bottombar.OverlayPanelContent;
|
| import org.chromium.chrome.browser.compositor.bottombar.OverlayPanelContentFactory;
|
| -import org.chromium.content.browser.ContentViewCore;
|
|
|
| import java.net.MalformedURLException;
|
| import java.net.URL;
|
| -import java.util.ArrayList;
|
| -import java.util.HashMap;
|
| -import java.util.Map;
|
| -import java.util.concurrent.TimeoutException;
|
|
|
| import javax.annotation.Nullable;
|
|
|
| @@ -31,316 +26,28 @@
|
| class ContextualSearchFakeServer
|
| implements ContextualSearchNetworkCommunicator, OverlayPanelContentFactory {
|
|
|
| - private final ContextualSearchPolicy mPolicy;
|
| -
|
| - private final ContextualSearchManagerTest mManagerTest;
|
| private final ContextualSearchNetworkCommunicator mBaseManager;
|
|
|
| private final OverlayContentDelegate mContentDelegate;
|
| private final OverlayContentProgressObserver mProgressObserver;
|
| private final ChromeActivity mActivity;
|
|
|
| - private final ArrayList<String> mRemovedUrls = new ArrayList<String>();
|
| -
|
| - private final Map<String, FakeTapSearch> mFakeTapSearches = new HashMap<>();
|
| - private final Map<String, FakeLongPressSearch> mFakeLongPressSearches = new HashMap<>();
|
| -
|
| - private FakeTapSearch mActiveFakeTapSearch;
|
| + private OverlayPanelContent mContent;
|
|
|
| private String mLoadedUrl;
|
| private int mLoadedUrlCount;
|
| -
|
| private String mSearchTermRequested;
|
| private boolean mShouldUseHttps;
|
| -
|
| - private boolean mDidEverCallContentViewCoreOnShow;
|
| -
|
| - //============================================================================================
|
| - // FakeSearch
|
| - //============================================================================================
|
| -
|
| - /**
|
| - * Abstract class that represents a fake contextual search.
|
| - */
|
| - public abstract class FakeSearch {
|
| - private final String mNodeId;
|
| -
|
| - /**
|
| - * @param nodeId The id of the node where the touch event will be simulated.
|
| - */
|
| - FakeSearch(String nodeId) {
|
| - mNodeId = nodeId;
|
| - }
|
| -
|
| - /**
|
| - * Simulates a fake search.
|
| - *
|
| - * @throws InterruptedException
|
| - * @throws TimeoutException
|
| - */
|
| - public abstract void simulate() throws InterruptedException, TimeoutException;
|
| -
|
| - /**
|
| - * @return The search term that will be used in the contextual search.
|
| - */
|
| - public abstract String getSearchTerm();
|
| -
|
| - /**
|
| - * @return The id of the node where the touch event will be simulated.
|
| - */
|
| - public String getNodeId() {
|
| - return mNodeId;
|
| - }
|
| - }
|
| -
|
| - //============================================================================================
|
| - // FakeLongPressSearch
|
| - //============================================================================================
|
| -
|
| - /**
|
| - * Class that represents a fake long-press triggered contextual search.
|
| - */
|
| - public class FakeLongPressSearch extends FakeSearch {
|
| - private final String mSearchTerm;
|
| -
|
| - /**
|
| - * @param nodeId The id of the node where the touch event will be simulated.
|
| - * @param searchTerm The expected text that the node should contain.
|
| - */
|
| - FakeLongPressSearch(String nodeId, String searchTerm) {
|
| - super(nodeId);
|
| -
|
| - mSearchTerm = searchTerm;
|
| - }
|
| -
|
| - @Override
|
| - public void simulate() throws InterruptedException, TimeoutException {
|
| - mManagerTest.longPressNode(getNodeId());
|
| - mManagerTest.waitForSelectionToBe(mSearchTerm);
|
| - }
|
| -
|
| - @Override
|
| - public String getSearchTerm() {
|
| - return mSearchTerm;
|
| - }
|
| - }
|
| -
|
| - //============================================================================================
|
| - // FakeTapSearch
|
| - //============================================================================================
|
| -
|
| - /**
|
| - * Class that represents a fake tap triggered contextual search.
|
| - */
|
| - public class FakeTapSearch extends FakeSearch {
|
| - private final boolean mIsNetworkUnavailable;
|
| - private final int mResponseCode;
|
| - private final String mSearchTerm;
|
| - private final String mDisplayText;
|
| - private final String mAlternateTerm;
|
| - private final boolean mDoPreventPreload;
|
| - private final int mStartAdjust;
|
| - private final int mEndAdjust;
|
| -
|
| - boolean mDidStartResolution;
|
| - boolean mDidFinishResolution;
|
| -
|
| - /**
|
| - * @param nodeId The id of the node where the touch event will be simulated.
|
| - * @param isNetworkUnavailable Whether the network is unavailable.
|
| - * @param responseCode The HTTP response code of the resolution.
|
| - * @param searchTerm The resolved search term.
|
| - * @param displayText The display text.
|
| - * @param alternateTerm The alternate text.
|
| - * @param doPreventPreload Whether search preload should be prevented.
|
| - * @param startAdjust The start adjustment of the selection.
|
| - * @param endAdjudst The end adjustment of the selection.
|
| - */
|
| - FakeTapSearch(String nodeId, boolean isNetworkUnavailable, int responseCode,
|
| - String searchTerm, String displayText, String alternateTerm,
|
| - boolean doPreventPreload, int startAdjust, int endAdjudst) {
|
| - super(nodeId);
|
| -
|
| - mIsNetworkUnavailable = isNetworkUnavailable;
|
| - mResponseCode = responseCode;
|
| - mSearchTerm = searchTerm;
|
| - mDisplayText = displayText;
|
| - mAlternateTerm = alternateTerm;
|
| - mDoPreventPreload = doPreventPreload;
|
| - mStartAdjust = startAdjust;
|
| - mEndAdjust = endAdjudst;
|
| - }
|
| -
|
| - @Override
|
| - public void simulate() throws InterruptedException, TimeoutException {
|
| - mActiveFakeTapSearch = this;
|
| -
|
| - // When a resolution is needed, the simulation does not start until the system
|
| - // requests one, and it does not finish until the simulated resolution happens.
|
| - mDidStartResolution = false;
|
| - mDidFinishResolution = false;
|
| -
|
| - mManagerTest.clickNode(getNodeId());
|
| - mManagerTest.waitForSelectionToBe(mSearchTerm);
|
| -
|
| - if (mPolicy.shouldPreviousTapResolve(getBasePageUrl())) {
|
| - // Now wait for the Search Term Resolution to start.
|
| - mManagerTest.waitForSearchTermResolutionToStart(this);
|
| -
|
| - // Simulate a Search Term Resolution.
|
| - simulateSearchTermResolution();
|
| -
|
| - // Now wait for the simulated Search Term Resolution to finish.
|
| - mManagerTest.waitForSearchTermResolutionToFinish(this);
|
| - } else {
|
| - mDidFinishResolution = true;
|
| - }
|
| - }
|
| -
|
| - @Override
|
| - public String getSearchTerm() {
|
| - return mSearchTerm;
|
| - }
|
| -
|
| - /**
|
| - * Notifies that a Search Term Resolution has started.
|
| - */
|
| - public void notifySearchTermResolutionStarted() {
|
| - mDidStartResolution = true;
|
| - }
|
| -
|
| - /**
|
| - * @return Whether the Search Term Resolution has started.
|
| - */
|
| - public boolean didStartSearchTermResolution() {
|
| - return mDidStartResolution;
|
| - }
|
| -
|
| - /**
|
| - * @return Whether the Search Term Resolution has finished.
|
| - */
|
| - public boolean didFinishSearchTermResolution() {
|
| - return mDidFinishResolution;
|
| - }
|
| -
|
| - /**
|
| - * Simulates a Search Term Resolution.
|
| - */
|
| - private void simulateSearchTermResolution() throws InterruptedException, TimeoutException {
|
| - mManagerTest.runOnMainSync(getRunnable());
|
| - }
|
| -
|
| - /**
|
| - * @return A Runnable to handle the fake Search Term Resolution.
|
| - */
|
| - private Runnable getRunnable() {
|
| - return new Runnable() {
|
| - @Override
|
| - public void run() {
|
| - if (!mDidFinishResolution) {
|
| - handleSearchTermResolutionResponse(
|
| - mIsNetworkUnavailable, mResponseCode, mSearchTerm, mDisplayText,
|
| - mAlternateTerm, mDoPreventPreload, mStartAdjust, mEndAdjust);
|
| -
|
| - mActiveFakeTapSearch = null;
|
| - mDidFinishResolution = true;
|
| - }
|
| - }
|
| - };
|
| - }
|
| - }
|
| -
|
| - //============================================================================================
|
| - // OverlayPanelContentWrapper
|
| - //============================================================================================
|
| -
|
| - /**
|
| - * A wrapper around OverlayPanelContent to be used during tests.
|
| - */
|
| - public class OverlayPanelContentWrapper extends OverlayPanelContent {
|
| - OverlayPanelContentWrapper(OverlayContentDelegate contentDelegate,
|
| - OverlayContentProgressObserver progressObserver, ChromeActivity activity) {
|
| - super(contentDelegate, progressObserver, activity);
|
| - }
|
| -
|
| - @Override
|
| - public void loadUrl(String url) {
|
| - mLoadedUrl = url;
|
| - mLoadedUrlCount++;
|
| - super.loadUrl(url);
|
| - }
|
| -
|
| - @Override
|
| - public void removeLastHistoryEntry(String url, long timeInMs) {
|
| - // Override to prevent call to native code.
|
| - mRemovedUrls.add(url);
|
| - }
|
| -
|
| - @Override
|
| - protected ContentViewCore createContentViewCore(ChromeActivity activity) {
|
| - return new ContentViewCoreWrapper(activity);
|
| - }
|
| - }
|
| -
|
| - //============================================================================================
|
| - // ContentViewCoreWrapper
|
| - //============================================================================================
|
| -
|
| - /**
|
| - * A wrapper around ContentViewCore to be used during tests.
|
| - */
|
| - public class ContentViewCoreWrapper extends ContentViewCore {
|
| - private boolean mIsVisible;
|
| -
|
| - ContentViewCoreWrapper(ChromeActivity activity) {
|
| - super(activity);
|
| - }
|
| -
|
| - @Override
|
| - public void destroy() {
|
| - super.destroy();
|
| - mIsVisible = false;
|
| - }
|
| -
|
| - @Override
|
| - public void onShow() {
|
| - super.onShow();
|
| - mIsVisible = true;
|
| - mDidEverCallContentViewCoreOnShow = true;
|
| - }
|
| -
|
| - @Override
|
| - public void onHide() {
|
| - super.onHide();
|
| - mIsVisible = false;
|
| - }
|
| -
|
| - /**
|
| - * @return Whether the ContentViewCore is visible.
|
| - */
|
| - public boolean isVisible() {
|
| - return mIsVisible;
|
| - }
|
| - }
|
| -
|
| - //============================================================================================
|
| - // ContextualSearchFakeServer
|
| - //============================================================================================
|
|
|
| /**
|
| * Constructs a fake Contextual Search server that will callback to the given baseManager.
|
| * @param baseManager The manager to call back to for server responses.
|
| */
|
| @VisibleForTesting
|
| - ContextualSearchFakeServer(ContextualSearchPolicy policy,
|
| - ContextualSearchManagerTest managerTest,
|
| - ContextualSearchNetworkCommunicator baseManager,
|
| + ContextualSearchFakeServer(ContextualSearchNetworkCommunicator baseManager,
|
| OverlayContentDelegate contentDelegate,
|
| OverlayContentProgressObserver progressObserver,
|
| ChromeActivity activity) {
|
| - mPolicy = policy;
|
| -
|
| - mManagerTest = managerTest;
|
| mBaseManager = baseManager;
|
|
|
| mContentDelegate = contentDelegate;
|
| @@ -350,84 +57,32 @@
|
|
|
| @Override
|
| public OverlayPanelContent createNewOverlayPanelContent() {
|
| - return new OverlayPanelContentWrapper(mContentDelegate, mProgressObserver, mActivity);
|
| + mContent = new OverlayPanelContent(mContentDelegate, mProgressObserver, mActivity) {
|
| + @Override
|
| + public void loadUrl(String url) {
|
| + mLoadedUrl = url;
|
| + mLoadedUrlCount++;
|
| + super.loadUrl(url);
|
| + }
|
| +
|
| + @Override
|
| + public void removeLastHistoryEntry(String url, long timeInMs) {
|
| + // Override to prevent call to native code.
|
| + }
|
| + };
|
| +
|
| + return mContent;
|
| }
|
|
|
| - /**
|
| - * @return The search term requested, or {@code null} if no search term was requested.
|
| - */
|
| @VisibleForTesting
|
| - String getSearchTermRequested() {
|
| - return mSearchTermRequested;
|
| + public boolean didCreateContentView() {
|
| + return mContent != null ? mContent.didCreateContentView() : false;
|
| }
|
| -
|
| - /**
|
| - * @return the loaded search result page URL if any was requested.
|
| - */
|
| - @VisibleForTesting
|
| - String getLoadedUrl() {
|
| - return mLoadedUrl;
|
| - }
|
| -
|
| - /**
|
| - * @return The number of times we loaded a URL in the Content View.
|
| - */
|
| - @VisibleForTesting
|
| - int getLoadedUrlCount() {
|
| - return mLoadedUrlCount;
|
| - }
|
| -
|
| - /**
|
| - * Sets whether to return an HTTPS URL instead of HTTP, from {@link #getBasePageUrl}.
|
| - */
|
| - @VisibleForTesting
|
| - void setShouldUseHttps(boolean setting) {
|
| - mShouldUseHttps = setting;
|
| - }
|
| -
|
| - /**
|
| - * @return
|
| - */
|
| - @VisibleForTesting
|
| - boolean didEverCallContentViewCoreOnShow() {
|
| - return mDidEverCallContentViewCoreOnShow;
|
| - }
|
| -
|
| - /**
|
| - * Resets the fake server's member data.
|
| - */
|
| - @VisibleForTesting
|
| - void reset() {
|
| - mLoadedUrl = null;
|
| - mSearchTermRequested = null;
|
| - mShouldUseHttps = false;
|
| - mLoadedUrlCount = 0;
|
| - }
|
| -
|
| - //============================================================================================
|
| - // History Removal Helpers
|
| - //============================================================================================
|
| -
|
| - /**
|
| - * @param url The URL to be checked.
|
| - * @return Whether the given URL was removed from history.
|
| - */
|
| - public boolean hasRemovedUrl(String url) {
|
| - return mRemovedUrls.contains(url);
|
| - }
|
| -
|
| - //============================================================================================
|
| - // ContextualSearchNetworkCommunicator
|
| - //============================================================================================
|
|
|
| @Override
|
| public void startSearchTermResolutionRequest(String selection) {
|
| mLoadedUrl = null;
|
| mSearchTermRequested = selection;
|
| -
|
| - if (mActiveFakeTapSearch != null) {
|
| - mActiveFakeTapSearch.notifySearchTermResolutionStarted();
|
| - }
|
| }
|
|
|
| @Override
|
| @@ -453,58 +108,47 @@
|
| return baseUrl;
|
| }
|
|
|
| - //============================================================================================
|
| - // Fake Searches Helpers
|
| - //============================================================================================
|
| -
|
| /**
|
| - * Register fake searches that can be used in tests. Each fake search takes a node ID, which
|
| - * represents the DOM node that will be touched. The node ID is also used as an ID for the
|
| - * fake search of a given type (LongPress or Tap). This means that if you need different
|
| - * behaviors you need to add new DOM nodes with different IDs in the test's HTML file.
|
| + * @return The search term requested, or {@code null} if no search term was requested.
|
| */
|
| - public void registerFakeSearches() {
|
| - registerFakeLongPressSearch(new FakeLongPressSearch("search", "Search"));
|
| - registerFakeLongPressSearch(new FakeLongPressSearch("term", "Term"));
|
| - registerFakeLongPressSearch(new FakeLongPressSearch("resolution", "Resolution"));
|
| -
|
| - registerFakeTapSearch(new FakeTapSearch("search", false, 200,
|
| - "Search", "Search", "alternate-term", false, 0, 0));
|
| - registerFakeTapSearch(new FakeTapSearch("term", false, 200,
|
| - "Term", "Term", "alternate-term", false, 0, 0));
|
| - registerFakeTapSearch(new FakeTapSearch("resolution", false, 200,
|
| - "Resolution", "Resolution", "alternate-term", false, 0, 0));
|
| + @VisibleForTesting
|
| + String getSearchTermRequested() {
|
| + return mSearchTermRequested;
|
| }
|
|
|
| /**
|
| - * @param id The ID of the FakeLongPressSearch.
|
| - * @return The FakeLongPressSearch with the given ID.
|
| + * @return the loaded search result page URL if any was requested.
|
| */
|
| - public FakeLongPressSearch getFakeLongPressSearch(String id) {
|
| - return mFakeLongPressSearches.get(id);
|
| + @VisibleForTesting
|
| + String getLoadedUrl() {
|
| + return mLoadedUrl;
|
| }
|
|
|
| /**
|
| - * @param id The ID of the FakeTapSearch.
|
| - * @return The FakeTapSearch with the given ID.
|
| + * @return The number of times we loaded a URL in the Content View.
|
| */
|
| - public FakeTapSearch getFakeTapSearch(String id) {
|
| - return mFakeTapSearches.get(id);
|
| + @VisibleForTesting
|
| + int loadedUrlCount() {
|
| + return mLoadedUrlCount;
|
| }
|
|
|
| /**
|
| - * Register the FakeLongPressSearch.
|
| - * @param fakeSearch The FakeLongPressSearch to be registered.
|
| + * Sets whether to return an HTTPS URL instead of HTTP, from {@link #getBasePageUrl}.
|
| */
|
| - private void registerFakeLongPressSearch(FakeLongPressSearch fakeSearch) {
|
| - mFakeLongPressSearches.put(fakeSearch.getNodeId(), fakeSearch);
|
| + @VisibleForTesting
|
| + void setShouldUseHttps(boolean setting) {
|
| + mShouldUseHttps = setting;
|
| }
|
|
|
| /**
|
| - * Register the FakeTapSearch.
|
| - * @param fakeSearch The FakeTapSearch to be registered.
|
| + * Resets the fake server's member data.
|
| */
|
| - private void registerFakeTapSearch(FakeTapSearch fakeSearch) {
|
| - mFakeTapSearches.put(fakeSearch.getNodeId(), fakeSearch);
|
| + @VisibleForTesting
|
| + void reset() {
|
| + mContent = null;
|
| + mLoadedUrl = null;
|
| + mSearchTermRequested = null;
|
| + mShouldUseHttps = false;
|
| + mLoadedUrlCount = 0;
|
| }
|
| }
|
|
|