• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2023 The Chromium Authors
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 package org.chromium.net.impl;
6 
7 import android.content.ComponentName;
8 import android.content.Context;
9 import android.content.ContextWrapper;
10 import android.content.pm.PackageManager;
11 import android.content.pm.ServiceInfo;
12 import android.os.Bundle;
13 
14 import org.chromium.base.test.util.PackageManagerWrapper;
15 import org.chromium.net.ContextInterceptor;
16 
17 /**
18  * A {@link ContextInterceptor} that makes the intercepted Context advertise a specific set of
19  * Cronet manifest meta-data.
20  *
21  * @see org.chromium.net.impl.CronetManifest
22  */
23 public final class CronetManifestInterceptor implements ContextInterceptor {
24     private final Bundle mMetaData;
25 
26     /**
27      * @param metaData the meta-data to return in Cronet manifest meta-data queries on intercepted
28      * Contexts.
29      */
CronetManifestInterceptor(Bundle metaData)30     public CronetManifestInterceptor(Bundle metaData) {
31         mMetaData = metaData;
32     }
33 
34     @Override
interceptContext(Context context)35     public Context interceptContext(Context context) {
36         return new ContextWrapper(context) {
37             @Override
38             public PackageManager getPackageManager() {
39                 return new PackageManagerWrapper(super.getPackageManager()) {
40                     @Override
41                     public ServiceInfo getServiceInfo(ComponentName componentName, int flags)
42                             throws NameNotFoundException {
43                         if (!componentName.equals(
44                                 new ComponentName(
45                                         getBaseContext(),
46                                         CronetManifest.META_DATA_HOLDER_SERVICE_NAME))) {
47                             return super.getServiceInfo(componentName, flags);
48                         }
49 
50                         ServiceInfo serviceInfo = new ServiceInfo();
51                         serviceInfo.metaData = mMetaData;
52                         return serviceInfo;
53                     }
54                 };
55             }
56         };
57     }
58 }
59