Commit 88acaf32 authored by Dan Harrington's avatar Dan Harrington Committed by Commit Bot

Add instrumentation test for prefetch with Feed

Bug: 841516
Change-Id: I53b327330283cc110eb9a23c68753781edfb4218
Reviewed-on: https://chromium-review.googlesource.com/c/1351274
Commit-Queue: Dan H <harringtond@google.com>
Reviewed-by: default avatarCarlos Knippschild <carlosk@chromium.org>
Reviewed-by: default avatarFilip Gorski <fgorski@chromium.org>
Reviewed-by: default avatarSky Malice <skym@chromium.org>
Cr-Commit-Position: refs/heads/master@{#613167}
parent 03439027
...@@ -2059,6 +2059,7 @@ chrome_test_java_sources = [ ...@@ -2059,6 +2059,7 @@ chrome_test_java_sources = [
"javatests/src/org/chromium/chrome/browser/offlinepages/prefetch/PrefetchBackgroundTaskTest.java", "javatests/src/org/chromium/chrome/browser/offlinepages/prefetch/PrefetchBackgroundTaskTest.java",
"javatests/src/org/chromium/chrome/browser/offlinepages/prefetch/PrefetchConfigurationTest.java", "javatests/src/org/chromium/chrome/browser/offlinepages/prefetch/PrefetchConfigurationTest.java",
"javatests/src/org/chromium/chrome/browser/offlinepages/prefetch/PrefetchFlowTest.java", "javatests/src/org/chromium/chrome/browser/offlinepages/prefetch/PrefetchFlowTest.java",
"javatests/src/org/chromium/chrome/browser/offlinepages/prefetch/PrefetchFeedFlowTest.java",
"javatests/src/org/chromium/chrome/browser/offlinepages/prefetch/TestOfflinePageService.java", "javatests/src/org/chromium/chrome/browser/offlinepages/prefetch/TestOfflinePageService.java",
"javatests/src/org/chromium/chrome/browser/offlinepages/prefetch/TestSuggestionsService.java", "javatests/src/org/chromium/chrome/browser/offlinepages/prefetch/TestSuggestionsService.java",
"javatests/src/org/chromium/chrome/browser/omaha/ExponentialBackoffSchedulerTest.java", "javatests/src/org/chromium/chrome/browser/omaha/ExponentialBackoffSchedulerTest.java",
......
...@@ -49,7 +49,9 @@ import java.util.concurrent.TimeUnit; ...@@ -49,7 +49,9 @@ import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException; import java.util.concurrent.TimeoutException;
/** /**
* Instrumentation tests for Prefetch. * Instrumentation tests for Prefetch, using the Zine as the suggestion provider.
* Note: this test will eventually be removed along with Zine, and is replaced by
* PrefetchFeedFlowTest.
*/ */
@RunWith(ChromeJUnit4ClassRunner.class) @RunWith(ChromeJUnit4ClassRunner.class)
@RetryOnFailure @RetryOnFailure
......
...@@ -18,8 +18,12 @@ public class PrefetchTestBridge { ...@@ -18,8 +18,12 @@ public class PrefetchTestBridge {
public static void skipNTPSuggestionsAPIKeyCheck() { public static void skipNTPSuggestionsAPIKeyCheck() {
nativeSkipNTPSuggestionsAPIKeyCheck(); nativeSkipNTPSuggestionsAPIKeyCheck();
} }
public static void insertIntoCachedImageFetcher(String url, byte[] imageData) {
nativeInsertIntoCachedImageFetcher(url, imageData);
}
static native void nativeEnableLimitlessPrefetching(boolean enabled); static native void nativeEnableLimitlessPrefetching(boolean enabled);
static native boolean nativeIsLimitlessPrefetchingEnabled(); static native boolean nativeIsLimitlessPrefetchingEnabled();
static native void nativeSkipNTPSuggestionsAPIKeyCheck(); static native void nativeSkipNTPSuggestionsAPIKeyCheck();
static native void nativeInsertIntoCachedImageFetcher(String url, byte[] imageData);
} }
...@@ -48,6 +48,7 @@ public class TestOfflinePageService { ...@@ -48,6 +48,7 @@ public class TestOfflinePageService {
private ArrayList<String> mIncompleteOperations = new ArrayList<String>(); private ArrayList<String> mIncompleteOperations = new ArrayList<String>();
// Determines how this fake service responds to requests for pages. // Determines how this fake service responds to requests for pages.
private HashMap<String, PageBehavior> mPageBehaviors = new HashMap<String, PageBehavior>(); private HashMap<String, PageBehavior> mPageBehaviors = new HashMap<String, PageBehavior>();
private StatusOuterClass.Code mDefaultGenerateStatus = StatusOuterClass.Code.OK;
private static int sNextOperationIndex = 1; private static int sNextOperationIndex = 1;
private static String newOperationName() { private static String newOperationName() {
...@@ -74,9 +75,15 @@ public class TestOfflinePageService { ...@@ -74,9 +75,15 @@ public class TestOfflinePageService {
mPageBehaviors.put(url, behavior); mPageBehaviors.put(url, behavior);
} }
public void setDefaultGenerateStatus(StatusOuterClass.Code status) {
mDefaultGenerateStatus = status;
}
public PageBehavior getPageBehavior(String url) { public PageBehavior getPageBehavior(String url) {
if (!mPageBehaviors.containsKey(url)) { if (!mPageBehaviors.containsKey(url)) {
mPageBehaviors.put(url, new PageBehavior()); PageBehavior behavior = new PageBehavior();
behavior.generateStatus = mDefaultGenerateStatus;
mPageBehaviors.put(url, behavior);
} }
return mPageBehaviors.get(url); return mPageBehaviors.get(url);
} }
...@@ -94,9 +101,9 @@ public class TestOfflinePageService { ...@@ -94,9 +101,9 @@ public class TestOfflinePageService {
// Figure out what kind of request this is, and dispatch the appropriate method. // Figure out what kind of request this is, and dispatch the appropriate method.
if (request.getMethod().equals("POST") if (request.getMethod().equals("POST")
&& request.getURI().startsWith("/v1:GeneratePageBundle")) { && request.getURI().startsWith("/v1:GeneratePageBundle")) {
GeneratePageBundleRequest bundleRequest = null;
try { try {
bundleRequest = GeneratePageBundleRequest.parseFrom(request.getBody()); GeneratePageBundleRequest bundleRequest =
GeneratePageBundleRequest.parseFrom(request.getBody());
handleGeneratePageBundle(bundleRequest, stream); handleGeneratePageBundle(bundleRequest, stream);
GeneratePageBundleCalled.notifyCalled(); GeneratePageBundleCalled.notifyCalled();
return true; return true;
......
...@@ -3,8 +3,14 @@ ...@@ -3,8 +3,14 @@
// found in the LICENSE file. // found in the LICENSE file.
#include "base/android/jni_android.h" #include "base/android/jni_android.h"
#include "base/android/jni_array.h"
#include "base/android/jni_string.h"
#include "base/android/jni_utils.h" #include "base/android/jni_utils.h"
#include "chrome/browser/cached_image_fetcher/cached_image_fetcher_service_factory.h"
#include "chrome/browser/offline_pages/prefetch/prefetch_service_factory.h" #include "chrome/browser/offline_pages/prefetch/prefetch_service_factory.h"
#include "chrome/browser/profiles/profile_manager.h"
#include "components/image_fetcher/core/cache/image_cache.h"
#include "components/image_fetcher/core/cached_image_fetcher_service.h"
#include "components/ntp_snippets/remote/remote_suggestions_fetcher_impl.h" #include "components/ntp_snippets/remote/remote_suggestions_fetcher_impl.h"
#include "components/offline_pages/core/offline_page_feature.h" #include "components/offline_pages/core/offline_page_feature.h"
#include "jni/PrefetchTestBridge_jni.h" #include "jni/PrefetchTestBridge_jni.h"
...@@ -34,5 +40,24 @@ JNI_EXPORT void JNI_PrefetchTestBridge_SkipNTPSuggestionsAPIKeyCheck( ...@@ -34,5 +40,24 @@ JNI_EXPORT void JNI_PrefetchTestBridge_SkipNTPSuggestionsAPIKeyCheck(
set_skip_api_key_check_for_testing(); set_skip_api_key_check_for_testing();
} }
JNI_EXPORT void JNI_PrefetchTestBridge_InsertIntoCachedImageFetcher(
JNIEnv* env,
const JavaParamRef<jstring>& j_url,
const JavaParamRef<jbyteArray>& j_image_data) {
Profile* profile = ProfileManager::GetLastUsedProfile();
DCHECK(profile);
image_fetcher::CachedImageFetcherService* service =
image_fetcher::CachedImageFetcherServiceFactory::GetForBrowserContext(
profile);
DCHECK(service);
scoped_refptr<image_fetcher::ImageCache> cache =
service->ImageCacheForTesting();
std::string url = base::android::ConvertJavaStringToUTF8(env, j_url);
std::string image_data;
base::android::JavaByteArrayToString(env, j_image_data, &image_data);
cache->SaveImage(url, image_data);
}
} // namespace prefetch } // namespace prefetch
} // namespace offline_pages } // namespace offline_pages
...@@ -36,4 +36,9 @@ CachedImageFetcherService::CreateCachedImageFetcher() { ...@@ -36,4 +36,9 @@ CachedImageFetcherService::CreateCachedImageFetcher() {
image_cache_, read_only_); image_cache_, read_only_);
} }
scoped_refptr<ImageCache> CachedImageFetcherService::ImageCacheForTesting()
const {
return image_cache_;
}
} // namespace image_fetcher } // namespace image_fetcher
...@@ -40,6 +40,8 @@ class CachedImageFetcherService : public KeyedService { ...@@ -40,6 +40,8 @@ class CachedImageFetcherService : public KeyedService {
// Create an instance of CachedImageFetcher based on the ImageCache. // Create an instance of CachedImageFetcher based on the ImageCache.
std::unique_ptr<CachedImageFetcher> CreateCachedImageFetcher(); std::unique_ptr<CachedImageFetcher> CreateCachedImageFetcher();
scoped_refptr<ImageCache> ImageCacheForTesting() const;
private: private:
CreateImageDecoderCallback create_image_decoder_callback_; CreateImageDecoderCallback create_image_decoder_callback_;
scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory_; scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory_;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment