blob: 27a3a2118fb5bc1f26bb4ebfbb89f57426b2728f [file] [log] [blame]
// Copyright 2023 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.net.impl;
import android.content.ComponentName;
import android.content.Context;
import android.content.ContextWrapper;
import android.content.pm.PackageManager;
import android.content.pm.ServiceInfo;
import android.os.Bundle;
import org.chromium.base.test.util.PackageManagerWrapper;
import org.chromium.net.ContextInterceptor;
/**
* A {@link ContextInterceptor} that makes the intercepted Context advertise a specific set of
* Cronet manifest meta-data.
*
* @see org.chromium.net.impl.CronetManifest
*/
public final class CronetManifestInterceptor implements ContextInterceptor {
private final Bundle mMetaData;
/**
* @param metaData the meta-data to return in Cronet manifest meta-data queries on intercepted
* Contexts.
*/
public CronetManifestInterceptor(Bundle metaData) {
mMetaData = metaData;
}
@Override
public Context interceptContext(Context context) {
return new ContextWrapper(context) {
@Override
public PackageManager getPackageManager() {
return new PackageManagerWrapper(super.getPackageManager()) {
@Override
public ServiceInfo getServiceInfo(ComponentName componentName, int flags)
throws NameNotFoundException {
if (!componentName.equals(
new ComponentName(
getBaseContext(),
CronetManifest.META_DATA_HOLDER_SERVICE_NAME))) {
return super.getServiceInfo(componentName, flags);
}
ServiceInfo serviceInfo = new ServiceInfo();
serviceInfo.metaData = mMetaData;
return serviceInfo;
}
};
}
};
}
}