| Index: content/public/android/java/src/org/chromium/content/browser/InterfaceRegistrar.java
 | 
| diff --git a/content/public/android/java/src/org/chromium/content/browser/InterfaceRegistrar.java b/content/public/android/java/src/org/chromium/content/browser/InterfaceRegistrar.java
 | 
| index 1840a2dd4df075e1a9c72f243ddb8ce7795c9e5a..0bd9b5457963c99b05a896c79e56bfb823c5ef98 100644
 | 
| --- a/content/public/android/java/src/org/chromium/content/browser/InterfaceRegistrar.java
 | 
| +++ b/content/public/android/java/src/org/chromium/content/browser/InterfaceRegistrar.java
 | 
| @@ -4,15 +4,20 @@
 | 
|  
 | 
|  package org.chromium.content.browser;
 | 
|  
 | 
| +import android.app.Activity;
 | 
|  import android.content.Context;
 | 
|  
 | 
|  import org.chromium.base.annotations.CalledByNative;
 | 
|  import org.chromium.base.annotations.JNINamespace;
 | 
|  import org.chromium.content.browser.InterfaceRegistry.ImplementationFactory;
 | 
| +import org.chromium.content_public.browser.WebContents;
 | 
|  import org.chromium.device.battery.BatteryMonitorFactory;
 | 
| +import org.chromium.device.nfc.NfcImpl;
 | 
|  import org.chromium.device.vibration.VibrationManagerImpl;
 | 
|  import org.chromium.mojom.device.BatteryMonitor;
 | 
|  import org.chromium.mojom.device.VibrationManager;
 | 
| +import org.chromium.mojom.device.nfc.Nfc;
 | 
| +import org.chromium.ui.base.WindowAndroid;
 | 
|  
 | 
|  /**
 | 
|   * Registers interfaces exposed by the browser in the given registry.
 | 
| @@ -49,6 +54,54 @@ class InterfaceRegistrar {
 | 
|          }
 | 
|      }
 | 
|  
 | 
| +    private static class NfcImplementationFactory implements ImplementationFactory<Nfc> {
 | 
| +        private final Context mContext;
 | 
| +        private final WebContents mContents;
 | 
| +
 | 
| +        NfcImplementationFactory(Context context, WebContents contents) {
 | 
| +            mContext = context;
 | 
| +            mContents = contents;
 | 
| +        }
 | 
| +
 | 
| +        private static class ContextAwareNfcImpl extends NfcImpl implements
 | 
| +                WindowAndroidChangedObserver {
 | 
| +            private final ContentViewCore mContextViewCore;
 | 
| +
 | 
| +            ContextAwareNfcImpl(Context context, ContentViewCore contextViewCore) {
 | 
| +                super(context);
 | 
| +                mContextViewCore = contextViewCore;
 | 
| +                if (mContextViewCore != null) {
 | 
| +                    mContextViewCore.addWindowAndroidChangedObserver(this);
 | 
| +                    if (mContextViewCore.getWindowAndroid() != null) {
 | 
| +                        setActivity(mContextViewCore.getWindowAndroid().getActivity().get());
 | 
| +                    }
 | 
| +                }
 | 
| +            }
 | 
| +
 | 
| +            @Override
 | 
| +            public void close() {
 | 
| +                super.close();
 | 
| +                if (mContextViewCore != null) {
 | 
| +                    mContextViewCore.removeWindowAndroidChangedObserver(this);
 | 
| +                }
 | 
| +            }
 | 
| +
 | 
| +            @Override
 | 
| +            public void onWindowAndroidChanged(WindowAndroid newWindowAndroid) {
 | 
| +                Activity activity = null;
 | 
| +                if (newWindowAndroid != null) {
 | 
| +                    activity = newWindowAndroid.getActivity().get();
 | 
| +                }
 | 
| +                setActivity(activity);
 | 
| +            }
 | 
| +        }
 | 
| +
 | 
| +        @Override
 | 
| +        public Nfc createImpl() {
 | 
| +            return new ContextAwareNfcImpl(mContext, ContentViewCore.fromWebContents(mContents));
 | 
| +        }
 | 
| +    }
 | 
| +
 | 
|      @CalledByNative
 | 
|      static void exposeInterfacesToRenderer(InterfaceRegistry registry, Context applicationContext) {
 | 
|          assert applicationContext != null;
 | 
| @@ -57,10 +110,13 @@ class InterfaceRegistrar {
 | 
|      }
 | 
|  
 | 
|      @CalledByNative
 | 
| -    static void exposeInterfacesToFrame(InterfaceRegistry registry, Context applicationContext) {
 | 
| +    static void exposeInterfacesToFrame(InterfaceRegistry registry,
 | 
| +            Context applicationContext, WebContents contents) {
 | 
|          assert applicationContext != null;
 | 
|          registry.addInterface(VibrationManager.MANAGER,
 | 
|                  new VibrationManagerImplementationFactory(applicationContext));
 | 
| +        registry.addInterface(Nfc.MANAGER,
 | 
| +                new NfcImplementationFactory(applicationContext, contents));
 | 
|          // TODO(avayvod): Register the PresentationService implementation here.
 | 
|      }
 | 
|  }
 | 
| 
 |