diff --git a/DEPS b/DEPS
index db4d7c4f..22085f8 100644
--- a/DEPS
+++ b/DEPS
@@ -172,11 +172,11 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling Skia
   # and whatever else without interference from each other.
-  'skia_revision': '9c0c92b2db869727fd28077960e004a950bf9616',
+  'skia_revision': '61169e9c479430756c2ce6731da4037c524d6c87',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling V8
   # and whatever else without interference from each other.
-  'v8_revision': '7b44da5f0241b6af38971d173590d7fa4cd63ee0',
+  'v8_revision': '96a59c934ffc3b193ffeccb90ad315a48923cff8',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling swarming_client
   # and whatever else without interference from each other.
@@ -184,15 +184,15 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling ANGLE
   # and whatever else without interference from each other.
-  'angle_revision': '04e074d1aae0aa1c3d9990ca147b17d5b6f96529',
+  'angle_revision': '34e5a96edc3ee51a607870d31fbfb9d10459df6f',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling SwiftShader
   # and whatever else without interference from each other.
-  'swiftshader_revision': 'afc52b0b26d7d34baee77ce7b75aa3c5625abca9',
+  'swiftshader_revision': 'a59e70ec48ac74425ea5309158aebf41ccc80a0a',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling PDFium
   # and whatever else without interference from each other.
-  'pdfium_revision': 'e87972e30da4cb87f0620baf32cea698f43dd093',
+  'pdfium_revision': 'f20323a4a264c34a2748dfb3c9960a7187b7ba86',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling BoringSSL
   # and whatever else without interference from each other.
@@ -223,7 +223,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling freetype
   # and whatever else without interference from each other.
-  'freetype_revision': '3aaae716b25bd2d3232e279bc05af65cff446dd9',
+  'freetype_revision': 'd4f9c249893a146b0c94a152f7674e288d181f95',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling HarfBuzz
   # and whatever else without interference from each other.
@@ -235,7 +235,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling catapult
   # and whatever else without interference from each other.
-  'catapult_revision': '56b1f53bcd83d9163cd56f968c43630c33e59052',
+  'catapult_revision': '731aba0ef8897570198ffd19c60e9a2a40acdd98',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling libFuzzer
   # and whatever else without interference from each other.
@@ -243,7 +243,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling devtools-frontend
   # and whatever else without interference from each other.
-  'devtools_frontend_revision': '204f9ad496e5f930727c5f7836a91ae79afe72cc',
+  'devtools_frontend_revision': 'bc1e7ba9a982dae2d4a96fa5998b4765c442a2fc',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling libprotobuf-mutator
   # and whatever else without interference from each other.
@@ -303,7 +303,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling feed
   # and whatever else without interference from each other.
-  'dawn_revision': '8e9c3f663ccd270b8f047afe668e7cbc15e11bba',
+  'dawn_revision': 'e9356045a4e020f4292cdd75fc636289322d17e2',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling feed
   # and whatever else without interference from each other.
@@ -862,7 +862,7 @@
 
   # Build tools for Chrome OS. Note: This depends on third_party/pyelftools.
   'src/third_party/chromite': {
-      'url': Var('chromium_git') + '/chromiumos/chromite.git' + '@' + '78ae849159ac9463eb9ca21a7587ef8abec0d6f1',
+      'url': Var('chromium_git') + '/chromiumos/chromite.git' + '@' + 'bcda22bca45656409799d4c2fddf058047dbe109',
       'condition': 'checkout_linux',
   },
 
@@ -918,7 +918,7 @@
     Var('chromium_git') + '/chromium/deps/flac.git' + '@' + 'af862024c8c8fa0ae07ced05e89013d881b00596',
 
   'src/third_party/flatbuffers/src':
-    Var('chromium_git') + '/external/github.com/google/flatbuffers.git' + '@' + '9bf9b18f0a705dfd6d50b98056463a55de6a1bf9',
+    Var('chromium_git') + '/external/github.com/google/flatbuffers.git' + '@' + '136d75fa6580ef87d1b7cbc243e617f21149852e',
 
   # Used for embedded builds. CrOS & Linux use the system version.
   'src/third_party/fontconfig/src': {
@@ -1293,7 +1293,7 @@
   },
 
   'src/third_party/perfetto':
-    Var('android_git') + '/platform/external/perfetto.git' + '@' + 'b245e85651ebb1909568db2cf573322ef285935a',
+    Var('android_git') + '/platform/external/perfetto.git' + '@' + 'a8c56ef52145f2aa5928fc12b56405e4a0d06855',
 
   'src/third_party/perl': {
       'url': Var('chromium_git') + '/chromium/deps/perl.git' + '@' + '6f3e5028eb65d0b4c5fdd792106ac4c84eee1eb3',
@@ -1390,7 +1390,7 @@
   },
 
   'src/third_party/re2/src':
-    Var('chromium_git') + '/external/github.com/google/re2.git' + '@' + 'eecfdbf1701dd7ebad2f28b9965ca09e0bfb45b0',
+    Var('chromium_git') + '/external/github.com/google/re2.git' + '@' + 'bb8e777557ddbdeabdedea4f23613c5021ffd7b1',
 
   'src/third_party/r8': {
       'packages': [
@@ -1494,7 +1494,7 @@
     Var('chromium_git') + '/external/khronosgroup/webgl.git' + '@' + 'dd55f3ca8f2ea716ca917a4aaf36f0729fe902b1',
 
   'src/third_party/webrtc':
-    Var('webrtc_git') + '/src.git' + '@' + 'eac63e7e026216b8e26ce875cd8a908372277794',
+    Var('webrtc_git') + '/src.git' + '@' + 'f534a640477264e6414dc461c961c9212c48d8ea',
 
   # Wuffs' canonical repository is at github.com/google/wuffs, but we use
   # Skia's mirror of Wuffs, the same as in upstream Skia's DEPS file.
@@ -1561,7 +1561,7 @@
     Var('chromium_git') + '/v8/v8.git' + '@' +  Var('v8_revision'),
 
   'src-internal': {
-    'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@f1d198eaf22fb6a5794c202cd26decea0c8672bd',
+    'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@f70aafdb1ad207bec22f3d69e98b060fc581ac0e',
     'condition': 'checkout_src_internal',
   },
 
@@ -3012,7 +3012,7 @@
       'packages': [
           {
               'package': 'chromium/third_party/android_deps/libs/com_google_errorprone_error_prone_annotation',
-              'version': 'version:2.3.1-cr0',
+              'version': 'version:2.3.3-cr0',
           },
       ],
       'condition': 'checkout_android',
@@ -3023,7 +3023,7 @@
       'packages': [
           {
               'package': 'chromium/third_party/android_deps/libs/com_google_errorprone_error_prone_annotations',
-              'version': 'version:2.3.1-cr0',
+              'version': 'version:2.3.3-cr0',
           },
       ],
       'condition': 'checkout_android',
@@ -3034,7 +3034,7 @@
       'packages': [
           {
               'package': 'chromium/third_party/android_deps/libs/com_google_errorprone_error_prone_check_api',
-              'version': 'version:2.3.1-cr0',
+              'version': 'version:2.3.3-cr0',
           },
       ],
       'condition': 'checkout_android',
@@ -3045,7 +3045,7 @@
       'packages': [
           {
               'package': 'chromium/third_party/android_deps/libs/com_google_errorprone_error_prone_core',
-              'version': 'version:2.3.1-cr0',
+              'version': 'version:2.3.3-cr0',
           },
       ],
       'condition': 'checkout_android',
@@ -3056,7 +3056,7 @@
       'packages': [
           {
               'package': 'chromium/third_party/android_deps/libs/com_google_errorprone_error_prone_type_annotations',
-              'version': 'version:2.3.1-cr0',
+              'version': 'version:2.3.3-cr0',
           },
       ],
       'condition': 'checkout_android',
@@ -3140,6 +3140,17 @@
       'dep_type': 'cipd',
   },
 
+  'src/third_party/android_deps/libs/com_google_protobuf_protobuf_java': {
+      'packages': [
+          {
+              'package': 'chromium/third_party/android_deps/libs/com_google_protobuf_protobuf_java',
+              'version': 'version:3.4.0-cr0',
+          },
+      ],
+      'condition': 'checkout_android',
+      'dep_type': 'cipd',
+  },
+
   'src/third_party/android_deps/libs/com_google_protobuf_protobuf_lite': {
       'packages': [
           {
@@ -3221,7 +3232,7 @@
       'packages': [
           {
               'package': 'chromium/third_party/android_deps/libs/org_checkerframework_checker_qual',
-              'version': 'version:2.5.2-cr0',
+              'version': 'version:2.5.3-cr0',
           },
       ],
       'condition': 'checkout_android',
@@ -3232,7 +3243,7 @@
       'packages': [
           {
               'package': 'chromium/third_party/android_deps/libs/org_checkerframework_dataflow',
-              'version': 'version:2.5.0-cr0',
+              'version': 'version:2.5.3-cr0',
           },
       ],
       'condition': 'checkout_android',
@@ -3243,7 +3254,7 @@
       'packages': [
           {
               'package': 'chromium/third_party/android_deps/libs/org_checkerframework_javacutil',
-              'version': 'version:2.5.0-cr0',
+              'version': 'version:2.5.3-cr0',
           },
       ],
       'condition': 'checkout_android',
diff --git a/PRESUBMIT.py b/PRESUBMIT.py
index 88609352..f9ba7c64 100644
--- a/PRESUBMIT.py
+++ b/PRESUBMIT.py
@@ -926,7 +926,7 @@
           'of base::Bind. (crbug.com/714018)',
       ),
       False,
-      _NOT_CONVERTED_TO_MODERN_BIND_AND_CALLBACK,
+      (_NOT_CONVERTED_TO_MODERN_BIND_AND_CALLBACK,),
     ),
     (
       r'/\bbase::Callback[<:]',
@@ -935,7 +935,7 @@
           'of base::Callback. (crbug.com/714018)',
       ),
       False,
-      _NOT_CONVERTED_TO_MODERN_BIND_AND_CALLBACK,
+      (_NOT_CONVERTED_TO_MODERN_BIND_AND_CALLBACK,),
     ),
     (
       r'/\bbase::Closure\b',
@@ -944,7 +944,7 @@
           'of base::Closure. (crbug.com/714018)',
       ),
       False,
-      _NOT_CONVERTED_TO_MODERN_BIND_AND_CALLBACK,
+      (_NOT_CONVERTED_TO_MODERN_BIND_AND_CALLBACK,),
     ),
     (
       r'/\bRunMessageLoop\b',
diff --git a/android_webview/browser/aw_settings.cc b/android_webview/browser/aw_settings.cc
index 8c4d63b..40950a4 100644
--- a/android_webview/browser/aw_settings.cc
+++ b/android_webview/browser/aw_settings.cc
@@ -16,6 +16,7 @@
 #include "base/android/jni_string.h"
 #include "base/macros.h"
 #include "base/supports_user_data.h"
+#include "components/viz/common/features.h"
 #include "content/public/browser/navigation_controller.h"
 #include "content/public/browser/navigation_entry.h"
 #include "content/public/browser/render_view_host.h"
@@ -42,7 +43,8 @@
   web_prefs->should_clear_document_background = false;
   web_prefs->viewport_meta_enabled = true;
   web_prefs->picture_in_picture_enabled = false;
-  web_prefs->disable_features_depending_on_viz = true;
+  web_prefs->disable_features_depending_on_viz =
+      !::features::IsUsingVizForWebView();
   web_prefs->disable_accelerated_small_canvases = true;
   web_prefs->reenable_web_components_v0 = true;
 }
diff --git a/android_webview/browser/gfx/browser_view_renderer.cc b/android_webview/browser/gfx/browser_view_renderer.cc
index d8df8978..113efd9 100644
--- a/android_webview/browser/gfx/browser_view_renderer.cc
+++ b/android_webview/browser/gfx/browser_view_renderer.cc
@@ -115,9 +115,8 @@
       clear_view_(false),
       offscreen_pre_raster_(false) {
   if (::features::IsUsingVizForWebView()) {
-    root_frame_sink_proxy_ = std::make_unique<RootFrameSinkProxy>(
-        ui_task_runner_, base::BindRepeating(&BrowserViewRenderer::Invalidate,
-                                             base::Unretained(this)));
+    root_frame_sink_proxy_ =
+        std::make_unique<RootFrameSinkProxy>(ui_task_runner_, this);
   }
 }
 
@@ -842,6 +841,13 @@
   PostInvalidate(compositor_);
 }
 
+void BrowserViewRenderer::ProgressFling(base::TimeTicks frame_time) {
+  if (!compositor_)
+    return;
+  TRACE_EVENT0("android_webview", "BrowserViewRenderer::ProgressFling");
+  compositor_->ProgressFling(frame_time);
+}
+
 void BrowserViewRenderer::PostInvalidate(
     content::SynchronousCompositor* compositor) {
   TRACE_EVENT_INSTANT0("android_webview", "BrowserViewRenderer::PostInvalidate",
diff --git a/android_webview/browser/gfx/browser_view_renderer.h b/android_webview/browser/gfx/browser_view_renderer.h
index 1d14b966..a1075545 100644
--- a/android_webview/browser/gfx/browser_view_renderer.h
+++ b/android_webview/browser/gfx/browser_view_renderer.h
@@ -13,6 +13,7 @@
 #include "android_webview/browser/gfx/child_frame.h"
 #include "android_webview/browser/gfx/compositor_frame_producer.h"
 #include "android_webview/browser/gfx/parent_compositor_draw_constraints.h"
+#include "android_webview/browser/gfx/root_frame_sink_proxy.h"
 #include "base/callback.h"
 #include "base/cancelable_callback.h"
 #include "base/macros.h"
@@ -44,7 +45,8 @@
 // Interface for all the WebView-specific content rendering operations.
 // Provides software and hardware rendering and the Capture Picture API.
 class BrowserViewRenderer : public content::SynchronousCompositorClient,
-                            public CompositorFrameProducer {
+                            public CompositorFrameProducer,
+                            public RootFrameSinkProxyClient {
  public:
   static void CalculateTileMemoryPolicy();
   static BrowserViewRenderer* FromWebContents(
@@ -160,6 +162,10 @@
 
   void SetActiveFrameSinkId(const viz::FrameSinkId& frame_sink_id);
 
+  // RootFrameSinkProxy overrides
+  void Invalidate() override;
+  void ProgressFling(base::TimeTicks frame_time) override;
+
   // Visible for testing.
   content::SynchronousCompositor* GetActiveCompositorForTesting() const {
     return compositor_;
@@ -182,7 +188,6 @@
       CompositorFrameConsumer* compositor_frame_consumer);
   void ReleaseHardware();
   bool DoUpdateParentDrawData();
-  void Invalidate();
 
   gfx::Vector2d max_scroll_offset() const;
 
diff --git a/android_webview/browser/gfx/root_frame_sink_proxy.cc b/android_webview/browser/gfx/root_frame_sink_proxy.cc
index f457a3d..265d314f 100644
--- a/android_webview/browser/gfx/root_frame_sink_proxy.cc
+++ b/android_webview/browser/gfx/root_frame_sink_proxy.cc
@@ -24,11 +24,11 @@
 
 RootFrameSinkProxy::RootFrameSinkProxy(
     const scoped_refptr<base::SingleThreadTaskRunner>& ui_task_runner,
-    base::RepeatingClosure invalidate_callback)
+    RootFrameSinkProxyClient* client)
     : ui_task_runner_(ui_task_runner),
       viz_task_runner_(
           VizCompositorThreadRunnerWebView::GetInstance()->task_runner()),
-      invalidate_callback_(std::move(invalidate_callback)) {
+      client_(client) {
   DETACH_FROM_THREAD(viz_thread_checker_);
   viz_task_runner_->PostTask(
       FROM_HERE, base::BindOnce(&RootFrameSinkProxy::InitializeOnViz,
@@ -127,8 +127,11 @@
 
 bool RootFrameSinkProxy::OnBeginFrameDerivedImpl(
     const viz::BeginFrameArgs& args) {
+  DCHECK(client_);
   if (BeginFrame(args))
-    invalidate_callback_.Run();
+    client_->Invalidate();
+
+  client_->ProgressFling(args.frame_time);
 
   return true;
 }
diff --git a/android_webview/browser/gfx/root_frame_sink_proxy.h b/android_webview/browser/gfx/root_frame_sink_proxy.h
index 00945e7..42de4da 100644
--- a/android_webview/browser/gfx/root_frame_sink_proxy.h
+++ b/android_webview/browser/gfx/root_frame_sink_proxy.h
@@ -17,6 +17,12 @@
 
 namespace android_webview {
 
+class RootFrameSinkProxyClient {
+ public:
+  virtual void Invalidate() = 0;
+  virtual void ProgressFling(base::TimeTicks) = 0;
+};
+
 // Per-AwContents object. Straddles UI and Viz thread. Public methods should be
 // called on the UI thread unless otherwise specified. Mostly used for creating
 // RootFrameSink and routing calls to it.
@@ -24,7 +30,7 @@
  public:
   RootFrameSinkProxy(
       const scoped_refptr<base::SingleThreadTaskRunner>& ui_task_runner,
-      base::RepeatingClosure invalidate_callback);
+      RootFrameSinkProxyClient* client);
   ~RootFrameSinkProxy() override;
 
   void AddChildFrameSinkId(const viz::FrameSinkId& frame_sink_id);
@@ -50,7 +56,7 @@
 
   const scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner_;
   const scoped_refptr<base::SingleThreadTaskRunner> viz_task_runner_;
-  base::RepeatingClosure invalidate_callback_;
+  RootFrameSinkProxyClient* const client_;
   scoped_refptr<RootFrameSink> without_gpu_;
   std::unique_ptr<viz::ExternalBeginFrameSource> begin_frame_source_;
 
diff --git a/android_webview/browser/scoped_add_feature_flags.cc b/android_webview/browser/scoped_add_feature_flags.cc
index bc5b4aa..28dc5eda 100644
--- a/android_webview/browser/scoped_add_feature_flags.cc
+++ b/android_webview/browser/scoped_add_feature_flags.cc
@@ -37,6 +37,15 @@
   AddFeatureIfNotSet(feature, false /* enable */);
 }
 
+bool ScopedAddFeatureFlags::IsEnabled(const base::Feature& feature) {
+  const char* feature_name = feature.name;
+  if (base::Contains(disabled_features_, feature_name))
+    return false;
+  if (base::Contains(enabled_features_, feature_name))
+    return true;
+  return feature.default_state == base::FEATURE_ENABLED_BY_DEFAULT;
+}
+
 void ScopedAddFeatureFlags::AddFeatureIfNotSet(const base::Feature& feature,
                                                bool enable) {
   const char* feature_name = feature.name;
diff --git a/android_webview/browser/scoped_add_feature_flags.h b/android_webview/browser/scoped_add_feature_flags.h
index 0433ac4..9f95828 100644
--- a/android_webview/browser/scoped_add_feature_flags.h
+++ b/android_webview/browser/scoped_add_feature_flags.h
@@ -24,6 +24,8 @@
   // Any existing (user set) enable/disable takes precedence.
   void EnableIfNotSet(const base::Feature& feature);
   void DisableIfNotSet(const base::Feature& feature);
+  // Check if the feature is enabled from command line or functions above
+  bool IsEnabled(const base::Feature& feature);
 
  private:
   void AddFeatureIfNotSet(const base::Feature& feature, bool enable);
diff --git a/android_webview/javatests/src/org/chromium/android_webview/test/AwAutofillTest.java b/android_webview/javatests/src/org/chromium/android_webview/test/AwAutofillTest.java
index 203d1503..d8ef6046 100644
--- a/android_webview/javatests/src/org/chromium/android_webview/test/AwAutofillTest.java
+++ b/android_webview/javatests/src/org/chromium/android_webview/test/AwAutofillTest.java
@@ -24,7 +24,7 @@
 import android.view.View;
 import android.view.ViewGroup;
 import android.view.ViewStructure;
-import android.view.ViewStructure.HtmlInfo.Builder;
+import android.view.ViewStructure.HtmlInfo;
 import android.view.WindowManager;
 import android.view.autofill.AutofillId;
 import android.view.autofill.AutofillValue;
@@ -47,8 +47,8 @@
 import org.chromium.base.metrics.RecordHistogram;
 import org.chromium.base.task.PostTask;
 import org.chromium.base.test.util.CallbackHelper;
-import org.chromium.base.test.util.DisabledTest;
 import org.chromium.base.test.util.DisableIf;
+import org.chromium.base.test.util.DisabledTest;
 import org.chromium.base.test.util.Feature;
 import org.chromium.base.test.util.MetricsUtils;
 import org.chromium.base.test.util.MinAndroidSdkLevel;
@@ -125,7 +125,7 @@
         /**
          * Implementation of Builder
          */
-        public static class AwBuilder extends Builder {
+        public static class AwBuilder extends HtmlInfo.Builder {
             private String mTag;
             private ArrayList<Pair<String, String>> mAttributes;
             public AwBuilder(String tag) {
@@ -134,7 +134,7 @@
             }
 
             @Override
-            public Builder addAttribute(String name, String value) {
+            public HtmlInfo.Builder addAttribute(String name, String value) {
                 mAttributes.add(new Pair<String, String>(name, value));
                 return this;
             }
@@ -254,7 +254,7 @@
         }
 
         @Override
-        public Builder newHtmlInfoBuilder(String tag) {
+        public HtmlInfo.Builder newHtmlInfoBuilder(String tag) {
             return new AwBuilder(tag);
         }
 
diff --git a/android_webview/lib/aw_main_delegate.cc b/android_webview/lib/aw_main_delegate.cc
index cfb959cf..6cf2adc 100644
--- a/android_webview/lib/aw_main_delegate.cc
+++ b/android_webview/lib/aw_main_delegate.cc
@@ -180,16 +180,26 @@
     // WebView does not and should not support WebAuthN.
     features.DisableIfNotSet(::features::kWebAuth);
 
-    // WebView isn't compatible with OOP-D.
-    features.DisableIfNotSet(::features::kVizDisplayCompositor);
+    // Checking for command line here as FeatureList isn't initialized here yet,
+    // so we can't use FeatureList::IsEnabled. This is necessary if someone
+    // enabled feature through command line. Finch experiments will need to set
+    // all flags in trial config.
+    if (features.IsEnabled(::features::kVizForWebView)) {
+      cl->AppendSwitch(switches::kWebViewEnableSharedImage);
+      features.EnableIfNotSet(::features::kUseSkiaRenderer);
+    } else {
+      // Disable OOP-D if viz for WebView not enabled.
+      features.DisableIfNotSet(::features::kVizDisplayCompositor);
+
+      // Viz for WebView is required to support embedding CompositorFrameSinks
+      // which is needed for UseSurfaceLayerForVideo feature.
+      // https://crbug.com/853832
+      features.EnableIfNotSet(media::kDisableSurfaceLayerForVideo);
+    }
 
     // WebView does not support overlay fullscreen yet for video overlays.
     features.DisableIfNotSet(media::kOverlayFullscreenVideo);
 
-    // WebView doesn't support embedding CompositorFrameSinks which is needed
-    // for UseSurfaceLayerForVideo feature. https://crbug.com/853832
-    features.EnableIfNotSet(media::kDisableSurfaceLayerForVideo);
-
     // WebView does not support EME persistent license yet, because it's not
     // clear on how user can remove persistent media licenses from UI.
     features.DisableIfNotSet(media::kMediaDrmPersistentLicense);
diff --git a/android_webview/system_webview_apk_tmpl.gni b/android_webview/system_webview_apk_tmpl.gni
index 5f12900..7fd49ac 100644
--- a/android_webview/system_webview_apk_tmpl.gni
+++ b/android_webview/system_webview_apk_tmpl.gni
@@ -51,6 +51,8 @@
 
     _use_trichrome_library =
         defined(use_trichrome_library) && use_trichrome_library
+    _is_64_bit_browser = defined(is_64_bit_browser) && is_64_bit_browser
+    assert(_is_64_bit_browser || !_is_64_bit_browser)  # Mark used.
 
     if (!_use_trichrome_library) {
       deps += [ "//android_webview:monochrome_webview_assets" ]
@@ -58,44 +60,25 @@
 
     if (!_use_trichrome_library) {
       shared_libraries = [ "//android_webview:libwebviewchromium" ]
-      deps += [
-        "//third_party/crashpad/crashpad/handler:crashpad_handler_trampoline",
-      ]
-      loadable_modules = [ "$root_out_dir/libcrashpad_handler_trampoline.so" ]
-
+      shared_resources = true
       if (build_apk_secondary_abi && android_64bit_target_cpu) {
         secondary_abi_shared_libraries = [ "//android_webview:libwebviewchromium($android_secondary_abi_toolchain)" ]
-        _trampoline = "//third_party/crashpad/crashpad/handler:crashpad_handler_trampoline($android_secondary_abi_toolchain)"
-        deps += [ _trampoline ]
-        _secondary_out_dir = get_label_info(_trampoline, "root_out_dir")
-        secondary_abi_loadable_modules =
-            [ "$_secondary_out_dir/libcrashpad_handler_trampoline.so" ]
       }
-      shared_resources = true
     } else {
       uncompress_shared_libraries = true
-
       app_as_shared_lib = true
 
       # Include placeholder libraries to ensure we are treated as the desired
       # architecture.
       if (android_64bit_target_cpu) {
-        if (defined(is_64_bit_browser) && is_64_bit_browser) {
+        if (_is_64_bit_browser) {
           native_lib_placeholders = [ "libdummy.so" ]
           if (build_apk_secondary_abi) {
             secondary_abi_shared_libraries = [ "//android_webview:monochrome_64($android_secondary_abi_toolchain)" ]
-            _trampoline = "//third_party/crashpad/crashpad/handler:crashpad_handler_trampoline($android_secondary_abi_toolchain)"
-            deps += [ _trampoline ]
-            _secondary_out_dir = get_label_info(_trampoline, "root_out_dir")
-            secondary_abi_loadable_modules =
-                [ "$_secondary_out_dir/libcrashpad_handler_trampoline.so" ]
             deps += [ "//android_webview:v8_snapshot_secondary_abi_assets" ]
           }
         } else {
           shared_libraries = [ "//android_webview:monochrome" ]
-          deps += [ "//third_party/crashpad/crashpad/handler:crashpad_handler_trampoline" ]
-          loadable_modules =
-              [ "$root_out_dir/libcrashpad_handler_trampoline.so" ]
           if (build_apk_secondary_abi) {
             secondary_native_lib_placeholders = [ "libdummy.so" ]
             if (use_v8_context_snapshot) {
@@ -106,17 +89,31 @@
             }
           }
         }
-      } else if (defined(is_64_bit_browser) && is_64_bit_browser) {
+      } else if (_is_64_bit_browser) {
         shared_libraries = [ "//android_webview:monochrome_64" ]
-        deps += [
-          "//third_party/crashpad/crashpad/handler:crashpad_handler_trampoline",
-        ]
-        loadable_modules = [ "$root_out_dir/libcrashpad_handler_trampoline.so" ]
       } else {
         native_lib_placeholders = [ "libdummy.so" ]
       }
     }
 
+    if (!_use_trichrome_library ||
+        android_64bit_target_cpu != _is_64_bit_browser) {
+      deps += [
+        "//third_party/crashpad/crashpad/handler:crashpad_handler_trampoline",
+      ]
+      loadable_modules = [ "$root_out_dir/libcrashpad_handler_trampoline.so" ]
+    }
+
+    if (build_apk_secondary_abi && android_64bit_target_cpu) {
+      if (!_use_trichrome_library || _is_64_bit_browser) {
+        _trampoline = "//third_party/crashpad/crashpad/handler:crashpad_handler_trampoline($android_secondary_abi_toolchain)"
+        deps += [ _trampoline ]
+        _secondary_out_dir = get_label_info(_trampoline, "root_out_dir")
+        secondary_abi_loadable_modules =
+            [ "$_secondary_out_dir/libcrashpad_handler_trampoline.so" ]
+      }
+    }
+
     if (!_use_trichrome_library || android_64bit_target_cpu) {
       # 32-bit TrichromeWebView doesn't have a native library, so only do this
       # for other configs.
@@ -163,7 +160,7 @@
 
     if (!defined(version_code)) {
       if (_use_trichrome_library) {
-        if (defined(is_64_bit_browser) && is_64_bit_browser) {
+        if (_is_64_bit_browser) {
           version_code = trichrome_64_32_version_code
         } else {
           version_code = trichrome_version_code
diff --git a/ash/ambient/ui/assistant_response_container_view.cc b/ash/ambient/ui/assistant_response_container_view.cc
index e93c5456..2377ab1 100644
--- a/ash/ambient/ui/assistant_response_container_view.cc
+++ b/ash/ambient/ui/assistant_response_container_view.cc
@@ -8,7 +8,9 @@
 
 #include "ash/assistant/model/assistant_interaction_model_observer.h"
 #include "ash/assistant/model/assistant_response.h"
-#include "ash/assistant/model/assistant_ui_element.h"
+#include "ash/assistant/model/ui/assistant_card_element.h"
+#include "ash/assistant/model/ui/assistant_text_element.h"
+#include "ash/assistant/model/ui/assistant_ui_element.h"
 #include "ash/assistant/ui/assistant_view_delegate.h"
 #include "ash/assistant/ui/main_stage/assistant_text_element_view.h"
 #include "ui/views/layout/box_layout.h"
@@ -52,7 +54,7 @@
 void AssistantResponseContainerView::HandleResponse(
     const AssistantResponse& response) {
   for (const auto& ui_element : response.GetUiElements()) {
-    switch (ui_element->GetType()) {
+    switch (ui_element->type()) {
       case AssistantUiElementType::kCard:
         // For card elements, we instead use the "fallback" message for HTML
         // card rendering as the text response.
diff --git a/ash/app_list/app_list_controller_impl_unittest.cc b/ash/app_list/app_list_controller_impl_unittest.cc
index 5d0f48c..de09897 100644
--- a/ash/app_list/app_list_controller_impl_unittest.cc
+++ b/ash/app_list/app_list_controller_impl_unittest.cc
@@ -529,7 +529,9 @@
 };
 
 // Tests with both hotseat disabled and enabled.
-INSTANTIATE_TEST_SUITE_P(, HotseatAppListControllerImplTest, testing::Bool());
+INSTANTIATE_TEST_SUITE_P(All,
+                         HotseatAppListControllerImplTest,
+                         testing::Bool());
 
 // Verifies that the pinned app should still show after canceling the drag from
 // AppsGridView to Shelf (https://crbug.com/1021768).
diff --git a/ash/app_list/app_list_presenter_delegate_unittest.cc b/ash/app_list/app_list_presenter_delegate_unittest.cc
index aa587b1..6235bcff 100644
--- a/ash/app_list/app_list_presenter_delegate_unittest.cc
+++ b/ash/app_list/app_list_presenter_delegate_unittest.cc
@@ -265,7 +265,7 @@
 
 // Instantiate the Boolean which is used to toggle mouse and touch events in
 // the parameterized tests.
-INSTANTIATE_TEST_SUITE_P(, AppListPresenterDelegateTest, testing::Bool());
+INSTANTIATE_TEST_SUITE_P(All, AppListPresenterDelegateTest, testing::Bool());
 
 // Verifies that context menu click should not activate the search box
 // (see https://crbug.com/941428).
@@ -2538,7 +2538,7 @@
   DISALLOW_COPY_AND_ASSIGN(AppListPresenterDelegateHomeLauncherTest);
 };
 
-INSTANTIATE_TEST_SUITE_P(,
+INSTANTIATE_TEST_SUITE_P(All,
                          AppListPresenterDelegateHomeLauncherTest,
                          testing::Bool());
 
@@ -3355,7 +3355,7 @@
 
 // Instantiate the Boolean which is used to toggle mouse and touch events in
 // the parameterized tests.
-INSTANTIATE_TEST_SUITE_P(,
+INSTANTIATE_TEST_SUITE_P(All,
                          AppListPresenterDelegateVirtualKeyboardTest,
                          testing::Bool());
 
diff --git a/ash/app_list/folder_image_unittest.cc b/ash/app_list/folder_image_unittest.cc
index cdc0668..6ddd3ce 100644
--- a/ash/app_list/folder_image_unittest.cc
+++ b/ash/app_list/folder_image_unittest.cc
@@ -112,7 +112,7 @@
  private:
   DISALLOW_COPY_AND_ASSIGN(FolderImageTest);
 };
-INSTANTIATE_TEST_SUITE_P(,
+INSTANTIATE_TEST_SUITE_P(All,
                          FolderImageTest,
                          ::testing::Values(ash::AppListConfigType::kShared,
                                            ash::AppListConfigType::kLarge,
diff --git a/ash/app_list/views/app_list_view_unittest.cc b/ash/app_list/views/app_list_view_unittest.cc
index 40d25ed..fc8f06e 100644
--- a/ash/app_list/views/app_list_view_unittest.cc
+++ b/ash/app_list/views/app_list_view_unittest.cc
@@ -814,7 +814,7 @@
   DISALLOW_COPY_AND_ASSIGN(AppListViewFocusTest);
 };
 
-INSTANTIATE_TEST_SUITE_P(, AppListViewFocusTest, testing::Bool());
+INSTANTIATE_TEST_SUITE_P(All, AppListViewFocusTest, testing::Bool());
 
 }  // namespace
 
diff --git a/ash/app_list/views/apps_grid_view_unittest.cc b/ash/app_list/views/apps_grid_view_unittest.cc
index 78754ce..c0519f9 100644
--- a/ash/app_list/views/apps_grid_view_unittest.cc
+++ b/ash/app_list/views/apps_grid_view_unittest.cc
@@ -367,7 +367,7 @@
   DISALLOW_COPY_AND_ASSIGN(AppsGridViewTest);
 };
 
-INSTANTIATE_TEST_SUITE_P(, AppsGridViewTest, testing::Bool());
+INSTANTIATE_TEST_SUITE_P(All, AppsGridViewTest, testing::Bool());
 
 class TestAppsGridViewFolderDelegate : public AppsGridViewFolderDelegate {
  public:
@@ -1858,7 +1858,7 @@
       1);
 }
 
-INSTANTIATE_TEST_SUITE_P(, AppsGridViewTabletTest, testing::Bool());
+INSTANTIATE_TEST_SUITE_P(All, AppsGridViewTabletTest, testing::Bool());
 
 // Test various dragging behaviors only allowed when apps grid gap (part of
 // home launcher feature) is enabled.
diff --git a/ash/app_list/views/search_box_view_unittest.cc b/ash/app_list/views/search_box_view_unittest.cc
index 1afb7be8..99c90629 100644
--- a/ash/app_list/views/search_box_view_unittest.cc
+++ b/ash/app_list/views/search_box_view_unittest.cc
@@ -590,7 +590,7 @@
   DISALLOW_COPY_AND_ASSIGN(SearchBoxViewAutocompleteTest);
 };
 
-INSTANTIATE_TEST_SUITE_P(,
+INSTANTIATE_TEST_SUITE_P(All,
                          SearchBoxViewAutocompleteTest,
                          ::testing::Values(ui::VKEY_LEFT,
                                            ui::VKEY_RIGHT,
diff --git a/ash/app_list/views/search_result_page_view.cc b/ash/app_list/views/search_result_page_view.cc
index 91709372..3d5eb7a 100644
--- a/ash/app_list/views/search_result_page_view.cc
+++ b/ash/app_list/views/search_result_page_view.cc
@@ -310,9 +310,8 @@
           base::NumberToString16(last_search_result_count_), query);
     }
   } else {
-    value = l10n_util::GetStringFUTF16(
-        IDS_APP_LIST_SEARCHBOX_RESULTS_ACCESSIBILITY_ANNOUNCEMENT_ZERO_STATE,
-        base::NumberToString16(last_search_result_count_));
+    value = l10n_util::GetStringUTF16(
+        IDS_APP_LIST_SEARCHBOX_RESULTS_ACCESSIBILITY_ANNOUNCEMENT_ZERO_STATE);
   }
 
   node_data->SetValue(value);
diff --git a/ash/app_list/views/search_result_page_view_unittest.cc b/ash/app_list/views/search_result_page_view_unittest.cc
index 8d73e88b..1d58c45 100644
--- a/ash/app_list/views/search_result_page_view_unittest.cc
+++ b/ash/app_list/views/search_result_page_view_unittest.cc
@@ -123,7 +123,7 @@
 // Instantiate the Boolean which is used to toggle answer cards in
 // the parameterized tests.
 INSTANTIATE_TEST_SUITE_P(
-    ,
+    All,
     SearchResultPageViewTest,
     ::testing::Values(AnswerCardState::ANSWER_CARD_OFF,
                       AnswerCardState::ANSWER_CARD_ON_WITHOUT_RESULT,
diff --git a/ash/app_list/views/search_result_tile_item_list_view_unittest.cc b/ash/app_list/views/search_result_tile_item_list_view_unittest.cc
index 860c0e2..72b735d 100644
--- a/ash/app_list/views/search_result_tile_item_list_view_unittest.cc
+++ b/ash/app_list/views/search_result_tile_item_list_view_unittest.cc
@@ -361,7 +361,7 @@
   }
 }
 
-INSTANTIATE_TEST_SUITE_P(,
+INSTANTIATE_TEST_SUITE_P(All,
                          SearchResultTileItemListViewTest,
                          testing::ValuesIn({std::make_pair(false, false),
                                             std::make_pair(false, true),
diff --git a/ash/assistant/assistant_interaction_controller.cc b/ash/assistant/assistant_interaction_controller.cc
index 74cc3cf..f0ec2dc3 100644
--- a/ash/assistant/assistant_interaction_controller.cc
+++ b/ash/assistant/assistant_interaction_controller.cc
@@ -13,8 +13,9 @@
 #include "ash/assistant/model/assistant_interaction_model_observer.h"
 #include "ash/assistant/model/assistant_query.h"
 #include "ash/assistant/model/assistant_response.h"
-#include "ash/assistant/model/assistant_ui_element.h"
 #include "ash/assistant/model/assistant_ui_model.h"
+#include "ash/assistant/model/ui/assistant_card_element.h"
+#include "ash/assistant/model/ui/assistant_text_element.h"
 #include "ash/assistant/ui/assistant_ui_constants.h"
 #include "ash/assistant/util/assistant_util.h"
 #include "ash/assistant/util/deep_link_util.h"
diff --git a/ash/assistant/model/BUILD.gn b/ash/assistant/model/BUILD.gn
index dd18c20..0205d61 100644
--- a/ash/assistant/model/BUILD.gn
+++ b/ash/assistant/model/BUILD.gn
@@ -31,11 +31,14 @@
     "assistant_suggestions_model.cc",
     "assistant_suggestions_model.h",
     "assistant_suggestions_model_observer.h",
-    "assistant_ui_element.cc",
-    "assistant_ui_element.h",
     "assistant_ui_model.cc",
     "assistant_ui_model.h",
     "assistant_ui_model_observer.h",
+    "ui/assistant_card_element.cc",
+    "ui/assistant_card_element.h",
+    "ui/assistant_text_element.cc",
+    "ui/assistant_text_element.h",
+    "ui/assistant_ui_element.h",
   ]
 
   deps = [
diff --git a/ash/assistant/model/assistant_response.cc b/ash/assistant/model/assistant_response.cc
index 9933142..c3f2943 100644
--- a/ash/assistant/model/assistant_response.cc
+++ b/ash/assistant/model/assistant_response.cc
@@ -4,7 +4,8 @@
 
 #include "ash/assistant/model/assistant_response.h"
 
-#include "ash/assistant/model/assistant_ui_element.h"
+#include "ash/assistant/model/ui/assistant_card_element.h"
+#include "ash/assistant/model/ui/assistant_ui_element.h"
 #include "base/bind.h"
 #include "chromeos/services/assistant/public/mojom/assistant.mojom.h"
 
@@ -83,7 +84,7 @@
   response_.set_processing_state(ProcessingState::kProcessing);
 
   for (const auto& ui_element : response_.GetUiElements()) {
-    switch (ui_element->GetType()) {
+    switch (ui_element->type()) {
       case AssistantUiElementType::kCard:
         ++processing_count_;
         // Start asynchronous processing of the card element.
diff --git a/ash/assistant/model/assistant_ui_element.cc b/ash/assistant/model/ui/assistant_card_element.cc
similarity index 91%
rename from ash/assistant/model/assistant_ui_element.cc
rename to ash/assistant/model/ui/assistant_card_element.cc
index b9762b59..9ec00d6 100644
--- a/ash/assistant/model/assistant_ui_element.cc
+++ b/ash/assistant/model/ui/assistant_card_element.cc
@@ -1,21 +1,14 @@
-// Copyright 2018 The Chromium Authors. All rights reserved.
+// Copyright 2019 The Chromium Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "ash/assistant/model/assistant_ui_element.h"
+#include "ash/assistant/model/ui/assistant_card_element.h"
 
 #include "ash/assistant/ui/assistant_ui_constants.h"
 #include "base/base64.h"
 
 namespace ash {
 
-namespace {
-
-// Navigable contents.
-constexpr char kDataUriPrefix[] = "data:text/html;base64,";
-
-}  // namespace
-
 // AssistantCardElement --------------------------------------------------------
 
 AssistantCardElement::AssistantCardElement(const std::string& html,
@@ -69,9 +62,12 @@
   // Observe |contents_| so that we are notified when loading is complete.
   contents_->AddObserver(this);
 
-  // Navigate to the data URL which represents the card.
+  // Encode the html string to be URL-safe.
   std::string encoded_html;
   base::Base64Encode(card_element_.html(), &encoded_html);
+
+  // Navigate to the data URL which represents the card.
+  constexpr char kDataUriPrefix[] = "data:text/html;base64,";
   contents_->Navigate(GURL(kDataUriPrefix + encoded_html));
 }
 
diff --git a/ash/assistant/model/assistant_ui_element.h b/ash/assistant/model/ui/assistant_card_element.h
similarity index 60%
rename from ash/assistant/model/assistant_ui_element.h
rename to ash/assistant/model/ui/assistant_card_element.h
index 041f6d1a..bcb9c08c 100644
--- a/ash/assistant/model/assistant_ui_element.h
+++ b/ash/assistant/model/ui/assistant_card_element.h
@@ -1,45 +1,20 @@
-// Copyright 2018 The Chromium Authors. All rights reserved.
+// Copyright 2019 The Chromium Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef ASH_ASSISTANT_MODEL_ASSISTANT_UI_ELEMENT_H_
-#define ASH_ASSISTANT_MODEL_ASSISTANT_UI_ELEMENT_H_
+#ifndef ASH_ASSISTANT_MODEL_UI_ASSISTANT_CARD_ELEMENT_H_
+#define ASH_ASSISTANT_MODEL_UI_ASSISTANT_CARD_ELEMENT_H_
 
 #include <memory>
 #include <string>
 
+#include "ash/assistant/model/ui/assistant_ui_element.h"
 #include "base/component_export.h"
 #include "base/macros.h"
 #include "services/content/public/cpp/navigable_contents.h"
 
 namespace ash {
 
-// AssistantUiElementType ------------------------------------------------------
-
-// Defines possible types of Assistant UI elements.
-enum class AssistantUiElementType {
-  kCard,  // See AssistantCardElement.
-  kText,  // See AssistantTextElement.
-};
-
-// AssistantUiElement ----------------------------------------------------------
-
-// Base class for a UI element that will be rendered inside of Assistant UI.
-class COMPONENT_EXPORT(ASSISTANT_MODEL) AssistantUiElement {
- public:
-  virtual ~AssistantUiElement() = default;
-
-  AssistantUiElementType GetType() const { return type_; }
-
- protected:
-  explicit AssistantUiElement(AssistantUiElementType type) : type_(type) {}
-
- private:
-  const AssistantUiElementType type_;
-
-  DISALLOW_COPY_AND_ASSIGN(AssistantUiElement);
-};
-
 // AssistantCardElement --------------------------------------------------------
 
 // An Assistant UI element that will be rendered as an HTML card.
@@ -102,25 +77,6 @@
   DISALLOW_COPY_AND_ASSIGN(AssistantCardElement);
 };
 
-// AssistantTextElement --------------------------------------------------------
-
-// An Assistant UI element that will be rendered as text.
-class COMPONENT_EXPORT(ASSISTANT_MODEL) AssistantTextElement
-    : public AssistantUiElement {
- public:
-  explicit AssistantTextElement(const std::string& text)
-      : AssistantUiElement(AssistantUiElementType::kText), text_(text) {}
-
-  ~AssistantTextElement() override = default;
-
-  const std::string& text() const { return text_; }
-
- private:
-  const std::string text_;
-
-  DISALLOW_COPY_AND_ASSIGN(AssistantTextElement);
-};
-
 }  // namespace ash
 
-#endif  // ASH_ASSISTANT_MODEL_ASSISTANT_UI_ELEMENT_H_
+#endif  // ASH_ASSISTANT_MODEL_UI_ASSISTANT_CARD_ELEMENT_H_
diff --git a/ash/assistant/model/ui/assistant_text_element.cc b/ash/assistant/model/ui/assistant_text_element.cc
new file mode 100644
index 0000000..d387ec6
--- /dev/null
+++ b/ash/assistant/model/ui/assistant_text_element.cc
@@ -0,0 +1,16 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ash/assistant/model/ui/assistant_text_element.h"
+
+#include "ash/assistant/ui/assistant_ui_constants.h"
+
+namespace ash {
+
+AssistantTextElement::AssistantTextElement(const std::string& text)
+    : AssistantUiElement(AssistantUiElementType::kText), text_(text) {}
+
+AssistantTextElement::~AssistantTextElement() = default;
+
+}  // namespace ash
diff --git a/ash/assistant/model/ui/assistant_text_element.h b/ash/assistant/model/ui/assistant_text_element.h
new file mode 100644
index 0000000..84e6e0b
--- /dev/null
+++ b/ash/assistant/model/ui/assistant_text_element.h
@@ -0,0 +1,33 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef ASH_ASSISTANT_MODEL_UI_ASSISTANT_TEXT_ELEMENT_H_
+#define ASH_ASSISTANT_MODEL_UI_ASSISTANT_TEXT_ELEMENT_H_
+
+#include <string>
+
+#include "ash/assistant/model/ui/assistant_ui_element.h"
+#include "base/component_export.h"
+#include "base/macros.h"
+
+namespace ash {
+
+// An Assistant UI element that will be rendered as text.
+class COMPONENT_EXPORT(ASSISTANT_MODEL) AssistantTextElement
+    : public AssistantUiElement {
+ public:
+  explicit AssistantTextElement(const std::string& text);
+  ~AssistantTextElement() override;
+
+  const std::string& text() const { return text_; }
+
+ private:
+  const std::string text_;
+
+  DISALLOW_COPY_AND_ASSIGN(AssistantTextElement);
+};
+
+}  // namespace ash
+
+#endif  // ASH_ASSISTANT_MODEL_UI_ASSISTANT_TEXT_ELEMENT_H_
diff --git a/ash/assistant/model/ui/assistant_ui_element.h b/ash/assistant/model/ui/assistant_ui_element.h
new file mode 100644
index 0000000..65c5383c
--- /dev/null
+++ b/ash/assistant/model/ui/assistant_ui_element.h
@@ -0,0 +1,41 @@
+// Copyright 2018 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef ASH_ASSISTANT_MODEL_UI_ASSISTANT_UI_ELEMENT_H_
+#define ASH_ASSISTANT_MODEL_UI_ASSISTANT_UI_ELEMENT_H_
+
+#include "base/component_export.h"
+#include "base/macros.h"
+
+namespace ash {
+
+// AssistantUiElementType ------------------------------------------------------
+
+// Defines possible types of Assistant UI elements.
+enum class AssistantUiElementType {
+  kCard,  // See AssistantCardElement.
+  kText,  // See AssistantTextElement.
+};
+
+// AssistantUiElement ----------------------------------------------------------
+
+// Base class for a UI element that will be rendered inside of Assistant UI.
+class COMPONENT_EXPORT(ASSISTANT_MODEL) AssistantUiElement {
+ public:
+  virtual ~AssistantUiElement() = default;
+
+  AssistantUiElementType type() const { return type_; }
+
+ protected:
+  explicit AssistantUiElement(AssistantUiElementType type) : type_(type) {}
+
+ private:
+  const AssistantUiElementType type_;
+
+  DISALLOW_COPY_AND_ASSIGN(AssistantUiElement);
+};
+
+}  // namespace ash
+
+#endif  // ASH_ASSISTANT_MODEL_UI_ASSISTANT_UI_ELEMENT_H_
diff --git a/ash/assistant/ui/main_stage/assistant_card_element_view.cc b/ash/assistant/ui/main_stage/assistant_card_element_view.cc
index 5e81c563..a8e255d 100644
--- a/ash/assistant/ui/main_stage/assistant_card_element_view.cc
+++ b/ash/assistant/ui/main_stage/assistant_card_element_view.cc
@@ -6,7 +6,7 @@
 
 #include <memory>
 
-#include "ash/assistant/model/assistant_ui_element.h"
+#include "ash/assistant/model/ui/assistant_card_element.h"
 #include "ash/assistant/ui/assistant_container_view.h"
 #include "ash/assistant/ui/assistant_ui_constants.h"
 #include "ash/assistant/ui/assistant_view_delegate.h"
diff --git a/ash/assistant/ui/main_stage/assistant_text_element_view.cc b/ash/assistant/ui/main_stage/assistant_text_element_view.cc
index 922a439..e942b5d 100644
--- a/ash/assistant/ui/main_stage/assistant_text_element_view.cc
+++ b/ash/assistant/ui/main_stage/assistant_text_element_view.cc
@@ -4,7 +4,7 @@
 
 #include "ash/assistant/ui/main_stage/assistant_text_element_view.h"
 
-#include "ash/assistant/model/assistant_ui_element.h"
+#include "ash/assistant/model/ui/assistant_text_element.h"
 #include "ash/assistant/ui/assistant_ui_constants.h"
 #include "base/strings/utf_string_conversions.h"
 
diff --git a/ash/assistant/ui/main_stage/suggestion_chip_view.cc b/ash/assistant/ui/main_stage/suggestion_chip_view.cc
index 9d8140e..8783197 100644
--- a/ash/assistant/ui/main_stage/suggestion_chip_view.cc
+++ b/ash/assistant/ui/main_stage/suggestion_chip_view.cc
@@ -47,7 +47,11 @@
     : Button(listener),
       icon_view_(new views::ImageView()),
       text_view_(new views::Label()) {
+  // Configure focus. Note that we don't install the default focus ring as we
+  // use custom highlighting instead.
   SetFocusBehavior(FocusBehavior::ALWAYS);
+  SetInstallFocusRingOnFocus(false);
+
   InitLayout(params);
 }
 
diff --git a/ash/assistant/ui/main_stage/ui_element_container_view.cc b/ash/assistant/ui/main_stage/ui_element_container_view.cc
index 0f396137..61b91d4 100644
--- a/ash/assistant/ui/main_stage/ui_element_container_view.cc
+++ b/ash/assistant/ui/main_stage/ui_element_container_view.cc
@@ -8,7 +8,9 @@
 
 #include "ash/assistant/model/assistant_interaction_model_observer.h"
 #include "ash/assistant/model/assistant_response.h"
-#include "ash/assistant/model/assistant_ui_element.h"
+#include "ash/assistant/model/ui/assistant_card_element.h"
+#include "ash/assistant/model/ui/assistant_text_element.h"
+#include "ash/assistant/model/ui/assistant_ui_element.h"
 #include "ash/assistant/ui/assistant_ui_constants.h"
 #include "ash/assistant/ui/assistant_view_delegate.h"
 #include "ash/assistant/ui/assistant_view_ids.h"
@@ -290,7 +292,7 @@
 
 void UiElementContainerView::HandleResponse(const AssistantResponse& response) {
   for (const auto& ui_element : response.GetUiElements()) {
-    switch (ui_element->GetType()) {
+    switch (ui_element->type()) {
       case AssistantUiElementType::kCard:
         OnCardElementAdded(
             static_cast<const AssistantCardElement*>(ui_element.get()));
diff --git a/ash/laser/laser_pointer_view.cc b/ash/laser/laser_pointer_view.cc
index c1b2ee5..4b2f0a6 100644
--- a/ash/laser/laser_pointer_view.cc
+++ b/ash/laser/laser_pointer_view.cc
@@ -130,15 +130,14 @@
     path_.moveTo(ordered_points[0].x(), ordered_points[0].y());
     if (!is_first_segment) {
       path_.arcTo(start_radius, start_radius, 180.0f, SkPath::kSmall_ArcSize,
-                  SkPath::kCW_Direction, ordered_points[1].x(),
+                  SkPathDirection::kCW, ordered_points[1].x(),
                   ordered_points[1].y());
     }
 
     path_.lineTo(ordered_points[2].x(), ordered_points[2].y());
-    path_.arcTo(
-        end_radius, end_radius, 180.0f, SkPath::kSmall_ArcSize,
-        is_last_segment ? SkPath::kCW_Direction : SkPath::kCCW_Direction,
-        ordered_points[3].x(), ordered_points[3].y());
+    path_.arcTo(end_radius, end_radius, 180.0f, SkPath::kSmall_ArcSize,
+                is_last_segment ? SkPathDirection::kCW : SkPathDirection::kCCW,
+                ordered_points[3].x(), ordered_points[3].y());
     path_.lineTo(ordered_points[0].x(), ordered_points[0].y());
 
     // Store data to be used by the next segment.
diff --git a/ash/public/cpp/default_frame_header.cc b/ash/public/cpp/default_frame_header.cc
index bf402da8..ae6d5a1 100644
--- a/ash/public/cpp/default_frame_header.cc
+++ b/ash/public/cpp/default_frame_header.cc
@@ -44,7 +44,7 @@
   // Extend 1dp to make sure it's fully opaque.
   rect.fBottom += 1;
   SkPath path;
-  path.addRoundRect(rect, radii, SkPath::kCW_Direction);
+  path.addRoundRect(rect, radii, SkPathDirection::kCW);
   canvas->DrawPath(path, flags);
 }
 
diff --git a/ash/shelf/shelf_layout_manager.cc b/ash/shelf/shelf_layout_manager.cc
index 11b5854..8620c21e 100644
--- a/ash/shelf/shelf_layout_manager.cc
+++ b/ash/shelf/shelf_layout_manager.cc
@@ -18,6 +18,7 @@
 #include "ash/home_screen/home_screen_controller.h"
 #include "ash/public/cpp/app_list/app_list_types.h"
 #include "ash/public/cpp/ash_features.h"
+#include "ash/public/cpp/presentation_time_recorder.h"
 #include "ash/public/cpp/shelf_config.h"
 #include "ash/public/cpp/shelf_types.h"
 #include "ash/public/cpp/shell_window_ids.h"
@@ -2292,6 +2293,14 @@
                               ? auto_hide_state()
                               : SHELF_AUTO_HIDE_SHOWN;
   MaybeSetupHotseatDrag(event_in_screen);
+  if (hotseat_is_in_drag_) {
+    DCHECK(!hotseat_presentation_time_recorder_);
+    hotseat_presentation_time_recorder_ =
+        ash::CreatePresentationTimeHistogramRecorder(
+            shelf_widget_->hotseat_widget()->GetCompositor(),
+            "Ash.HotseatTransition.Drag.PresentationTime",
+            "Ash.HotseatTransition.Drag.PresentationTime.MaxLatency");
+  }
   MaybeUpdateShelfBackground(AnimationChangeType::ANIMATE);
 
   // For the hotseat, |drag_amount_| is relative to the top of the shelf.
@@ -2324,6 +2333,10 @@
 void ShelfLayoutManager::UpdateDrag(const ui::LocatedEvent& event_in_screen,
                                     float scroll_x,
                                     float scroll_y) {
+  if (hotseat_is_in_drag_) {
+    DCHECK(hotseat_presentation_time_recorder_);
+    hotseat_presentation_time_recorder_->RequestNext();
+  }
   if (drag_status_ == kDragAppListInProgress) {
     // Dismiss the app list if the shelf changed to vertical alignment during
     // dragging.
@@ -2434,6 +2447,7 @@
     shelf_widget_->hotseat_widget()->set_manually_extended(
         hotseat_state() == HotseatState::kExtended &&
         !Shell::Get()->overview_controller()->InOverviewSession());
+    hotseat_presentation_time_recorder_.reset();
   }
   hotseat_is_in_drag_ = false;
   drag_status_ = kDragNone;
@@ -2457,6 +2471,8 @@
 
   UpdateVisibilityState();
   drag_status_ = kDragNone;
+  if (hotseat_is_in_drag_)
+    hotseat_presentation_time_recorder_.reset();
   hotseat_is_in_drag_ = false;
 }
 
diff --git a/ash/shelf/shelf_layout_manager.h b/ash/shelf/shelf_layout_manager.h
index 270f820f..8f22de1 100644
--- a/ash/shelf/shelf_layout_manager.h
+++ b/ash/shelf/shelf_layout_manager.h
@@ -51,6 +51,7 @@
 enum class AnimationChangeType;
 class DragWindowFromShelfController;
 class PanelLayoutManagerTest;
+class PresentationTimeRecorder;
 class Shelf;
 class ShelfLayoutManagerObserver;
 class ShelfLayoutManagerTestBase;
@@ -673,6 +674,9 @@
   // Tracks whether the shelf is currently dimmed for inactivity.
   bool dimmed_for_inactivity_ = false;
 
+  // Records the presentation time for hotseat dragging.
+  std::unique_ptr<PresentationTimeRecorder> hotseat_presentation_time_recorder_;
+
   DISALLOW_COPY_AND_ASSIGN(ShelfLayoutManager);
 };
 
diff --git a/ash/system/message_center/arc/arc_notification_content_view.cc b/ash/system/message_center/arc/arc_notification_content_view.cc
index e8b4202..a7ce634 100644
--- a/ash/system/message_center/arc/arc_notification_content_view.cc
+++ b/ash/system/message_center/arc/arc_notification_content_view.cc
@@ -651,7 +651,7 @@
 
   SkPath path;
   path.addRoundRect(gfx::RectToSkRect(GetLocalBounds()), radii,
-                    SkPath::kCCW_Direction);
+                    SkPathDirection::kCCW);
   canvas->ClipPath(path, false);
 
   if (!surface_ && item_ && !item_->GetSnapshot().isNull()) {
diff --git a/ash/system/message_center/stacked_notification_bar.cc b/ash/system/message_center/stacked_notification_bar.cc
index f2a678e..746a1cc 100644
--- a/ash/system/message_center/stacked_notification_bar.cc
+++ b/ash/system/message_center/stacked_notification_bar.cc
@@ -13,8 +13,11 @@
 #include "ash/system/tray/tray_popup_utils.h"
 #include "ash/system/unified/rounded_label_button.h"
 #include "ui/base/l10n/l10n_util.h"
+#include "ui/compositor/layer_animation_sequence.h"
+#include "ui/compositor/layer_animator.h"
 #include "ui/compositor/scoped_layer_animation_settings.h"
 #include "ui/gfx/canvas.h"
+#include "ui/gfx/interpolated_transform.h"
 #include "ui/message_center/message_center.h"
 #include "ui/message_center/public/cpp/message_center_constants.h"
 #include "ui/message_center/vector_icons.h"
@@ -120,14 +123,115 @@
 }  // namespace
 
 class StackedNotificationBar::StackedNotificationBarIcon
-    : public views::ImageView {
+    : public views::ImageView,
+      public ui::LayerAnimationObserver {
  public:
-  StackedNotificationBarIcon(const std::string& id)
-      : views::ImageView(), id_(id) {}
+  StackedNotificationBarIcon(StackedNotificationBar* notification_bar,
+                             const std::string& id)
+      : views::ImageView(), notification_bar_(notification_bar), id_(id) {
+    SetPaintToLayer();
+    layer()->SetFillsBoundsOpaquely(false);
+  }
+
+  ~StackedNotificationBarIcon() override {
+    if (is_animating_out())
+      layer()->GetAnimator()->StopAnimating();
+  }
+
+  void AnimateIn() {
+    DCHECK(!is_animating_out());
+
+    std::unique_ptr<ui::InterpolatedTransform> scale =
+        std::make_unique<ui::InterpolatedScale>(
+            gfx::Point3F(kNotificationIconAnimationScaleFactor,
+                         kNotificationIconAnimationScaleFactor, 1),
+            gfx::Point3F(1, 1, 1));
+
+    std::unique_ptr<ui::InterpolatedTransform> scale_about_pivot =
+        std::make_unique<ui::InterpolatedTransformAboutPivot>(
+            GetLocalBounds().CenterPoint(), std::move(scale));
+
+    scale_about_pivot->SetChild(std::make_unique<ui::InterpolatedTranslation>(
+        gfx::PointF(0, kNotificationIconAnimationLowPosition),
+        gfx::PointF(0, kNotificationIconAnimationHighPosition)));
+
+    std::unique_ptr<ui::LayerAnimationElement> scale_and_move_up =
+        ui::LayerAnimationElement::CreateInterpolatedTransformElement(
+            std::move(scale_about_pivot),
+            base::TimeDelta::FromMilliseconds(
+                kNotificationIconAnimationUpDurationMs));
+    scale_and_move_up->set_tween_type(gfx::Tween::EASE_IN);
+
+    std::unique_ptr<ui::LayerAnimationElement> move_down =
+        ui::LayerAnimationElement::CreateInterpolatedTransformElement(
+            std::make_unique<ui::InterpolatedTranslation>(
+                gfx::PointF(0, kNotificationIconAnimationHighPosition),
+                gfx::PointF(0, 0)),
+            base::TimeDelta::FromMilliseconds(
+                kNotificationIconAnimationDownDurationMs));
+
+    std::unique_ptr<ui::LayerAnimationSequence> sequence =
+        std::make_unique<ui::LayerAnimationSequence>();
+
+    sequence->AddElement(std::move(scale_and_move_up));
+    sequence->AddElement(std::move(move_down));
+    layer()->GetAnimator()->StartAnimation(sequence.release());
+  }
+
+  void AnimateOut() {
+    layer()->GetAnimator()->StopAnimating();
+
+    std::unique_ptr<ui::InterpolatedTransform> scale =
+        std::make_unique<ui::InterpolatedScale>(
+            gfx::Point3F(1, 1, 1),
+            gfx::Point3F(kNotificationIconAnimationScaleFactor,
+                         kNotificationIconAnimationScaleFactor, 1));
+    std::unique_ptr<ui::InterpolatedTransform> scale_about_pivot =
+        std::make_unique<ui::InterpolatedTransformAboutPivot>(
+            gfx::Point(bounds().width() * 0.5, bounds().height() * 0.5),
+            std::move(scale));
+
+    scale_about_pivot->SetChild(std::make_unique<ui::InterpolatedTranslation>(
+        gfx::PointF(0, 0),
+        gfx::PointF(0, kNotificationIconAnimationLowPosition)));
+
+    std::unique_ptr<ui::LayerAnimationElement> scale_and_move_down =
+        ui::LayerAnimationElement::CreateInterpolatedTransformElement(
+            std::move(scale_about_pivot),
+            base::TimeDelta::FromMilliseconds(
+                kNotificationIconAnimationOutDurationMs));
+    scale_and_move_down->set_tween_type(gfx::Tween::EASE_IN);
+
+    std::unique_ptr<ui::LayerAnimationSequence> sequence =
+        std::make_unique<ui::LayerAnimationSequence>();
+
+    sequence->AddElement(std::move(scale_and_move_down));
+    sequence->AddObserver(this);
+    set_animating_out(true);
+    layer()->GetAnimator()->StartAnimation(sequence.release());
+    // Note |this| may be deleted after this point.
+  }
+
+  // ui::LayerAnimationObserver:
+  void OnLayerAnimationEnded(ui::LayerAnimationSequence* sequence) override {
+    set_animating_out(false);
+    notification_bar_->OnIconAnimatedOut(this);
+    // Note |this| is deleted after this point.
+  }
+
+  void OnLayerAnimationAborted(ui::LayerAnimationSequence* sequence) override {}
+
+  void OnLayerAnimationScheduled(
+      ui::LayerAnimationSequence* sequence) override {}
+
   const std::string& id() const { return id_; }
+  bool is_animating_out() const { return animating_out_; }
+  void set_animating_out(bool animating_out) { animating_out_ = animating_out; }
 
  private:
+  StackedNotificationBar* notification_bar_;
   std::string id_;
+  bool animating_out_ = false;
 };
 
 StackedNotificationBar::StackedNotificationBar(
@@ -238,7 +342,7 @@
     message_center::Notification* notification,
     bool at_front) {
   views::ImageView* icon_view_ =
-      new StackedNotificationBarIcon(notification->id());
+      new StackedNotificationBarIcon(this, notification->id());
   if (at_front)
     notification_icons_container_->AddChildViewAt(icon_view_, 0);
   else
@@ -257,8 +361,26 @@
   }
 }
 
+void StackedNotificationBar::OnIconAnimatedOut(views::View* icon) {
+  delete icon;
+  Layout();
+}
+
+StackedNotificationBar::StackedNotificationBarIcon*
+StackedNotificationBar::GetFrontIcon() {
+  const auto i = std::find_if(
+      notification_icons_container_->children().cbegin(),
+      notification_icons_container_->children().cend(), [](const auto* v) {
+        return !static_cast<const StackedNotificationBarIcon*>(v)
+                    ->is_animating_out();
+      });
+
+  return (i == notification_icons_container_->children().cend()
+              ? nullptr
+              : static_cast<StackedNotificationBarIcon*>(*i));
+}
 const StackedNotificationBar::StackedNotificationBarIcon*
-StackedNotificationBar::GetIconFromId(const std::string& id) {
+StackedNotificationBar::GetIconFromId(const std::string& id) const {
   for (auto* v : notification_icons_container_->children()) {
     const StackedNotificationBarIcon* icon =
         static_cast<const StackedNotificationBarIcon*>(v);
@@ -276,10 +398,20 @@
                kStackedNotificationBarMaxIcons);
 
   // Remove required number of icons from the front.
-  for (int i = 0; i < removed_icons_count; i++) {
-    delete notification_icons_container_->children().front();
+  // Only animate if we're removing one icon.
+  if (removed_icons_count == 1) {
+    StackedNotificationBarIcon* icon = GetFrontIcon();
+    if (icon) {
+      icon->AnimateOut();
+    }
+  } else {
+    for (int i = 0; i < removed_icons_count; i++) {
+      StackedNotificationBarIcon* icon = GetFrontIcon();
+      if (icon) {
+        delete icon;
+      }
+    }
   }
-
   // Add icons to the back if there was a backfill.
   int backfill_start = kStackedNotificationBarMaxIcons - removed_icons_count;
   int backfill_end =
@@ -306,6 +438,10 @@
                         true /*at_front*/);
     ++stacked_notification_count_;
   }
+  // Animate in the first stacked notification icon.
+  StackedNotificationBarIcon* icon = GetFrontIcon();
+  if (icon)
+    GetFrontIcon()->AnimateIn();
 }
 
 void StackedNotificationBar::UpdateStackedNotifications(
diff --git a/ash/system/message_center/stacked_notification_bar.h b/ash/system/message_center/stacked_notification_bar.h
index 8fb0085..4dd2c82 100644
--- a/ash/system/message_center/stacked_notification_bar.h
+++ b/ash/system/message_center/stacked_notification_bar.h
@@ -9,6 +9,7 @@
 #include "ash/system/message_center/message_center_scroll_bar.h"
 #include "ash/system/message_center/unified_message_center_view.h"
 #include "ash/system/message_center/unified_message_list_view.h"
+#include "ui/compositor/layer_animation_observer.h"
 #include "ui/gfx/animation/animation_delegate.h"
 #include "ui/message_center/message_center_observer.h"
 #include "ui/views/background.h"
@@ -50,6 +51,9 @@
   // Set notification bar state to expanded.
   void SetExpanded();
 
+  // Clean up icon view after it's removal animation is complete.
+  void OnIconAnimatedOut(views::View* icon);
+
   // views::View:
   void OnPaint(gfx::Canvas* canvas) override;
   const char* GetClassName() const override;
@@ -66,9 +70,12 @@
   class StackedNotificationBarIcon;
   friend class UnifiedMessageCenterViewTest;
 
+  // Get the first icon which is not animating out.
+  StackedNotificationBarIcon* GetFrontIcon();
+
   // Search for a icon view in the stacked notification bar based on a provided
   // notification id.
-  const StackedNotificationBarIcon* GetIconFromId(const std::string& id);
+  const StackedNotificationBarIcon* GetIconFromId(const std::string& id) const;
 
   // Set visibility based on number of stacked notifications or animation state.
   void UpdateVisibility();
diff --git a/ash/system/tray/tray_constants.h b/ash/system/tray/tray_constants.h
index 0aa1c56..a55f116 100644
--- a/ash/system/tray/tray_constants.h
+++ b/ash/system/tray/tray_constants.h
@@ -135,6 +135,12 @@
 constexpr int kStackedNotificationBarMaxIcons = 3;
 constexpr int kStackedNotificationBarIconSpacing = 6;
 constexpr int kStackedNotificationIconSize = 18;
+constexpr int kNotificationIconAnimationLowPosition = 7;
+constexpr int kNotificationIconAnimationHighPosition = -3;
+constexpr double kNotificationIconAnimationScaleFactor = 0.77;
+constexpr int kNotificationIconAnimationUpDurationMs = 50;
+constexpr int kNotificationIconAnimationDownDurationMs = 17;
+constexpr int kNotificationIconAnimationOutDurationMs = 67;
 
 // Constants used in FeaturePodsView of UnifiedSystemTray.
 constexpr gfx::Size kUnifiedFeaturePodIconSize(48, 48);
diff --git a/base/android/java/src/org/chromium/base/EarlyTraceEvent.java b/base/android/java/src/org/chromium/base/EarlyTraceEvent.java
index 27c18d24..00b9548d 100644
--- a/base/android/java/src/org/chromium/base/EarlyTraceEvent.java
+++ b/base/android/java/src/org/chromium/base/EarlyTraceEvent.java
@@ -143,7 +143,7 @@
                 shouldEnable = true;
             } else {
                 try {
-                    shouldEnable = (new File(TRACE_CONFIG_FILENAME)).exists();
+                    shouldEnable = new File(TRACE_CONFIG_FILENAME).exists();
                 } catch (SecurityException e) {
                     // Access denied, not enabled.
                 }
diff --git a/base/android/java/src/org/chromium/base/process_launcher/ChildProcessConnection.java b/base/android/java/src/org/chromium/base/process_launcher/ChildProcessConnection.java
index 905a2fe..dcf824b8 100644
--- a/base/android/java/src/org/chromium/base/process_launcher/ChildProcessConnection.java
+++ b/base/android/java/src/org/chromium/base/process_launcher/ChildProcessConnection.java
@@ -161,9 +161,13 @@
         public void updateGroupImportance(int group, int importanceInGroup) {
             assert isBound();
             if (BindService.supportVariableConnections()) {
-                ApiHelperForQ.updateServiceGroup(mContext, this, group, importanceInGroup);
-                BindService.doBindService(mContext, mBindIntent, this, mBindFlags, mHandler,
-                        mExecutor, mInstanceName);
+                try {
+                    ApiHelperForQ.updateServiceGroup(mContext, this, group, importanceInGroup);
+                    BindService.doBindService(mContext, mBindIntent, this, mBindFlags, mHandler,
+                            mExecutor, mInstanceName);
+                } catch (IllegalArgumentException e) {
+                    // TODO(crbug.com/1026626): Stop ignoring this exception.
+                }
             }
         }
 
diff --git a/base/task/thread_pool/thread_group_impl.cc b/base/task/thread_pool/thread_group_impl.cc
index 22409c19..c9361809 100644
--- a/base/task/thread_pool/thread_group_impl.cc
+++ b/base/task/thread_pool/thread_group_impl.cc
@@ -387,12 +387,6 @@
     Optional<TimeDelta> may_block_threshold) {
   DCHECK(!replacement_thread_group_);
 
-  ScopedWorkersExecutor executor(this);
-
-  CheckedAutoLock auto_lock(lock_);
-
-  DCHECK(workers_.empty());
-
   in_start().may_block_without_delay =
       FeatureList::IsEnabled(kMayBlockWithoutDelay) &&
       priority_hint_ == ThreadPriority::NORMAL;
@@ -405,6 +399,10 @@
       priority_hint_ == ThreadPriority::NORMAL ? kForegroundBlockedWorkersPoll
                                                : kBackgroundBlockedWorkersPoll;
 
+  ScopedWorkersExecutor executor(this);
+  CheckedAutoLock auto_lock(lock_);
+
+  DCHECK(workers_.empty());
   max_tasks_ = max_tasks;
   DCHECK_GE(max_tasks_, 1U);
   in_start().initial_max_tasks = max_tasks_;
diff --git a/base/test/android/junit/src/org/chromium/base/test/util/SkipCheckTest.java b/base/test/android/junit/src/org/chromium/base/test/util/SkipCheckTest.java
index 51c7516e..9ea9b0d9 100644
--- a/base/test/android/junit/src/org/chromium/base/test/util/SkipCheckTest.java
+++ b/base/test/android/junit/src/org/chromium/base/test/util/SkipCheckTest.java
@@ -4,8 +4,6 @@
 
 package org.chromium.base.test.util;
 
-import junit.framework.TestCase;
-
 import org.junit.Assert;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -50,13 +48,6 @@
         public void anotherUnannotatedMethod() {}
     }
 
-    private class ExtendsTestCaseClass extends TestCase {
-        public ExtendsTestCaseClass(String name) {
-            super(name);
-        }
-        public void testMethodA() {}
-    }
-
     private class UnannotatedBaseClass {
         public void unannotatedMethod() {}
         @TestAnnotation public void annotatedMethod() {}
diff --git a/build/android/gyp/write_build_config.py b/build/android/gyp/write_build_config.py
index 9dc03f6..7dd3c326 100755
--- a/build/android/gyp/write_build_config.py
+++ b/build/android/gyp/write_build_config.py
@@ -370,11 +370,14 @@
 A boolean indicating whether native libraries are stored uncompressed in the
 APK.
 
-* `native['extra_shared_libraries']`
+* `native['loadable_modules']`
 A list of native libraries to store within the APK, in addition to those from
 `native['libraries']`. These correspond to things like the Chromium linker
 or instrumentation libraries.
 
+* `native['secondary_abi_loadable_modules']`
+Secondary ABI version of loadable_modules
+
 * `assets`
 A list of assets stored compressed in the APK. Each entry has the format
 `<source-path>:<destination-path>`, where `<source-path>` is relative to
@@ -881,19 +884,21 @@
   parser.add_option('--shared-libraries-runtime-deps',
                     help='Path to file containing runtime deps for shared '
                          'libraries.')
-  parser.add_option('--native-libs',
-                    action='append',
-                    help='GN-list of native libraries for primary '
-                         'android-abi. Can be specified multiple times.',
-                    default=[])
+  parser.add_option(
+      '--loadable-modules',
+      action='append',
+      help='GN-list of native libraries for primary '
+      'android-abi. Can be specified multiple times.',
+      default=[])
   parser.add_option('--secondary-abi-shared-libraries-runtime-deps',
                     help='Path to file containing runtime deps for secondary '
                          'abi shared libraries.')
-  parser.add_option('--secondary-native-libs',
-                    action='append',
-                    help='GN-list of native libraries for secondary '
-                         'android-abi. Can be specified multiple times.',
-                    default=[])
+  parser.add_option(
+      '--secondary-abi-loadable-modules',
+      action='append',
+      help='GN-list of native libraries for secondary '
+      'android-abi. Can be specified multiple times.',
+      default=[])
   parser.add_option(
       '--native-lib-placeholders',
       action='append',
@@ -1669,16 +1674,15 @@
           options.secondary_abi_shared_libraries_runtime_deps)
       all_inputs.append(options.secondary_abi_shared_libraries_runtime_deps)
 
-    secondary_abi_library_paths.extend(
-        build_utils.ParseGnList(options.secondary_native_libs))
-
     native_library_placeholder_paths = build_utils.ParseGnList(
         options.native_lib_placeholders)
 
     secondary_native_library_placeholder_paths = build_utils.ParseGnList(
         options.secondary_native_lib_placeholders)
 
-    extra_shared_libraries = build_utils.ParseGnList(options.native_libs)
+    loadable_modules = build_utils.ParseGnList(options.loadable_modules)
+    secondary_abi_loadable_modules = build_utils.ParseGnList(
+        options.secondary_abi_loadable_modules)
 
     config['native'] = {
         'libraries':
@@ -1693,8 +1697,10 @@
         java_libraries_list,
         'uncompress_shared_libraries':
         options.uncompress_shared_libraries,
-        'extra_shared_libraries':
-        extra_shared_libraries,
+        'loadable_modules':
+        loadable_modules,
+        'secondary_abi_loadable_modules':
+        secondary_abi_loadable_modules,
     }
     config['assets'], config['uncompressed_assets'], locale_paks = (
         _MergeAssets(deps.All('android_assets')))
diff --git a/build/android/pylib/local/device/local_device_instrumentation_test_run.py b/build/android/pylib/local/device/local_device_instrumentation_test_run.py
index 8134d62..2d2ffd4 100644
--- a/build/android/pylib/local/device/local_device_instrumentation_test_run.py
+++ b/build/android/pylib/local/device/local_device_instrumentation_test_run.py
@@ -561,6 +561,7 @@
     with ui_capture_dir:
       with self._env.output_manager.ArchivedTempfile(
           stream_name, 'logcat') as logcat_file:
+        logmon = None
         try:
           with logcat_monitor.LogcatMonitor(
               device.adb,
@@ -575,7 +576,8 @@
                 output = device.StartInstrumentation(
                     target, raw=True, extras=extras, timeout=timeout, retries=0)
         finally:
-          logmon.Close()
+          if logmon:
+            logmon.Close()
 
       if logcat_file.Link():
         logging.info('Logcat saved to %s', logcat_file.Link())
diff --git a/build/config/android/internal_rules.gni b/build/config/android/internal_rules.gni
index 769ac3f..4f68be2 100644
--- a/build/config/android/internal_rules.gni
+++ b/build/config/android/internal_rules.gni
@@ -366,15 +366,10 @@
       args += [ "--is-base-module" ]
     }
 
-    if (defined(invoker.loadable_modules) && invoker.loadable_modules != []) {
-      _rebased_modules = rebase_path(invoker.loadable_modules, root_build_dir)
-      args += [ "--native-libs=$_rebased_modules" ]
-    }
-
-    if (defined(invoker.extra_shared_libraries)) {
-      _rebased_extra_shared_libraries =
-          rebase_path(invoker.extra_shared_libraries, root_build_dir)
-      args += [ "--native-libs=$_rebased_extra_shared_libraries" ]
+    if (defined(invoker.loadable_modules)) {
+      _rebased_loadable_modules =
+          rebase_path(invoker.loadable_modules, root_build_dir)
+      args += [ "--loadable-modules=$_rebased_loadable_modules" ]
     }
 
     if (defined(invoker.secondary_abi_shared_libraries_runtime_deps_file)) {
@@ -390,9 +385,9 @@
 
     if (defined(invoker.secondary_abi_loadable_modules) &&
         invoker.secondary_abi_loadable_modules != []) {
-      _rebased_secondary_abi_modules =
+      _rebased_secondary_abi_loadable_modules =
           rebase_path(invoker.secondary_abi_loadable_modules, root_build_dir)
-      args += [ "--secondary-native-libs=$_rebased_secondary_abi_modules" ]
+      args += [ "--secondary-abi-loadable-modules=$_rebased_secondary_abi_loadable_modules" ]
     }
 
     if (defined(invoker.native_lib_placeholders) &&
@@ -2557,9 +2552,9 @@
   #     (optional).
   #   secondary_native_lib_placeholders: List of placeholder filenames to add to
   #     the apk for the secondary ABI (optional).
-  #   native_libs: List of native libraries.
+  #   loadable_modules: List of native libraries.
   #   native_libs_filearg: @FileArg() of additionally native libraries.
-  #   secondary_abi_native_libs: (optional) List of native libraries for
+  #   secondary_abi_loadable_modules: (optional) List of native libraries for
   #     secondary ABI.
   #   secondary_abi_native_libs_filearg: (optional). @FileArg() of additional
   #     secondary ABI native libs.
@@ -2594,12 +2589,12 @@
         "//tools/android/md5sum",
       ]  # Used when deploying APKs
 
-      inputs = invoker.native_libs + [
-                 invoker.keystore_path,
-                 invoker.packaged_resources_path,
-                 _apksigner,
-                 _zipalign,
-               ]
+      inputs = [
+        invoker.keystore_path,
+        invoker.packaged_resources_path,
+        _apksigner,
+        _zipalign,
+      ]
 
       outputs = [
         invoker.output_apk_path,
@@ -2648,16 +2643,20 @@
         _rebased_dex_path = rebase_path(invoker.dex_path, root_build_dir)
         args += [ "--dex-file=$_rebased_dex_path" ]
       }
-      if (invoker.native_libs != [] || defined(invoker.native_libs_filearg) ||
+      if ((defined(invoker.loadable_modules) &&
+           invoker.loadable_modules != []) ||
+          defined(invoker.native_libs_filearg) ||
           _native_lib_placeholders != []) {
         args += [ "--android-abi=$android_app_abi" ]
       }
       if (defined(android_app_secondary_abi)) {
         args += [ "--secondary-android-abi=$android_app_secondary_abi" ]
       }
-      if (invoker.native_libs != []) {
-        _rebased_native_libs = rebase_path(invoker.native_libs, root_build_dir)
-        args += [ "--native-libs=$_rebased_native_libs" ]
+      if (defined(invoker.loadable_modules) && invoker.loadable_modules != []) {
+        inputs += invoker.loadable_modules
+        _rebased_loadable_modules =
+            rebase_path(invoker.loadable_modules, root_build_dir)
+        args += [ "--native-libs=$_rebased_loadable_modules" ]
       }
       if (defined(invoker.native_libs_filearg)) {
         args += [ "--native-libs=${invoker.native_libs_filearg}" ]
@@ -2665,13 +2664,20 @@
       if (_native_lib_placeholders != []) {
         args += [ "--native-lib-placeholders=$_native_lib_placeholders" ]
       }
-      if (_secondary_native_lib_placeholders != []) {
-        args += [ "--secondary-native-lib-placeholders=$_secondary_native_lib_placeholders" ]
-      }
 
       if (defined(invoker.secondary_abi_native_libs_filearg)) {
         args += [ "--secondary-native-libs=${invoker.secondary_abi_native_libs_filearg}" ]
       }
+      if (defined(invoker.secondary_abi_loadable_modules)) {
+        _rebased_secondary_abi_loadable_modules =
+            rebase_path(invoker.secondary_abi_loadable_modules, root_build_dir)
+        args += [
+          "--secondary-native-libs=$_rebased_secondary_abi_loadable_modules",
+        ]
+      }
+      if (_secondary_native_lib_placeholders != []) {
+        args += [ "--secondary-native-lib-placeholders=$_secondary_native_lib_placeholders" ]
+      }
 
       if (defined(invoker.uncompress_shared_libraries) &&
           invoker.uncompress_shared_libraries) {
@@ -3007,8 +3013,10 @@
   #  secondary_abi_shared_libraries_runtime_deps_file:
   #  secondary_native_lib_placeholders: Optional. List of placeholder filenames
   #    to add to the APK for the secondary ABI.
-  #  extra_shared_libraries: Optional list of extra native libraries to
+  #  loadable_modules: Optional list of extra native libraries to
   #    be stored in the APK.
+  #  secondary_abi_loadable_modules: Optional list of native libraries for
+  #    secondary ABI.
   #  uncompress_shared_libraries: Optional. True to store native shared
   #    libraries uncompressed and page-aligned.
   #  proto_resources_path: The path of an zip archive containing the APK's
@@ -3214,13 +3222,11 @@
                                "base_whitelist_rtxt_path",
                                "gradle_treat_as_prebuilt",
                                "input_jars_paths",
-                               "loadable_modules",
                                "main_class",
                                "proguard_configs",
                                "proguard_enabled",
                                "proguard_mapping_path",
                                "r_text_path",
-                               "secondary_abi_loadable_modules",
                                "type",
                              ])
       if (type == "android_apk" || type == "android_app_bundle_module") {
@@ -3229,10 +3235,11 @@
             [
               "android_manifest",
               "android_manifest_dep",
-              "extra_shared_libraries",
               "final_dex_path",
+              "loadable_modules",
               "native_lib_placeholders",
               "res_size_info_path",
+              "secondary_abi_loadable_modules",
               "secondary_abi_shared_libraries_runtime_deps_file",
               "secondary_native_lib_placeholders",
               "shared_libraries_runtime_deps_file",
diff --git a/build/config/android/rules.gni b/build/config/android/rules.gni
index 5deafa2..e59439e1 100644
--- a/build/config/android/rules.gni
+++ b/build/config/android/rules.gni
@@ -2313,11 +2313,6 @@
     _native_libs_deps = []
     _shared_libraries_is_valid =
         defined(invoker.shared_libraries) && invoker.shared_libraries != []
-    _secondary_abi_native_libs_deps = []
-    assert(_secondary_abi_native_libs_deps == [])  # mark as used.
-    _secondary_abi_shared_libraries_is_valid =
-        defined(invoker.secondary_abi_shared_libraries) &&
-        invoker.secondary_abi_shared_libraries != []
 
     if (_shared_libraries_is_valid) {
       _native_libs_deps += invoker.shared_libraries
@@ -2341,8 +2336,12 @@
       }
     }
 
-    if (_secondary_abi_shared_libraries_is_valid) {
-      _secondary_abi_native_libs_deps += invoker.secondary_abi_shared_libraries
+    _secondary_abi_native_libs_deps = []
+    assert(_secondary_abi_native_libs_deps == [])  # mark as used.
+
+    if (defined(invoker.secondary_abi_shared_libraries) &&
+        invoker.secondary_abi_shared_libraries != []) {
+      _secondary_abi_native_libs_deps = invoker.secondary_abi_shared_libraries
 
       # Write shared library output files of all dependencies to a file. Those
       # will be the shared libraries packaged into the APK.
@@ -2721,15 +2720,18 @@
       }
     }
 
-    _extra_native_libs = []
-    _extra_native_libs_deps = []
-    assert(_extra_native_libs_deps == [])  # Mark as used.
+    _loadable_modules = []
+    if (defined(invoker.loadable_modules)) {
+      _loadable_modules = invoker.loadable_modules
+    }
+
+    _loadable_modules_deps = []
     if (_native_libs_deps != []) {
-      _extra_native_libs += _sanitizer_runtimes
+      _loadable_modules += _sanitizer_runtimes
       if (_use_chromium_linker) {
-        _extra_native_libs +=
+        _loadable_modules +=
             [ "$root_out_dir/libchromium_android_linker$shlib_extension" ]
-        _extra_native_libs_deps +=
+        _loadable_modules_deps +=
             [ "//base/android/linker:chromium_android_linker" ]
       }
     }
@@ -2820,7 +2822,6 @@
                                "jacoco_never_instrument",
                                "java_files",
                                "javac_args",
-                               "loadable_modules",
                                "manifest_package",
                                "native_lib_placeholders",
                                "no_build_hooks",
@@ -2897,12 +2898,12 @@
       if (_native_libs_deps != []) {
         shared_libraries_runtime_deps_file = _shared_library_list_file
       }
-      if (_secondary_abi_native_libs_deps != []) {
+      if (defined(_secondary_abi_shared_library_list_file)) {
         secondary_abi_shared_libraries_runtime_deps_file =
             _secondary_abi_shared_library_list_file
       }
 
-      extra_shared_libraries = _extra_native_libs
+      loadable_modules = _loadable_modules
 
       uncompress_shared_libraries = _uncompress_shared_libraries
 
@@ -3111,8 +3112,6 @@
       }
     }
 
-    _loadable_modules = []
-    assert(_loadable_modules == [])  # Mark as used.
     if (_native_libs_deps != []) {
       _create_stack_script_rule_name = "${_template_name}__stack_script"
       _final_deps += [ ":${_create_stack_script_rule_name}" ]
@@ -3122,11 +3121,7 @@
       }
     }
 
-    if (defined(invoker.loadable_modules) && invoker.loadable_modules != []) {
-      _loadable_modules += invoker.loadable_modules
-    }
-
-    _all_native_libs_deps = _native_libs_deps + _extra_native_libs_deps +
+    _all_native_libs_deps = _native_libs_deps + _loadable_modules_deps +
                             _secondary_abi_native_libs_deps
     if (_all_native_libs_deps != []) {
       _native_libs_file_arg_dep = ":$_build_config_target"
@@ -3223,6 +3218,7 @@
         forward_variables_from(invoker,
                                [
                                  "native_lib_placeholders",
+                                 "secondary_abi_loadable_modules",
                                  "secondary_native_lib_placeholders",
                                  "uncompress_dex",
                                  "uncompress_shared_libraries",
@@ -3234,7 +3230,6 @@
         keystore_password = _keystore_password
         uncompress_shared_libraries = _uncompress_shared_libraries
 
-        native_libs = _loadable_modules
         deps = _deps + [ ":$_build_config_target" ]
 
         if (_incremental_apk) {
@@ -3249,16 +3244,18 @@
           dex_path =
               get_label_info(_dex_target, "target_out_dir") + "/bootstrap.dex"
 
-          # http://crbug.com/384638
+          # All native libraries are side-loaded, so use a placeholder to force
+          # the proper bitness for the app.
           _has_native_libs =
-              defined(invoker.native_libs_filearg) || _extra_native_libs != []
-          if (_has_native_libs && _loadable_modules == []) {
+              defined(invoker.native_libs_filearg) || _loadable_modules != []
+          if (_has_native_libs) {
             native_lib_placeholders = [ "libfix.crbug.384638.so" ]
           }
 
           packaged_resources_path = _incremental_compiled_resources_path
           output_apk_path = _incremental_apk_path
         } else {
+          loadable_modules = _loadable_modules
           deps += _all_native_libs_deps + [
                     ":$_merge_manifest_target",
                     ":$_compile_resources_target",
@@ -3269,7 +3266,6 @@
             deps += [ _final_dex_target_dep ]
           }
 
-          native_libs += _extra_native_libs
           if (_optimize_resources) {
             packaged_resources_path = _optimized_arsc_resources_path
           } else {
@@ -3317,10 +3313,10 @@
           args += [ "--native-libs=$_native_libs_file_arg" ]
           deps += [ _native_libs_file_arg_dep ]
         }
-        if (_extra_native_libs != []) {
-          _rebased_extra_native_libs =
-              rebase_path(_extra_native_libs, root_build_dir)
-          args += [ "--native-libs=$_rebased_extra_native_libs" ]
+        if (_loadable_modules != []) {
+          _rebased_loadable_modules =
+              rebase_path(_loadable_modules, root_build_dir)
+          args += [ "--native-libs=$_rebased_loadable_modules" ]
         }
         if (_load_library_from_apk) {
           args += [ "--dont-even-try=Incremental builds do not work with load_library_from_apk. Try setting is_component_build=true in your GN args." ]
@@ -3401,7 +3397,7 @@
 
         # device/commands is used by the installer script to push files via .zip.
         data_deps += [ "//build/android/pylib/device/commands" ] +
-                     _native_libs_deps + _extra_native_libs_deps
+                     _native_libs_deps + _loadable_modules_deps
       }
     }
   }
@@ -4583,7 +4579,7 @@
       modules = _modules
       native_libraries_filearg_keys = [
         "native:libraries",
-        "native:extra_shared_libraries",
+        "native:loadable_modules",
       ]
       output = _native_libraries_config
       if (_uses_static_library) {
@@ -4596,7 +4592,10 @@
       allot_native_libraries(
           "${_target_name}__allot_secondary_abi_native_libraries") {
         modules = _modules
-        native_libraries_filearg_keys = [ "native:secondary_abi_libraries" ]
+        native_libraries_filearg_keys = [
+          "native:secondary_abi_libraries",
+          "native:secondary_abi_loadable_modules",
+        ]
         output = _secondary_abi_native_libraries_config
         if (_uses_static_library) {
           modules += [ _lib_proxy_module ]
diff --git a/build/config/compiler/BUILD.gn b/build/config/compiler/BUILD.gn
index 8332b0df..a2efec3c 100644
--- a/build/config/compiler/BUILD.gn
+++ b/build/config/compiler/BUILD.gn
@@ -1549,6 +1549,13 @@
           # TODO(https://crbug.com/995993): Clean up and enable.
           "-Wno-implicit-fallthrough",
         ]
+
+        if (llvm_force_head_revision) {
+          cflags += [
+            # TODO(https://crbug.com/1028110): Evaluate and possible enable.
+            "-Wno-deprecated-copy",
+          ]
+        }
       }
     }
   }
diff --git a/build/fuchsia/linux.sdk.sha1 b/build/fuchsia/linux.sdk.sha1
index 8b4a8cdd..c3e440d 100644
--- a/build/fuchsia/linux.sdk.sha1
+++ b/build/fuchsia/linux.sdk.sha1
@@ -1 +1 @@
-8896059997067117680
\ No newline at end of file
+8895808422754580784
\ No newline at end of file
diff --git a/chrome/android/chrome_junit_test_java_sources.gni b/chrome/android/chrome_junit_test_java_sources.gni
index c829893..a3b28f9 100644
--- a/chrome/android/chrome_junit_test_java_sources.gni
+++ b/chrome/android/chrome_junit_test_java_sources.gni
@@ -86,6 +86,8 @@
   "junit/src/org/chromium/chrome/browser/firstrun/ToSAckedReceiverTest.java",
   "junit/src/org/chromium/chrome/browser/fullscreen/BrowserStateBrowserControlsVisibilityDelegateTest.java",
   "junit/src/org/chromium/chrome/browser/gcore/GoogleApiClientHelperTest.java",
+  "junit/src/org/chromium/chrome/browser/history/HistoryAdapterAccessibilityTest.java",
+  "junit/src/org/chromium/chrome/browser/history/HistoryAdapterTest.java",
   "junit/src/org/chromium/chrome/browser/history/HistoryDeletionBridgeTest.java",
   "junit/src/org/chromium/chrome/browser/homepage/HomepagePolicyManagerTest.java",
   "junit/src/org/chromium/chrome/browser/image_fetcher/CachedImageFetcherTest.java",
diff --git a/chrome/android/chrome_test_java_sources.gni b/chrome/android/chrome_test_java_sources.gni
index e119286f..1e8734f 100644
--- a/chrome/android/chrome_test_java_sources.gni
+++ b/chrome/android/chrome_test_java_sources.gni
@@ -193,11 +193,6 @@
   "javatests/src/org/chromium/chrome/browser/hardware_acceleration/WebappActivityHWATest.java",
   "javatests/src/org/chromium/chrome/browser/history/HistoryActivityTest.java",
   "javatests/src/org/chromium/chrome/browser/history/HistoryActivityScrollingTest.java",
-  "javatests/src/org/chromium/chrome/browser/history/HistoryAdapterTest.java",
-  "javatests/src/org/chromium/chrome/browser/history/HistoryAdapterAccessibilityTest.java",
-  "javatests/src/org/chromium/chrome/browser/history/HistoryTestUtils.java",
-  "javatests/src/org/chromium/chrome/browser/history/StubbedHistoryProvider.java",
-  "javatests/src/org/chromium/chrome/browser/history/TestBrowsingHistoryObserver.java",
   "javatests/src/org/chromium/chrome/browser/identity/SettingsSecureBasedIdentificationGeneratorTest.java",
   "javatests/src/org/chromium/chrome/browser/identity/UniqueIdentificationGeneratorFactoryTest.java",
   "javatests/src/org/chromium/chrome/browser/identity/UuidBasedUniqueIdentificationGeneratorTest.java",
diff --git a/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantCollectUserDataTestHelper.java b/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantCollectUserDataTestHelper.java
index ed49c9c..a1541bb 100644
--- a/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantCollectUserDataTestHelper.java
+++ b/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantCollectUserDataTestHelper.java
@@ -165,7 +165,7 @@
 
     void setRequestTimeoutForTesting() {
         TestThreadUtils.runOnUiThreadBlocking(
-                () -> PersonalDataManager.getInstance().setRequestTimeoutForTesting(0));
+                () -> PersonalDataManager.setRequestTimeoutForTesting(0));
     }
 
     void setSyncServiceForTesting() {
diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListMediator.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListMediator.java
index fa71f2c..947ba89 100644
--- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListMediator.java
+++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListMediator.java
@@ -449,6 +449,22 @@
                     }
                     sTabClosedFromMapTabClosedFromMap.remove(tab.getId());
                 }
+                // TODO(yuezhanggg): clean up updateTab() calls in this class.
+                if (mActionsOnAllRelatedTabs) {
+                    TabModelFilter filter = mTabModelSelector.getTabModelFilterProvider()
+                                                    .getCurrentTabModelFilter();
+                    int index = filter.indexOf(tab);
+                    if (index == TabList.INVALID_TAB_INDEX
+                            || getRelatedTabsForId(tab.getId()).size() == 1) {
+                        return;
+                    }
+                    Tab currentGroupSelectedTab = filter.getTabAt(index);
+
+                    assert mModel.indexFromId(currentGroupSelectedTab.getId()) == index;
+
+                    updateTab(index, currentGroupSelectedTab,
+                            mModel.get(index).model.get(TabProperties.IS_SELECTED), false, false);
+                }
             }
 
             @Override
diff --git a/chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/TabGridDialogTest.java b/chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/TabGridDialogTest.java
index 0e883159..e9757093 100644
--- a/chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/TabGridDialogTest.java
+++ b/chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/TabGridDialogTest.java
@@ -9,6 +9,7 @@
 import static android.support.test.espresso.assertion.ViewAssertions.doesNotExist;
 import static android.support.test.espresso.assertion.ViewAssertions.matches;
 import static android.support.test.espresso.matcher.RootMatchers.withDecorView;
+import static android.support.test.espresso.matcher.ViewMatchers.isCompletelyDisplayed;
 import static android.support.test.espresso.matcher.ViewMatchers.isDisplayed;
 import static android.support.test.espresso.matcher.ViewMatchers.withId;
 import static android.support.test.espresso.matcher.ViewMatchers.withParent;
@@ -30,13 +31,17 @@
 import android.graphics.Rect;
 import android.support.test.espresso.Espresso;
 import android.support.test.espresso.NoMatchingRootException;
+import android.support.test.espresso.UiController;
+import android.support.test.espresso.ViewAction;
 import android.support.test.espresso.contrib.RecyclerViewActions;
 import android.support.test.filters.MediumTest;
 import android.support.v7.widget.RecyclerView;
 import android.view.View;
 import android.view.ViewGroup;
 import android.widget.EditText;
+import android.widget.TextView;
 
+import org.hamcrest.Matcher;
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Rule;
@@ -218,6 +223,38 @@
         CriteriaHelper.pollInstrumentationThread(() -> isDialogShowing(cta));
     }
 
+    @Test
+    @MediumTest
+    public void testUndoClosureInDialog() throws InterruptedException {
+        final ChromeTabbedActivity cta = mActivityTestRule.getActivity();
+        createTabs(cta, false, 2);
+        enterTabSwitcher(cta);
+        verifyTabSwitcherCardCount(cta, 2);
+
+        // Create a tab group.
+        mergeAllTabsToAGroup(cta);
+        verifyTabSwitcherCardCount(cta, 1);
+
+        // Open dialog and verify dialog is showing correct content.
+        openDialogFromTabSwitcherAndVerify(cta, 2);
+
+        // Click close button to close the first tab in group.
+        closeFirstTabInDialog(cta);
+        verifyShowingDialog(cta, 1);
+
+        // Exit dialog, wait for the undo bar showing and undo the closure.
+        TabUiTestHelper.clickScrimToExitDialog(cta);
+        CriteriaHelper.pollInstrumentationThread(() -> !isDialogShowing(cta));
+        CriteriaHelper.pollInstrumentationThread(this::verifyUndoBarShowingAndClickUndo);
+
+        // Verify the undo has happened.
+        onView(withId(R.id.tab_title)).check((v, noMatchException) -> {
+            TextView textView = (TextView) v;
+            assertEquals("2 tabs", textView.getText().toString());
+        });
+        openDialogFromTabSwitcherAndVerify(cta, 2);
+    }
+
     private void mergeAllTabsToAGroup(ChromeTabbedActivity cta) {
         List<Tab> tabGroup = new ArrayList<>();
         TabModel tabModel = cta.getTabModelSelector().getModel(false);
@@ -312,4 +349,42 @@
                     assertEquals(isEnabled, v.isFocused());
                 });
     }
+
+    private void closeFirstTabInDialog(ChromeTabbedActivity cta) {
+        onView(withId(R.id.tab_list_view))
+                .inRoot(withDecorView(not(cta.getWindow().getDecorView())))
+                .perform(new ViewAction() {
+                    @Override
+                    public Matcher<View> getConstraints() {
+                        return isDisplayed();
+                    }
+
+                    @Override
+                    public String getDescription() {
+                        return "close first tab";
+                    }
+
+                    @Override
+                    public void perform(UiController uiController, View view) {
+                        RecyclerView recyclerView = (RecyclerView) view;
+                        RecyclerView.ViewHolder viewHolder =
+                                recyclerView.findViewHolderForAdapterPosition(0);
+                        assert viewHolder != null;
+                        viewHolder.itemView.findViewById(R.id.action_button).performClick();
+                    }
+                });
+    }
+
+    private boolean verifyUndoBarShowingAndClickUndo() {
+        boolean isShowing = true;
+        try {
+            onView(withId(R.id.snackbar_button)).check(matches(isCompletelyDisplayed()));
+            onView(withId(R.id.snackbar_button)).perform(click());
+        } catch (NoMatchingRootException | AssertionError e) {
+            isShowing = false;
+        } catch (Exception e) {
+            assert false : "error when verifying undo snack bar.";
+        }
+        return isShowing;
+    }
 }
diff --git a/chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/TabGridIphItemTest.java b/chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/TabGridIphItemTest.java
index ae21248..ba9fd02 100644
--- a/chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/TabGridIphItemTest.java
+++ b/chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/TabGridIphItemTest.java
@@ -12,7 +12,6 @@
 import static android.support.test.espresso.matcher.ViewMatchers.isDisplayed;
 import static android.support.test.espresso.matcher.ViewMatchers.withId;
 
-import static org.hamcrest.Matchers.instanceOf;
 import static org.hamcrest.Matchers.not;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
@@ -24,15 +23,11 @@
 import android.content.res.Configuration;
 import android.os.Build;
 import android.support.test.espresso.NoMatchingRootException;
-import android.support.test.espresso.UiController;
-import android.support.test.espresso.ViewAction;
 import android.support.test.filters.MediumTest;
 import android.util.DisplayMetrics;
-import android.view.View;
 import android.view.ViewGroup;
 import android.widget.TextView;
 
-import org.hamcrest.Matcher;
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Rule;
@@ -48,7 +43,6 @@
 import org.chromium.chrome.browser.ChromeTabbedActivity;
 import org.chromium.chrome.browser.compositor.layouts.Layout;
 import org.chromium.chrome.browser.flags.FeatureUtilities;
-import org.chromium.chrome.browser.widget.ScrimView;
 import org.chromium.chrome.features.start_surface.StartSurfaceLayout;
 import org.chromium.chrome.tab_ui.R;
 import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
@@ -103,7 +97,7 @@
         // Enter the IPH dialog and exit by clicking ScrimView.
         enterIphDialog(cta);
         verifyIphDialogShowing(cta);
-        exitIphDialogByClickingScrim(cta);
+        TabUiTestHelper.clickScrimToExitDialog(cta);
         verifyIphDialogHiding(cta);
 
         // Exiting IPH dialog should not dismiss the IPH.
@@ -195,29 +189,6 @@
                 .perform(click());
     }
 
-    private void exitIphDialogByClickingScrim(ChromeTabbedActivity cta) {
-        onView(instanceOf(ScrimView.class))
-                .inRoot(withDecorView(not(cta.getWindow().getDecorView())))
-                .perform(new ViewAction() {
-                    @Override
-                    public Matcher<View> getConstraints() {
-                        return isDisplayed();
-                    }
-
-                    @Override
-                    public String getDescription() {
-                        return "click on ScrimView";
-                    }
-
-                    @Override
-                    public void perform(UiController uiController, View view) {
-                        assertTrue(view instanceof ScrimView);
-                        ScrimView scrimView = (ScrimView) view;
-                        scrimView.performClick();
-                    }
-                });
-    }
-
     private void enterIphDialog(ChromeTabbedActivity cta) {
         assertTrue(cta.getLayoutManager().overviewVisible());
         onView(withId(R.id.show_me_button)).perform(click());
diff --git a/chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/TabUiTestHelper.java b/chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/TabUiTestHelper.java
index 9743294..2cd2f8c 100644
--- a/chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/TabUiTestHelper.java
+++ b/chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/TabUiTestHelper.java
@@ -6,10 +6,14 @@
 
 import static android.support.test.espresso.Espresso.onView;
 import static android.support.test.espresso.action.ViewActions.click;
+import static android.support.test.espresso.matcher.RootMatchers.withDecorView;
+import static android.support.test.espresso.matcher.ViewMatchers.isDisplayed;
 import static android.support.test.espresso.matcher.ViewMatchers.withId;
 import static android.support.test.espresso.matcher.ViewMatchers.withParent;
 
 import static org.hamcrest.Matchers.allOf;
+import static org.hamcrest.Matchers.instanceOf;
+import static org.hamcrest.Matchers.not;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
@@ -25,11 +29,15 @@
 import android.support.annotation.Nullable;
 import android.support.test.InstrumentationRegistry;
 import android.support.test.espresso.NoMatchingViewException;
+import android.support.test.espresso.UiController;
+import android.support.test.espresso.ViewAction;
 import android.support.test.espresso.ViewAssertion;
 import android.support.test.espresso.contrib.RecyclerViewActions;
 import android.support.v7.widget.RecyclerView;
 import android.view.View;
 
+import org.hamcrest.Matcher;
+
 import org.chromium.base.ContextUtils;
 import org.chromium.chrome.browser.ChromeTabbedActivity;
 import org.chromium.chrome.browser.compositor.layouts.content.TabContentManager;
@@ -37,6 +45,7 @@
 import org.chromium.chrome.browser.tabmodel.TabModel;
 import org.chromium.chrome.browser.tabmodel.TabSelectionType;
 import org.chromium.chrome.browser.tasks.tab_groups.TabGroupModelFilter;
+import org.chromium.chrome.browser.widget.ScrimView;
 import org.chromium.chrome.tab_ui.R;
 import org.chromium.chrome.test.ChromeTabbedActivityTestRule;
 import org.chromium.chrome.test.util.ChromeTabUtils;
@@ -325,6 +334,33 @@
     }
 
     /**
+     * Exit the PopupWindow dialog by clicking the outer ScrimView.
+     * @param cta  The current running activity.
+     */
+    static void clickScrimToExitDialog(ChromeTabbedActivity cta) {
+        onView(instanceOf(ScrimView.class))
+                .inRoot(withDecorView(not(cta.getWindow().getDecorView())))
+                .perform(new ViewAction() {
+                    @Override
+                    public Matcher<View> getConstraints() {
+                        return isDisplayed();
+                    }
+
+                    @Override
+                    public String getDescription() {
+                        return "click on ScrimView";
+                    }
+
+                    @Override
+                    public void perform(UiController uiController, View view) {
+                        assertTrue(view instanceof ScrimView);
+                        ScrimView scrimView = (ScrimView) view;
+                        scrimView.performClick();
+                    }
+                });
+    }
+
+    /**
      * Implementation of {@link ViewAssertion} to verify the {@link RecyclerView} has correct number
      * of children, and children are showing correctly.
      */
diff --git a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedConfiguration.java b/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedConfiguration.java
index 23fdb5f..64843e78 100644
--- a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedConfiguration.java
+++ b/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedConfiguration.java
@@ -83,7 +83,7 @@
 
     private static final String FEED_UI_ENABLED = "feed_ui_enabled";
     /** Default value for the type of UI to request from the server. */
-    public static final boolean FEED_UI_ENABLED_DEFAULT = false;
+    public static final boolean FEED_UI_ENABLED_DEFAULT = true;
 
     private static final String INITIAL_NON_CACHED_PAGE_SIZE = "initial_non_cached_page_size";
     /** Default value for initial non cached page size. */
@@ -120,7 +120,7 @@
 
     private static final String SNIPPETS_ENABLED = "snippets_enabled";
     /** Default value for whether to show article snippets. */
-    public static final boolean SNIPPETS_ENABLED_DEFAULT = false;
+    public static final boolean SNIPPETS_ENABLED_DEFAULT = true;
 
     private static final String SPINNER_DELAY_MS = "spinner_delay";
     /** Default value for delay before showing a spinner. */
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/accessibility_tab_switcher/AccessibilityTabModelWrapper.java b/chrome/android/java/src/org/chromium/chrome/browser/accessibility_tab_switcher/AccessibilityTabModelWrapper.java
index 4452e68..ae92a50 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/accessibility_tab_switcher/AccessibilityTabModelWrapper.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/accessibility_tab_switcher/AccessibilityTabModelWrapper.java
@@ -64,19 +64,6 @@
     // to run against API version 19.
     private boolean mIsAttachedToWindow;
 
-    private class ButtonOnClickListener implements View.OnClickListener {
-        private final boolean mIncognito;
-
-        public ButtonOnClickListener(boolean incognito) {
-            mIncognito = incognito;
-        }
-
-        @Override
-        public void onClick(View v) {
-            setSelectedModel(mIncognito);
-        }
-    }
-
     public AccessibilityTabModelWrapper(Context context) {
         super(context);
     }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenuPropertiesDelegateImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenuPropertiesDelegateImpl.java
index 188226a..e6a524a 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenuPropertiesDelegateImpl.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenuPropertiesDelegateImpl.java
@@ -455,7 +455,20 @@
      * @param currentTab        Current tab being displayed.
      */
     protected void updateBookmarkMenuItem(MenuItem bookmarkMenuItem, Tab currentTab) {
-        bookmarkMenuItem.setEnabled(mBookmarkBridge.isEditBookmarksEnabled());
+        // If this method is called before the {@link #mBookmarkBridgeSupplierCallback} has been
+        // called, try to retrieve the bridge directly from the supplier.
+        if (mBookmarkBridge == null && mBookmarkBridgeSupplier != null) {
+            mBookmarkBridge = mBookmarkBridgeSupplier.get();
+        }
+
+        if (mBookmarkBridge == null) {
+            // If the BookmarkBridge still isn't available, assume the bookmark menu item is not
+            // editable.
+            bookmarkMenuItem.setEnabled(false);
+        } else {
+            bookmarkMenuItem.setEnabled(mBookmarkBridge.isEditBookmarksEnabled());
+        }
+
         if (BookmarkBridge.hasBookmarkIdForTab(currentTab)) {
             bookmarkMenuItem.setIcon(R.drawable.btn_star_filled);
             bookmarkMenuItem.setChecked(true);
@@ -474,7 +487,7 @@
      * @param currentTab      Current tab being displayed.
      */
     protected void updateRequestDesktopSiteMenuItem(
-            Menu menu, Tab currentTab, boolean canShowRequestDekstopSite) {
+            Menu menu, Tab currentTab, boolean canShowRequestDesktopSite) {
         MenuItem requestMenuRow = menu.findItem(R.id.request_desktop_site_row_menu_id);
         MenuItem requestMenuLabel = menu.findItem(R.id.request_desktop_site_id);
         MenuItem requestMenuCheck = menu.findItem(R.id.request_desktop_site_check_id);
@@ -486,7 +499,7 @@
         // Also hide request desktop site on Reader Mode.
         boolean isDistilledPage = DomDistillerUrlUtils.isDistilledPage(url);
 
-        boolean itemVisible = canShowRequestDekstopSite
+        boolean itemVisible = canShowRequestDesktopSite
                 && (!isChromeScheme || currentTab.isNativePage()) && !isDistilledPage;
         requestMenuRow.setVisible(itemVisible);
         if (!itemVisible) return;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/OverlayPanelAnimation.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/OverlayPanelAnimation.java
index eecbe6b..624dccc 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/OverlayPanelAnimation.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/OverlayPanelAnimation.java
@@ -32,7 +32,7 @@
     public static final long MAXIMUM_ANIMATION_DURATION_MS = 350;
 
     /** The minimum animation duration in milliseconds. */
-    private static final long MINIMUM_ANIMATION_DURATION_MS = Math.round(7 * 1000 / 60);
+    private static final long MINIMUM_ANIMATION_DURATION_MS = 7 * 1000 / 60;
 
     /** Average animation velocity in dps per second. */
     private static final float INITIAL_ANIMATION_VELOCITY_DP_PER_SECOND = 1750f;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchUma.java b/chrome/android/java/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchUma.java
index f929e0f..bafd704 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchUma.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchUma.java
@@ -278,15 +278,6 @@
         int NUM_ENTRIES = 2;
     }
 
-    // Constants used to log UMA "enum" histograms for triggering the Translate Onebox.
-    @IntDef({ForceTranslate.DID_FORCE, ForceTranslate.WOULD_FORCE})
-    @Retention(RetentionPolicy.SOURCE)
-    private @interface ForceTranslate {
-        int DID_FORCE = 0;
-        int WOULD_FORCE = 1;
-        int NUM_ENTRIES = 2;
-    }
-
     // Constants used to log UMA "enum" histograms for Quick Answers.
     @IntDef({QuickAnswerSeen.ACTIVATED_WAS_AN_ANSWER_SEEN,
             QuickAnswerSeen.ACTIVATED_WAS_AN_ANSWER_NOT_SEEN,
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadInfoBarController.java b/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadInfoBarController.java
index 1dc7a7c..7d660ab 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadInfoBarController.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadInfoBarController.java
@@ -940,7 +940,7 @@
                 DownloadUtils.openItem(
                         itemId, mIsIncognito, DownloadOpenSource.DOWNLOAD_PROGRESS_INFO_BAR);
             } else {
-                DownloadManagerService.getDownloadManagerService().openDownloadsPage(
+                DownloadManagerService.openDownloadsPage(
                         getContext(), DownloadOpenSource.DOWNLOAD_PROGRESS_INFO_BAR);
             }
             recordLinkClicked(itemId != null);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/homepage/HomepagePolicyManager.java b/chrome/android/java/src/org/chromium/chrome/browser/homepage/HomepagePolicyManager.java
index 9fbc37c..37e389b 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/homepage/HomepagePolicyManager.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/homepage/HomepagePolicyManager.java
@@ -4,8 +4,6 @@
 
 package org.chromium.chrome.browser.homepage;
 
-import android.text.TextUtils;
-
 import androidx.annotation.NonNull;
 import androidx.annotation.VisibleForTesting;
 
@@ -82,11 +80,16 @@
     }
 
     private void refresh() {
-        String homepage = PrefServiceBridge.getInstance().getString(Pref.HOME_PAGE);
-        assert homepage != null;
+        PrefServiceBridge prefServiceBridge = PrefServiceBridge.getInstance();
+        mIsHomepageLocationPolicyEnabled = prefServiceBridge.isManagedPreference(Pref.HOME_PAGE);
 
-        mIsHomepageLocationPolicyEnabled = !TextUtils.isEmpty(homepage);
-        mHomepage = homepage;
+        if (!mIsHomepageLocationPolicyEnabled) {
+            mHomepage = "";
+            return;
+        }
+
+        mHomepage = prefServiceBridge.getString(Pref.HOME_PAGE);
+        assert mHomepage != null;
     }
 
     @VisibleForTesting
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/infobar/DuplicateDownloadInfoBar.java b/chrome/android/java/src/org/chromium/chrome/browser/infobar/DuplicateDownloadInfoBar.java
index 15768ca..e0dbe65 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/infobar/DuplicateDownloadInfoBar.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/infobar/DuplicateDownloadInfoBar.java
@@ -156,7 +156,7 @@
      * @return Possible mime type of the file.
      */
     private static String getMimeTypeFromUri(Uri fileUri) {
-        String extension = MimeTypeMap.getSingleton().getFileExtensionFromUrl(fileUri.toString());
+        String extension = MimeTypeMap.getFileExtensionFromUrl(fileUri.toString());
         return MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension);
     }
 
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/metrics/PackageMetrics.java b/chrome/android/java/src/org/chromium/chrome/browser/metrics/PackageMetrics.java
index ec1727f..8aa9ef1 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/metrics/PackageMetrics.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/metrics/PackageMetrics.java
@@ -84,11 +84,11 @@
         PackageMetricsData data = getPackageStatsForAndroidO();
         if (data != null) {
             RecordHistogram.recordCustomCountHistogram("Android.PackageStats.DataSize",
-                    Math.round(ConversionUtils.bytesToMegabytes(data.dataSize)), 1, 10000, 50);
+                    (int) ConversionUtils.bytesToMegabytes(data.dataSize), 1, 10000, 50);
             RecordHistogram.recordCustomCountHistogram("Android.PackageStats.CacheSize",
-                    Math.round(ConversionUtils.bytesToMegabytes(data.cacheSize)), 1, 10000, 50);
+                    (int) ConversionUtils.bytesToMegabytes(data.cacheSize), 1, 10000, 50);
             RecordHistogram.recordSparseHistogram("Android.PackageStats.CodeSize",
-                    Math.round(ConversionUtils.bytesToMegabytes(data.codeSize)));
+                    (int) ConversionUtils.bytesToMegabytes(data.codeSize));
         }
     }
 }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/LocationBarPhone.java b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/LocationBarPhone.java
index 0671fcb..a6646d8 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/LocationBarPhone.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/LocationBarPhone.java
@@ -14,6 +14,7 @@
 
 import org.chromium.chrome.R;
 import org.chromium.chrome.browser.WindowDelegate;
+import org.chromium.chrome.browser.compositor.layouts.OverviewModeBehavior;
 import org.chromium.chrome.browser.ntp.NewTabPage;
 import org.chromium.chrome.browser.omnibox.status.StatusView;
 
@@ -372,6 +373,10 @@
         updateStatusVisibility();
     }
 
+    public void setOverviewModeBehavior(OverviewModeBehavior overviewModeBehavior) {
+        mAutocompleteCoordinator.setOverviewModeBehavior(overviewModeBehavior);
+    }
+
     /** Update the status visibility according to the current state held in LocationBar. */
     private void updateStatusVisibility() {
         boolean incognito = getToolbarDataProvider().isIncognito();
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/AutocompleteCoordinator.java b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/AutocompleteCoordinator.java
index 7e0c7d2..0370eb6 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/AutocompleteCoordinator.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/AutocompleteCoordinator.java
@@ -9,6 +9,7 @@
 import androidx.annotation.Nullable;
 
 import org.chromium.chrome.browser.ActivityTabProvider;
+import org.chromium.chrome.browser.compositor.layouts.OverviewModeBehavior;
 import org.chromium.chrome.browser.omnibox.LocationBarVoiceRecognitionHandler;
 import org.chromium.chrome.browser.omnibox.UrlBar.UrlTextChangeListener;
 import org.chromium.chrome.browser.omnibox.UrlFocusChangeListener;
@@ -34,6 +35,12 @@
     void setToolbarDataProvider(ToolbarDataProvider toolbarDataProvider);
 
     /**
+     * @param overviewModeBehavior A means of accessing the current OverviewModeState and a way to
+     *         listen to state changes.
+     */
+    void setOverviewModeBehavior(OverviewModeBehavior overviewModeBehavior);
+
+    /**
      * Updates the profile used for generating autocomplete suggestions.
      * @param profile The profile to be used.
      */
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/AutocompleteCoordinatorImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/AutocompleteCoordinatorImpl.java
index 04cffde..2ba8d350 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/AutocompleteCoordinatorImpl.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/AutocompleteCoordinatorImpl.java
@@ -19,6 +19,7 @@
 import org.chromium.base.StrictModeContext;
 import org.chromium.chrome.R;
 import org.chromium.chrome.browser.ActivityTabProvider;
+import org.chromium.chrome.browser.compositor.layouts.OverviewModeBehavior;
 import org.chromium.chrome.browser.omnibox.LocationBarVoiceRecognitionHandler;
 import org.chromium.chrome.browser.omnibox.UrlBarEditingTextStateProvider;
 import org.chromium.chrome.browser.omnibox.suggestions.AutocompleteController.OnSuggestionsReceivedListener;
@@ -173,6 +174,11 @@
     }
 
     @Override
+    public void setOverviewModeBehavior(OverviewModeBehavior overviewModeBehavior) {
+        mMediator.setOverviewModeBehavior(overviewModeBehavior);
+    }
+
+    @Override
     public void setAutocompleteProfile(Profile profile) {
         mMediator.setAutocompleteProfile(profile);
     }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/AutocompleteMediator.java b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/AutocompleteMediator.java
index 633e04e2..c482657 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/AutocompleteMediator.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/AutocompleteMediator.java
@@ -27,6 +27,8 @@
 import org.chromium.chrome.browser.ActivityTabProvider.ActivityTabTabObserver;
 import org.chromium.chrome.browser.ChromeFeatureList;
 import org.chromium.chrome.browser.GlobalDiscardableReferencePool;
+import org.chromium.chrome.browser.compositor.layouts.EmptyOverviewModeObserver;
+import org.chromium.chrome.browser.compositor.layouts.OverviewModeBehavior;
 import org.chromium.chrome.browser.image_fetcher.ImageFetcher;
 import org.chromium.chrome.browser.image_fetcher.ImageFetcherConfig;
 import org.chromium.chrome.browser.image_fetcher.ImageFetcherFactory;
@@ -111,6 +113,9 @@
     private final EntitySuggestionProcessor mEntitySuggestionProcessor;
 
     private ToolbarDataProvider mDataProvider;
+    private OverviewModeBehavior mOverviewModeBehavior;
+    private OverviewModeBehavior.OverviewModeObserver mOverviewModeObserver;
+
     private boolean mNativeInitialized;
     private AutocompleteController mAutocomplete;
     private long mUrlFocusTime;
@@ -188,6 +193,10 @@
             mImageFetcher.destroy();
             mImageFetcher = null;
         }
+        if (mOverviewModeObserver != null) {
+            mOverviewModeBehavior.removeOverviewModeObserver(mOverviewModeObserver);
+            mOverviewModeObserver = null;
+        }
     }
 
     @Override
@@ -291,6 +300,25 @@
         mDataProvider = provider;
     }
 
+    /**
+     * @param overviewModeBehavior A means of accessing the current OverviewModeState and a way to
+     *         listen to state changes.
+     */
+    public void setOverviewModeBehavior(OverviewModeBehavior overviewModeBehavior) {
+        assert overviewModeBehavior != null;
+
+        mOverviewModeBehavior = overviewModeBehavior;
+        mOverviewModeObserver = new EmptyOverviewModeObserver() {
+            @Override
+            public void onOverviewModeStartedShowing(boolean showToolbar) {
+                if (mDataProvider.shouldShowLocationBarInOverviewMode()) {
+                    AutocompleteControllerJni.get().prefetchZeroSuggestResults();
+                }
+            }
+        };
+        mOverviewModeBehavior.addOverviewModeObserver(mOverviewModeObserver);
+    }
+
     /** Set the WindowAndroid instance associated with the containing Activity. */
     void setWindowAndroid(WindowAndroid window) {
         if (mLifecycleDispatcher != null) {
@@ -775,7 +803,9 @@
                 boolean preventAutocomplete = !mUrlBarEditingTextProvider.shouldAutocomplete();
                 mRequestSuggestions = null;
 
-                if (!mDataProvider.hasTab()) {
+                // There may be no tabs when searching form omnibox in overview mode. In that case,
+                // ToolbarDataProvider.getCurrentUrl() returns NTP url.
+                if (!mDataProvider.hasTab() && !mDataProvider.isInOverviewAndShowingOmnibox()) {
                     // crbug.com/764749
                     Log.w(TAG, "onTextChangedForAutocomplete: no tab");
                     return;
@@ -1003,14 +1033,16 @@
      * Make a zero suggest request if:
      * - Native is loaded.
      * - The URL bar has focus.
-     * - The current tab is not incognito.
+     * - The the tab/overview is not incognito.
      */
     private void startZeroSuggest() {
         // Reset "edited" state in the omnibox if zero suggest is triggered -- new edits
         // now count as a new session.
         mHasStartedNewOmniboxEditSession = false;
         mNewOmniboxEditSessionTimestamp = -1;
-        if (mNativeInitialized && mDelegate.isUrlBarFocused() && mDataProvider.hasTab()) {
+
+        if (mNativeInitialized && mDelegate.isUrlBarFocused()
+                && (mDataProvider.hasTab() || mDataProvider.isInOverviewAndShowingOmnibox())) {
             int pageClassification =
                     mDataProvider.getPageClassification(mDelegate.didFocusUrlFromFakebox());
             mAutocomplete.startZeroSuggest(mDataProvider.getProfile(),
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/payments/AddressEditor.java b/chrome/android/java/src/org/chromium/chrome/browser/payments/AddressEditor.java
index 160db7e7..99fc30f4 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/payments/AddressEditor.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/payments/AddressEditor.java
@@ -474,7 +474,7 @@
         // For tests, the time-out is set to 0. In this case, we should not
         // fetch the admin-areas, and show a text-field instead.
         // This is to have the tests independent of the network status.
-        if (PersonalDataManager.getInstance().getRequestTimeoutMS() == 0) {
+        if (PersonalDataManager.getRequestTimeoutMS() == 0) {
             onSubKeysReceived(null, null);
             return;
         }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/payments/PaymentRequestFactory.java b/chrome/android/java/src/org/chromium/chrome/browser/payments/PaymentRequestFactory.java
index 96b59e7..259dcd42 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/payments/PaymentRequestFactory.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/payments/PaymentRequestFactory.java
@@ -17,6 +17,7 @@
 import org.chromium.content_public.browser.RenderFrameHost;
 import org.chromium.content_public.browser.WebContents;
 import org.chromium.mojo.system.MojoException;
+import org.chromium.mojo.system.MojoResult;
 import org.chromium.payments.mojom.CanMakePaymentQueryResult;
 import org.chromium.payments.mojom.HasEnrolledInstrumentQueryResult;
 import org.chromium.payments.mojom.PaymentDetails;
@@ -110,8 +111,9 @@
 
         @Override
         public String getInvalidSslCertificateErrorMessage(WebContents webContents) {
-            if (!OriginSecurityChecker.isSchemeCryptographic(webContents.getLastCommittedUrl()))
+            if (!OriginSecurityChecker.isSchemeCryptographic(webContents.getLastCommittedUrl())) {
                 return null;
+            }
             return SslValidityChecker.getInvalidSslCertificateErrorMessage(webContents);
         }
 
@@ -142,6 +144,12 @@
 
     @Override
     public PaymentRequest createImpl() {
+        if (!mRenderFrameHost.isPaymentFeaturePolicyEnabled()) {
+            mRenderFrameHost.getRemoteInterfaces().onConnectionError(
+                    new MojoException(MojoResult.PERMISSION_DENIED));
+            return null;
+        }
+
         if (!ChromeFeatureList.isEnabled(ChromeFeatureList.WEB_PAYMENTS)) {
             return new InvalidPaymentRequest();
         }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/languages/LanguagesPreferences.java b/chrome/android/java/src/org/chromium/chrome/browser/preferences/languages/LanguagesPreferences.java
index 5e633e8a..a35df96 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/preferences/languages/LanguagesPreferences.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/preferences/languages/LanguagesPreferences.java
@@ -4,6 +4,7 @@
 
 package org.chromium.chrome.browser.preferences.languages;
 
+import android.app.Activity;
 import android.content.Intent;
 import android.os.Bundle;
 import android.support.v7.preference.Preference;
@@ -70,7 +71,7 @@
     @Override
     public void onActivityResult(int requestCode, int resultCode, Intent data) {
         super.onActivityResult(requestCode, resultCode, data);
-        if (requestCode == REQUEST_CODE_ADD_LANGUAGES && resultCode == getActivity().RESULT_OK) {
+        if (requestCode == REQUEST_CODE_ADD_LANGUAGES && resultCode == Activity.RESULT_OK) {
             String code = data.getStringExtra(AddLanguageFragment.INTENT_NEW_ACCEPT_LANGUAGE);
             LanguagesManager.getInstance().addToAcceptLanguages(code);
             LanguagesManager.recordAction(
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/password/PasswordEntryViewer.java b/chrome/android/java/src/org/chromium/chrome/browser/preferences/password/PasswordEntryViewer.java
index 86cb1b4..9dee5323 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/preferences/password/PasswordEntryViewer.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/preferences/password/PasswordEntryViewer.java
@@ -438,12 +438,12 @@
     public void passwordListAvailable(int count) {
         if (mException) return;
         TextView passwordTextView = mView.findViewById(R.id.password_entry_viewer_password);
-        SavedPasswordEntry SavedPasswordEntry = PasswordManagerHandlerProvider.getInstance()
+        SavedPasswordEntry savedPasswordEntry = PasswordManagerHandlerProvider.getInstance()
                                                         .getPasswordManagerHandler()
                                                         .getSavedPasswordEntry(mID);
-        setRowText(R.id.url_row, SavedPasswordEntry.getUrl());
-        setRowText(R.id.username_row, SavedPasswordEntry.getUserName());
-        passwordTextView.setText(SavedPasswordEntry.getPassword());
+        setRowText(R.id.url_row, savedPasswordEntry.getUrl());
+        setRowText(R.id.username_row, savedPasswordEntry.getUserName());
+        passwordTextView.setText(savedPasswordEntry.getPassword());
     }
 
     @Override
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/password/PasswordReauthenticationFragment.java b/chrome/android/java/src/org/chromium/chrome/browser/preferences/password/PasswordReauthenticationFragment.java
index 40a8818..22cff9e1 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/preferences/password/PasswordReauthenticationFragment.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/preferences/password/PasswordReauthenticationFragment.java
@@ -5,6 +5,7 @@
 package org.chromium.chrome.browser.preferences.password;
 
 import android.annotation.TargetApi;
+import android.app.Activity;
 import android.app.KeyguardManager;
 import android.content.Context;
 import android.content.Intent;
@@ -63,7 +64,7 @@
     public void onActivityResult(int requestCode, int resultCode, Intent data) {
         super.onActivityResult(requestCode, resultCode, data);
         if (requestCode == CONFIRM_DEVICE_CREDENTIAL_REQUEST_CODE) {
-            if (resultCode == getActivity().RESULT_OK) {
+            if (resultCode == Activity.RESULT_OK) {
                 ReauthenticationManager.recordLastReauth(
                         System.currentTimeMillis(), getArguments().getInt(SCOPE_ID));
             } else {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/LocationBarModel.java b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/LocationBarModel.java
index 6bc13e47..17d7cca8 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/LocationBarModel.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/LocationBarModel.java
@@ -121,6 +121,12 @@
 
     @Override
     public String getCurrentUrl() {
+        // Provide NTP url instead of most recent tab url for searches in overview mode (when Start
+        // Surface is enabled). .
+        if (isInOverviewAndShowingOmnibox()) {
+            return UrlConstants.NTP_URL;
+        }
+
         // TODO(yusufo) : Consider using this for all calls from getTab() for accessing url.
         if (!hasTab()) return "";
 
@@ -283,7 +289,10 @@
     public Profile getProfile() {
         Profile lastUsedProfile = Profile.getLastUsedProfile();
         if (mIsIncognito) {
-            assert lastUsedProfile.hasOffTheRecordProfile();
+            // When in overview mode with no open tabs, there has not been created an
+            // OffTheRecordProfile yet. #getOffTheRecordProfile will create a profile if none
+            // exists.
+            assert lastUsedProfile.hasOffTheRecordProfile() || isInOverviewAndShowingOmnibox();
             return lastUsedProfile.getOffTheRecordProfile();
         }
         return lastUsedProfile.getOriginalProfile();
@@ -346,6 +355,11 @@
     @Override
     public int getPageClassification(boolean isFocusedFromFakebox) {
         if (mNativeLocationBarModelAndroid == 0) return 0;
+
+        // Provide (NTP=1) as page class in overview mode (when Start Surface is enabled). No call
+        // to the backend necessary or possible, since there is no tab or navigation entry.
+        if (isInOverviewAndShowingOmnibox()) return 1;
+
         return LocationBarModelJni.get().getPageClassification(
                 mNativeLocationBarModelAndroid, LocationBarModel.this, isFocusedFromFakebox);
     }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java
index ee12747..a843f54 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java
@@ -968,7 +968,7 @@
 
         mToolbar.initializeWithNative(tabModelSelector, controlsVisibilityDelegate, layoutManager,
                 tabSwitcherClickHandler, tabSwitcherLongClickHandler, newTabClickHandler,
-                bookmarkClickHandler, customTabsBackClickHandler);
+                bookmarkClickHandler, customTabsBackClickHandler, overviewModeBehavior);
 
         mToolbar.addOnAttachStateChangeListener(new OnAttachStateChangeListener() {
             @Override
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/bottom/BrowsingModeBottomToolbarMediator.java b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/bottom/BrowsingModeBottomToolbarMediator.java
index ead9aaf..dceea5b 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/bottom/BrowsingModeBottomToolbarMediator.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/bottom/BrowsingModeBottomToolbarMediator.java
@@ -66,6 +66,8 @@
     void showIPH(@FeatureConstants String feature, ChromeActivity activity, View anchor,
             Tracker tracker, Runnable completeRunnable) {
         if (!tracker.shouldTriggerHelpUI(feature)) return;
+        int innerBackgroundColor =
+                ApiCompatibilityUtils.getColor(anchor.getResources(), R.color.modern_primary_color);
         int baseBubbleColor =
                 ApiCompatibilityUtils.getColor(anchor.getResources(), R.color.modern_blue_600);
 
@@ -94,8 +96,8 @@
         FeatureHighlightProvider.getInstance().buildForView(activity, anchor, titleId,
                 FeatureHighlightProvider.TextAlignment.CENTER, R.style.TextAppearance_WhiteTitle1,
                 descId, FeatureHighlightProvider.TextAlignment.CENTER,
-                R.style.TextAppearance_WhiteBody, finalOuterColor, finalScrimColor,
-                DUET_IPH_BUBBLE_SHOW_DURATION_MS, completeRunnable);
+                R.style.TextAppearance_WhiteBody, innerBackgroundColor, finalOuterColor,
+                finalScrimColor, DUET_IPH_BUBBLE_SHOW_DURATION_MS, completeRunnable);
 
         anchor.postDelayed(() -> tracker.dismissed(feature), DUET_IPH_BUBBLE_SHOW_DURATION_MS);
     }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarLayout.java b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarLayout.java
index 02bbbd2..42ea9e7ef 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarLayout.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarLayout.java
@@ -31,6 +31,7 @@
 import org.chromium.chrome.browser.ThemeColorProvider.TintObserver;
 import org.chromium.chrome.browser.compositor.Invalidator;
 import org.chromium.chrome.browser.compositor.layouts.LayoutUpdateHost;
+import org.chromium.chrome.browser.compositor.layouts.OverviewModeBehavior;
 import org.chromium.chrome.browser.findinpage.FindToolbar;
 import org.chromium.chrome.browser.fullscreen.BrowserStateBrowserControlsVisibilityDelegate;
 import org.chromium.chrome.browser.ntp.NewTabPage;
@@ -631,6 +632,8 @@
 
     void setLayoutUpdateHost(LayoutUpdateHost layoutUpdateHost) {}
 
+    void setOverviewModeBehavior(OverviewModeBehavior overviewModeBehavior) {}
+
     /**
      * @param attached Whether or not the web content is attached to the view heirarchy.
      */
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarPhone.java b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarPhone.java
index 923fff7..678efa0f 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarPhone.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarPhone.java
@@ -52,6 +52,7 @@
 import org.chromium.chrome.R;
 import org.chromium.chrome.browser.compositor.Invalidator;
 import org.chromium.chrome.browser.compositor.layouts.LayoutUpdateHost;
+import org.chromium.chrome.browser.compositor.layouts.OverviewModeBehavior;
 import org.chromium.chrome.browser.device.DeviceClassManager;
 import org.chromium.chrome.browser.feature_engagement.TrackerFactory;
 import org.chromium.chrome.browser.flags.FeatureUtilities;
@@ -1619,6 +1620,11 @@
     }
 
     @Override
+    public void setOverviewModeBehavior(OverviewModeBehavior overviewModeBehavior) {
+        mLocationBar.setOverviewModeBehavior(overviewModeBehavior);
+    }
+
+    @Override
     public void finishAnimations() {
         mClipRect = null;
         if (mTabSwitcherModeAnimation != null) {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/top/TopToolbarCoordinator.java b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/top/TopToolbarCoordinator.java
index 1a6fdc8..9a02201 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/top/TopToolbarCoordinator.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/top/TopToolbarCoordinator.java
@@ -19,6 +19,7 @@
 import org.chromium.chrome.browser.ThemeColorProvider;
 import org.chromium.chrome.browser.compositor.Invalidator;
 import org.chromium.chrome.browser.compositor.layouts.LayoutManager;
+import org.chromium.chrome.browser.compositor.layouts.OverviewModeBehavior;
 import org.chromium.chrome.browser.findinpage.FindToolbar;
 import org.chromium.chrome.browser.fullscreen.BrowserStateBrowserControlsVisibilityDelegate;
 import org.chromium.chrome.browser.omnibox.LocationBar;
@@ -120,7 +121,8 @@
             BrowserStateBrowserControlsVisibilityDelegate controlsVisibilityDelegate,
             LayoutManager layoutManager, OnClickListener tabSwitcherClickHandler,
             OnLongClickListener tabSwitcherLongClickHandler, OnClickListener newTabClickHandler,
-            OnClickListener bookmarkClickHandler, OnClickListener customTabsBackClickHandler) {
+            OnClickListener bookmarkClickHandler, OnClickListener customTabsBackClickHandler,
+            OverviewModeBehavior overviewModeBehavior) {
         if (mTabSwitcherModeCoordinatorPhone != null) {
             mTabSwitcherModeCoordinatorPhone.setOnTabSwitcherClickHandler(tabSwitcherClickHandler);
             mTabSwitcherModeCoordinatorPhone.setOnNewTabClickHandler(newTabClickHandler);
@@ -136,6 +138,7 @@
         mToolbarLayout.setBookmarkClickHandler(bookmarkClickHandler);
         mToolbarLayout.setCustomTabCloseClickHandler(customTabsBackClickHandler);
         mToolbarLayout.setLayoutUpdateHost(layoutManager);
+        mToolbarLayout.setOverviewModeBehavior(overviewModeBehavior);
 
         mToolbarLayout.onNativeLibraryReady();
     }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/widget/FeatureHighlightProvider.java b/chrome/android/java/src/org/chromium/chrome/browser/widget/FeatureHighlightProvider.java
index c3cf9d2..8be1152 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/widget/FeatureHighlightProvider.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/widget/FeatureHighlightProvider.java
@@ -48,15 +48,21 @@
      * @param view The view to focus.
      * @param headTextId The text shown in the header section of the bubble.
      * @param headAlignment Alignment of the head text.
+     * @param headStyle Style of the head text size and color.
      * @param bodyTextId The text shown in the body section of the bubble.
      * @param bodyAlignment Alignment of the body text.
-     * @param color The color of the bubble.
+     * @param bodyStyle Style of the body text size and color.
+     * @param pulseColor The inner color of the bubble.
+     * @param outerColor The outer color of the bubble.
+     * @param scrimColor The color of the out side of feature highlight.
      * @param timeoutMs The amount of time in ms before the bubble disappears.
+     * @param completeRunnable The Runnable to be called if the user tab on the view.
      */
     public void buildForView(AppCompatActivity activity, View view, @StringRes int headTextId,
             @TextAlignment int headAlignment, @StyleRes int headStyle, @StringRes int bodyTextId,
-            @TextAlignment int bodyAlignment, @StyleRes int bodyStyle, @ColorInt int color,
-            long timeoutMs) {}
+            @TextAlignment int bodyAlignment, @StyleRes int bodyStyle, @ColorInt int pulseColor,
+            @ColorInt int outerColor, @ColorInt int scrimColor, long timeoutMs,
+            Runnable completeRunnable) {}
 
     /**
      * Build and show a feature highlight bubble for a particular view.
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/TabsTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/TabsTest.java
index 71578f8..e6d3e2b3 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/TabsTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/TabsTest.java
@@ -40,6 +40,7 @@
 import org.chromium.base.test.util.RetryOnFailure;
 import org.chromium.base.test.util.UrlUtils;
 import org.chromium.chrome.R;
+import org.chromium.chrome.browser.compositor.animation.CompositorAnimationHandler;
 import org.chromium.chrome.browser.compositor.layouts.Layout;
 import org.chromium.chrome.browser.compositor.layouts.LayoutManager;
 import org.chromium.chrome.browser.compositor.layouts.LayoutManagerChrome;
@@ -167,8 +168,7 @@
             return;
         }
         mActivityTestRule.startMainActivityOnBlankPage();
-        mActivityTestRule.getActivity().getLayoutManager().getAnimationHandler().setTestingMode(
-                true);
+        CompositorAnimationHandler.setTestingMode(true);
     }
 
     @After
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/autofill/AutofillTestHelper.java b/chrome/android/javatests/src/org/chromium/chrome/browser/autofill/AutofillTestHelper.java
index 261047e..07863ef 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/autofill/AutofillTestHelper.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/autofill/AutofillTestHelper.java
@@ -27,7 +27,7 @@
 
     void setRequestTimeoutForTesting() {
         TestThreadUtils.runOnUiThreadBlocking(
-                () -> PersonalDataManager.getInstance().setRequestTimeoutForTesting(0));
+                () -> PersonalDataManager.setRequestTimeoutForTesting(0));
     }
 
     void setSyncServiceForTesting() {
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/compositor/layouts/LayoutManagerTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/compositor/layouts/LayoutManagerTest.java
index 1fac7734..a5b00c51 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/compositor/layouts/LayoutManagerTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/compositor/layouts/LayoutManagerTest.java
@@ -27,6 +27,7 @@
 import org.chromium.base.test.util.DisabledTest;
 import org.chromium.base.test.util.Feature;
 import org.chromium.base.test.util.Restriction;
+import org.chromium.chrome.browser.compositor.animation.CompositorAnimationHandler;
 import org.chromium.chrome.browser.compositor.layouts.components.LayoutTab;
 import org.chromium.chrome.browser.compositor.layouts.eventfilter.EdgeSwipeHandler;
 import org.chromium.chrome.browser.compositor.layouts.eventfilter.ScrollDirection;
@@ -135,7 +136,7 @@
 
         mManagerPhone = new LayoutManagerChromePhone(layoutManagerHost, null);
         mManager = mManagerPhone;
-        mManager.getAnimationHandler().setTestingMode(true);
+        CompositorAnimationHandler.setTestingMode(true);
         mManager.init(mTabModelSelector, null, null, container, null, null);
         initializeMotionEvent();
     }
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchManagerTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchManagerTest.java
index 2108078..4d71613 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchManagerTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchManagerTest.java
@@ -53,6 +53,7 @@
 import org.chromium.chrome.browser.ChromeSwitches;
 import org.chromium.chrome.browser.ChromeTabbedActivity;
 import org.chromium.chrome.browser.ChromeTabbedActivity2;
+import org.chromium.chrome.browser.compositor.animation.CompositorAnimationHandler;
 import org.chromium.chrome.browser.compositor.bottombar.OverlayContentDelegate;
 import org.chromium.chrome.browser.compositor.bottombar.OverlayContentProgressObserver;
 import org.chromium.chrome.browser.compositor.bottombar.OverlayPanel.PanelState;
@@ -2793,7 +2794,7 @@
     @SmallTest
     @Feature({"ContextualSearch"})
     public void testQuickActionCaptionAndImage() throws InterruptedException, TimeoutException {
-        mPanel.getAnimationHandler().setTestingMode(true);
+        CompositorAnimationHandler.setTestingMode(true);
 
         // Simulate a tap to show the Bar, then set the quick action data.
         simulateTapSearch("search");
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/download/DownloadManagerServiceTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/download/DownloadManagerServiceTest.java
index e5955ac9..3d0bcc9e 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/download/DownloadManagerServiceTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/download/DownloadManagerServiceTest.java
@@ -27,7 +27,6 @@
 import org.chromium.base.test.util.RetryOnFailure;
 import org.chromium.base.test.util.UrlUtils;
 import org.chromium.chrome.browser.ChromeFeatureList;
-import org.chromium.chrome.browser.download.DownloadInfo.Builder;
 import org.chromium.chrome.browser.download.DownloadManagerServiceTest.MockDownloadNotifier.MethodID;
 import org.chromium.chrome.browser.flags.FeatureUtilities;
 import org.chromium.chrome.test.ChromeBrowserTestRule;
@@ -265,7 +264,7 @@
     }
 
     private DownloadInfo getDownloadInfo() {
-        return new Builder()
+        return new DownloadInfo.Builder()
                 .setBytesReceived(100)
                 .setDownloadGuid(UUID.randomUUID().toString())
                 .setFileName("test")
@@ -295,15 +294,15 @@
 
         // Now post multiple download updated calls and make sure all are received.
         DownloadInfo update1 =
-                Builder.fromDownloadInfo(downloadInfo)
+                DownloadInfo.Builder.fromDownloadInfo(downloadInfo)
                         .setProgress(new Progress(10, 100L, OfflineItemProgressUnit.PERCENTAGE))
                         .build();
         DownloadInfo update2 =
-                Builder.fromDownloadInfo(downloadInfo)
+                DownloadInfo.Builder.fromDownloadInfo(downloadInfo)
                         .setProgress(new Progress(30, 100L, OfflineItemProgressUnit.PERCENTAGE))
                         .build();
         DownloadInfo update3 =
-                Builder.fromDownloadInfo(downloadInfo)
+                DownloadInfo.Builder.fromDownloadInfo(downloadInfo)
                         .setProgress(new Progress(30, 100L, OfflineItemProgressUnit.PERCENTAGE))
                         .build();
         notifier.expect(MethodID.DOWNLOAD_PROGRESS, update1)
@@ -326,15 +325,15 @@
         createDownloadManagerService(notifier, LONG_UPDATE_DELAY_FOR_TEST);
         DownloadInfo downloadInfo = getDownloadInfo();
         DownloadInfo update1 =
-                Builder.fromDownloadInfo(downloadInfo)
+                DownloadInfo.Builder.fromDownloadInfo(downloadInfo)
                         .setProgress(new Progress(10, 100L, OfflineItemProgressUnit.PERCENTAGE))
                         .build();
         DownloadInfo update2 =
-                Builder.fromDownloadInfo(downloadInfo)
+                DownloadInfo.Builder.fromDownloadInfo(downloadInfo)
                         .setProgress(new Progress(10, 100L, OfflineItemProgressUnit.PERCENTAGE))
                         .build();
         DownloadInfo update3 =
-                Builder.fromDownloadInfo(downloadInfo)
+                DownloadInfo.Builder.fromDownloadInfo(downloadInfo)
                         .setProgress(new Progress(10, 100L, OfflineItemProgressUnit.PERCENTAGE))
                         .build();
 
@@ -389,8 +388,9 @@
                 (Runnable) () -> DownloadManagerService.setDownloadManagerService(mService));
         // Check that if an interrupted download cannot be resumed, it will trigger a download
         // failure.
-        DownloadInfo failure =
-                Builder.fromDownloadInfo(getDownloadInfo()).setIsResumable(false).build();
+        DownloadInfo failure = DownloadInfo.Builder.fromDownloadInfo(getDownloadInfo())
+                                       .setIsResumable(false)
+                                       .build();
         notifier.expect(MethodID.DOWNLOAD_FAILED, failure);
         mService.onDownloadInterrupted(failure, false);
         notifier.waitTillExpectedCallsComplete();
@@ -403,8 +403,9 @@
         MockDownloadNotifier notifier = new MockDownloadNotifier();
         createDownloadManagerService(notifier, UPDATE_DELAY_FOR_TEST);
         DownloadManagerService.disableNetworkListenerForTest();
-        DownloadInfo interrupted =
-                Builder.fromDownloadInfo(getDownloadInfo()).setIsResumable(true).build();
+        DownloadInfo interrupted = DownloadInfo.Builder.fromDownloadInfo(getDownloadInfo())
+                                           .setIsResumable(true)
+                                           .build();
         notifier.expect(MethodID.DOWNLOAD_INTERRUPTED, interrupted);
         mService.onDownloadInterrupted(interrupted, true);
         notifier.waitTillExpectedCallsComplete();
@@ -443,8 +444,9 @@
         MockDownloadNotifier notifier = new MockDownloadNotifier();
         createDownloadManagerService(notifier, UPDATE_DELAY_FOR_TEST);
         DownloadManagerService.disableNetworkListenerForTest();
-        DownloadInfo interrupted =
-                Builder.fromDownloadInfo(getDownloadInfo()).setIsResumable(true).build();
+        DownloadInfo interrupted = DownloadInfo.Builder.fromDownloadInfo(getDownloadInfo())
+                                           .setIsResumable(true)
+                                           .build();
         notifier.expect(MethodID.DOWNLOAD_PROGRESS, interrupted)
                 .andThen(MethodID.DOWNLOAD_INTERRUPTED, interrupted);
         mService.onDownloadUpdated(interrupted);
@@ -471,8 +473,9 @@
         MockDownloadNotifier notifier = new MockDownloadNotifier();
         createDownloadManagerService(notifier, UPDATE_DELAY_FOR_TEST);
         DownloadManagerService.disableNetworkListenerForTest();
-        DownloadInfo interrupted =
-                Builder.fromDownloadInfo(getDownloadInfo()).setIsResumable(true).build();
+        DownloadInfo interrupted = DownloadInfo.Builder.fromDownloadInfo(getDownloadInfo())
+                                           .setIsResumable(true)
+                                           .build();
         notifier.expect(MethodID.DOWNLOAD_PROGRESS, interrupted)
                 .andThen(MethodID.DOWNLOAD_INTERRUPTED, interrupted);
         mService.onDownloadUpdated(interrupted);
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/download/SystemDownloadNotifierTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/download/SystemDownloadNotifierTest.java
index 08fb5c4..851fdc40 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/download/SystemDownloadNotifierTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/download/SystemDownloadNotifierTest.java
@@ -16,7 +16,6 @@
 
 import org.chromium.base.test.BaseJUnit4ClassRunner;
 import org.chromium.base.test.util.Feature;
-import org.chromium.chrome.browser.download.DownloadInfo.Builder;
 import org.chromium.chrome.test.ChromeBrowserTestRule;
 import org.chromium.components.offline_items_collection.ContentId;
 import org.chromium.content_public.browser.test.util.Criteria;
@@ -44,7 +43,7 @@
     }
 
     private DownloadInfo getDownloadInfo(ContentId id) {
-        return new Builder()
+        return new DownloadInfo.Builder()
                 .setFileName("foo")
                 .setBytesReceived(100)
                 .setDownloadGuid(UUID.randomUUID().toString())
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/feed/FeedConfigurationTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/feed/FeedConfigurationTest.java
index 653289d..536aeba 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/feed/FeedConfigurationTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/feed/FeedConfigurationTest.java
@@ -434,7 +434,7 @@
         Assert.assertEquals(FeedConfiguration.FEED_SERVER_RESPONSE_LENGTH_PREFIXED_DEFAULT,
                 configuration.getValueOrDefault(
                         ConfigKey.FEED_SERVER_RESPONSE_LENGTH_PREFIXED, false));
-        Assert.assertFalse(configuration.getValueOrDefault(ConfigKey.FEED_UI_ENABLED, true));
+        Assert.assertTrue(configuration.getValueOrDefault(ConfigKey.FEED_UI_ENABLED, false));
         Assert.assertEquals((long) FeedConfiguration.INITIAL_NON_CACHED_PAGE_SIZE_DEFAULT,
                 configuration.getValueOrDefault(ConfigKey.INITIAL_NON_CACHED_PAGE_SIZE, 0));
         Assert.assertFalse(
@@ -452,7 +452,7 @@
                 configuration.getValueOrDefault(ConfigKey.NON_CACHED_PAGE_SIZE, 0));
         Assert.assertEquals((long) FeedConfiguration.SESSION_LIFETIME_MS_DEFAULT,
                 configuration.getValueOrDefault(ConfigKey.SESSION_LIFETIME_MS, 0l));
-        Assert.assertFalse(configuration.getValueOrDefault(ConfigKey.SNIPPETS_ENABLED, true));
+        Assert.assertTrue(configuration.getValueOrDefault(ConfigKey.SNIPPETS_ENABLED, false));
         Assert.assertEquals((long) FeedConfiguration.SPINNER_DELAY_MS_DEFAULT,
                 configuration.getValueOrDefault(ConfigKey.SPINNER_DELAY_MS, 0l));
         Assert.assertEquals((long) FeedConfiguration.SPINNER_MINIMUM_SHOW_TIME_MS_DEFAULT,
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/feed/FeedContentStorageConformanceTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/feed/FeedContentStorageConformanceTest.java
index dd047ed..ae1df409 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/feed/FeedContentStorageConformanceTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/feed/FeedContentStorageConformanceTest.java
@@ -76,14 +76,14 @@
     public void setUp() {
         TestThreadUtils.runOnUiThreadBlocking(() -> {
             // storage is declared and tested in ContentStorageConformanceTest.
-            storage = new ContentStorageWrapper(Profile.getLastUsedProfile());
+            mStorage = new ContentStorageWrapper(Profile.getLastUsedProfile());
         });
     }
 
     @After
     public void tearDown() {
         TestThreadUtils.runOnUiThreadBlocking(
-                () -> { ((ContentStorageWrapper) storage).destroy(); });
-        storage = null;
+                () -> { ((ContentStorageWrapper) mStorage).destroy(); });
+        mStorage = null;
     }
 }
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/feed/FeedJournalStorageConformanceTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/feed/FeedJournalStorageConformanceTest.java
index 57e6670..54f1305f 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/feed/FeedJournalStorageConformanceTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/feed/FeedJournalStorageConformanceTest.java
@@ -86,14 +86,14 @@
     public void setUp() {
         TestThreadUtils.runOnUiThreadBlocking(() -> {
             // journalStorage is declared and tested in JournalStorageConformanceTest.
-            journalStorage = new JournalStorageWrapper(Profile.getLastUsedProfile());
+            mJournalStorage = new JournalStorageWrapper(Profile.getLastUsedProfile());
         });
     }
 
     @After
     public void tearDown() {
         TestThreadUtils.runOnUiThreadBlocking(
-                () -> { ((JournalStorageWrapper) journalStorage).destroy(); });
-        journalStorage = null;
+                () -> { ((JournalStorageWrapper) mJournalStorage).destroy(); });
+        mJournalStorage = null;
     }
 }
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/feed/FeedNetworkBridgeConformanceTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/feed/FeedNetworkBridgeConformanceTest.java
index d23c59e..e79a107 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/feed/FeedNetworkBridgeConformanceTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/feed/FeedNetworkBridgeConformanceTest.java
@@ -101,12 +101,12 @@
 
     private void createNetworkClient() {
         // The networkClient is declared and tested in NetworkClientConformanceTest
-        networkClient = new FeedTestNetworkBridge(Profile.getLastUsedProfile());
+        mNetworkClient = new FeedTestNetworkBridge(Profile.getLastUsedProfile());
     }
 
     private void destroyNetworkClient() {
-        ((FeedTestNetworkBridge) networkClient).destroy();
-        networkClient = null;
+        ((FeedTestNetworkBridge) mNetworkClient).destroy();
+        mNetworkClient = null;
     }
 
     private void createAndStartTestServer() {
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/feed/FeedSchedulerBridgeConformanceTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/feed/FeedSchedulerBridgeConformanceTest.java
index 697433b..5441178 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/feed/FeedSchedulerBridgeConformanceTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/feed/FeedSchedulerBridgeConformanceTest.java
@@ -66,15 +66,15 @@
     @Before
     public void setUp() {
         // The scheduler is declared and tested in SchedulerConformanceTest.
-        scheduler = new FeedSchedulerBridge(Profile.getLastUsedProfile());
+        mScheduler = new FeedSchedulerBridge(Profile.getLastUsedProfile());
         if (mUseRequestManager) {
-            ((FeedSchedulerBridge) scheduler).initializeFeedDependencies(mRequestManager);
+            ((FeedSchedulerBridge) mScheduler).initializeFeedDependencies(mRequestManager);
         }
     }
 
     @After
     public void tearDown() {
-        ((FeedSchedulerBridge) scheduler).destroy();
-        scheduler = null;
+        ((FeedSchedulerBridge) mScheduler).destroy();
+        mScheduler = null;
     }
 }
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/gesturenav/NavigationHandlerTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/gesturenav/NavigationHandlerTest.java
index 19a1644..e66db6d 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/gesturenav/NavigationHandlerTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/gesturenav/NavigationHandlerTest.java
@@ -23,6 +23,7 @@
 import org.chromium.base.test.util.CommandLineFlags;
 import org.chromium.base.test.util.RetryOnFailure;
 import org.chromium.chrome.browser.ChromeSwitches;
+import org.chromium.chrome.browser.compositor.animation.CompositorAnimationHandler;
 import org.chromium.chrome.browser.tab.Tab;
 import org.chromium.chrome.browser.util.UrlConstants;
 import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
@@ -55,8 +56,7 @@
     @Before
     public void setUp() throws InterruptedException {
         mActivityTestRule.startMainActivityOnBlankPage();
-        mActivityTestRule.getActivity().getLayoutManager().getAnimationHandler().setTestingMode(
-                true);
+        CompositorAnimationHandler.setTestingMode(true);
         DisplayMetrics displayMetrics = new DisplayMetrics();
         mActivityTestRule.getActivity().getWindowManager().getDefaultDisplay().getMetrics(
                 displayMetrics);
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/locale/DefaultSearchEngineDialogHelperTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/locale/DefaultSearchEngineDialogHelperTest.java
index 3236988..8f8635ef 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/locale/DefaultSearchEngineDialogHelperTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/locale/DefaultSearchEngineDialogHelperTest.java
@@ -74,7 +74,7 @@
 
         @Override
         public boolean equals(Object other) {
-            if (!(other instanceof TemplateUrl)) return false;
+            if (!(other instanceof TestTemplateUrl)) return false;
             TestTemplateUrl otherTemplateUrl = (TestTemplateUrl) other;
             return TextUtils.equals(mKeyword, otherTemplateUrl.mKeyword)
                     && TextUtils.equals(mShortName, otherTemplateUrl.mShortName);
@@ -300,4 +300,4 @@
                 TextUtils.equals(keyword, helper.delegate.chosenKeyword));
         Assert.assertEquals("Runnable failed to after hitting OK", 1, mDismissRunnable.runCount);
     }
-}
\ No newline at end of file
+}
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/offlinepages/OfflineTestUtil.java b/chrome/android/javatests/src/org/chromium/chrome/browser/offlinepages/OfflineTestUtil.java
index 3a4a6ac..097ee4d 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/offlinepages/OfflineTestUtil.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/offlinepages/OfflineTestUtil.java
@@ -81,7 +81,6 @@
     // Returns the OfflinePageItem with the given clientId, or null if one doesn't exist.
     public static @Nullable OfflinePageItem getPageByClientId(ClientId clientId)
             throws TimeoutException {
-        ArrayList<OfflinePageItem> result = new ArrayList<OfflinePageItem>();
         for (OfflinePageItem item : getAllPages()) {
             if (item.getClientId().equals(clientId)) {
                 return item;
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/omaha/OmahaBaseTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/omaha/OmahaBaseTest.java
index a6e94c6..3e88f81 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/omaha/OmahaBaseTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/omaha/OmahaBaseTest.java
@@ -169,20 +169,6 @@
         int TIMES_OUT = 1;
     }
 
-    @IntDef({InstallEvent.SEND, InstallEvent.DONT_SEND})
-    @Retention(RetentionPolicy.SOURCE)
-    private @interface InstallEvent {
-        int SEND = 0;
-        int DONT_SEND = 1;
-    }
-
-    @IntDef({PostStatus.DUE, PostStatus.NOT_DUE})
-    @Retention(RetentionPolicy.SOURCE)
-    private @interface PostStatus {
-        int DUE = 0;
-        int NOT_DUE = 1;
-    }
-
     private AdvancedMockContext mContext;
     private MockOmahaDelegate mDelegate;
     private MockOmahaBase mOmahaBase;
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/feed/FeedJournalStorageTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/feed/FeedJournalStorageTest.java
index 8e23d83..0da1aa5 100644
--- a/chrome/android/junit/src/org/chromium/chrome/browser/feed/FeedJournalStorageTest.java
+++ b/chrome/android/junit/src/org/chromium/chrome/browser/feed/FeedJournalStorageTest.java
@@ -248,7 +248,6 @@
     @Test
     @SmallTest
     public void getAllJournalsFailureTest() {
-        List<String> answerStrings = new ArrayList<String>();
         Answer<Void> answer = createFailureAnswer();
         doAnswer(answer).when(mBridge).loadAllJournalKeys(
                 mStringArraySuccessCallbackArgument.capture(), mFailureCallbackArgument.capture());
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/history/HistoryAdapterAccessibilityTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/history/HistoryAdapterAccessibilityTest.java
similarity index 92%
rename from chrome/android/javatests/src/org/chromium/chrome/browser/history/HistoryAdapterAccessibilityTest.java
rename to chrome/android/junit/src/org/chromium/chrome/browser/history/HistoryAdapterAccessibilityTest.java
index c2a9bde..39b0c18b 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/history/HistoryAdapterAccessibilityTest.java
+++ b/chrome/android/junit/src/org/chromium/chrome/browser/history/HistoryAdapterAccessibilityTest.java
@@ -6,9 +6,6 @@
 
 import static org.chromium.chrome.browser.history.HistoryTestUtils.checkAdapterContents;
 
-import android.os.Build;
-import android.support.test.filters.SmallTest;
-
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
@@ -16,13 +13,12 @@
 import org.mockito.Mock;
 import org.mockito.Mockito;
 import org.mockito.MockitoAnnotations;
+import org.robolectric.annotation.Config;
 
-import org.chromium.base.test.util.DisableIf;
+import org.chromium.base.test.BaseRobolectricTestRunner;
 import org.chromium.chrome.browser.ui.widget.MoreProgressButton;
 import org.chromium.chrome.browser.ui.widget.MoreProgressButton.State;
 import org.chromium.chrome.browser.widget.selection.SelectionDelegate;
-import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
-import org.chromium.content_public.browser.test.util.TestThreadUtils;
 
 import java.util.Date;
 import java.util.concurrent.TimeUnit;
@@ -31,9 +27,8 @@
  * Tests for the {@link HistoryAdapter}. This test will more focusing on cases when accessibility
  * turned on (HistoryManager::isScrollToLoadDisabled() == true).
  */
-@RunWith(ChromeJUnit4ClassRunner.class)
-@DisableIf.Build(supported_abis_includes = "arm64-v8a",
-        sdk_is_greater_than = Build.VERSION_CODES.LOLLIPOP, message = "crbug.com/1023426")
+@RunWith(BaseRobolectricTestRunner.class)
+@Config(manifest = Config.NONE)
 public class HistoryAdapterAccessibilityTest {
     public static final int PAGING = 2;
 
@@ -55,26 +50,20 @@
         mAdapter.setScrollToLoadDisabledForTest(true);
     }
 
-    private void initializeAdapter() {
-        TestThreadUtils.runOnUiThreadBlocking(() -> mAdapter.initialize());
-    }
-
     @Test
-    @SmallTest
     public void testInitializeEmpty() {
-        initializeAdapter();
+        mAdapter.initialize();
         checkAdapterContents(mAdapter, false, false);
     }
 
     @Test
-    @SmallTest
     public void testInitializeSingleItem() {
         Date today = new Date();
         long timestamp = today.getTime();
         HistoryItem item1 = StubbedHistoryProvider.createHistoryItem(0, timestamp);
         mHistoryProvider.addItem(item1);
 
-        initializeAdapter();
+        mAdapter.initialize();
 
         // There should be three items - the header, a date and the history item;
         // The number of items is less than paging, so the view should not contain footer items.
@@ -82,7 +71,6 @@
     }
 
     @Test
-    @SmallTest
     public void testInitializeThreeItems() {
         Date today = new Date();
         long timestamp = today.getTime();
@@ -95,7 +83,7 @@
         HistoryItem item3 = StubbedHistoryProvider.createHistoryItem(2, timestamp);
         mHistoryProvider.addItem(item3);
 
-        initializeAdapter();
+        mAdapter.initialize();
 
         // There should be five items - the header, a date, two history item, and a footer;
         checkAdapterContents(mAdapter, true, true, null, null, item1, item2, null);
@@ -105,7 +93,6 @@
     }
 
     @Test
-    @SmallTest
     public void testRemoveItemsWithFooter() {
         Date today = new Date();
         long timestamp = today.getTime();
@@ -120,7 +107,7 @@
         HistoryItem item3 = StubbedHistoryProvider.createHistoryItem(2, timestamp2);
         mHistoryProvider.addItem(item3);
 
-        initializeAdapter();
+        mAdapter.initialize();
 
         // There should be six items - the list header, a date header, a history item, another
         // date header, another history item, and the footer.
@@ -158,7 +145,6 @@
     }
 
     @Test
-    @SmallTest
     public void testSearchWithFooter() {
         Date today = new Date();
         long timestamp = today.getTime();
@@ -177,7 +163,7 @@
         HistoryItem item4 = StubbedHistoryProvider.createHistoryItem(0, timestamp4);
         mHistoryProvider.addItem(item4);
 
-        initializeAdapter();
+        mAdapter.initialize();
         checkAdapterContents(mAdapter, true, true, null, null, item1, null, item2, null);
 
         mAdapter.search("google");
@@ -195,7 +181,6 @@
     }
 
     @Test
-    @SmallTest
     public void testSearchWithoutFooter() {
         Date today = new Date();
         long timestamp = today.getTime();
@@ -214,7 +199,7 @@
         HistoryItem item4 = StubbedHistoryProvider.createHistoryItem(1, timestamp4);
         mHistoryProvider.addItem(item4);
 
-        initializeAdapter();
+        mAdapter.initialize();
         checkAdapterContents(mAdapter, true, true, null, null, item1, null, item2, null);
 
         mAdapter.search("google");
@@ -231,7 +216,6 @@
     }
 
     @Test
-    @SmallTest
     public void testLoadMoreItems() {
         Date today = new Date();
         long timestamp = today.getTime();
@@ -248,7 +232,7 @@
         HistoryItem item4 = StubbedHistoryProvider.createHistoryItem(4, timestamp2);
         mHistoryProvider.addItem(item4);
 
-        initializeAdapter();
+        mAdapter.initialize();
 
         // Only the first 2 of five items should be loaded.
         checkAdapterContents(mAdapter, true, true, null, null, item1, item2, null);
@@ -263,7 +247,6 @@
     }
 
     @Test
-    @SmallTest
     public void testLoadMoreItemsInSearch() {
         Date today = new Date();
         long timestamp = today.getTime();
@@ -281,7 +264,7 @@
         HistoryItem item4 = StubbedHistoryProvider.createHistoryItem(0, timestamp4);
         mHistoryProvider.addItem(item4);
 
-        initializeAdapter();
+        mAdapter.initialize();
         checkAdapterContents(mAdapter, true, true, null, null, item1, item2, null);
 
         mAdapter.search("google");
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/history/HistoryAdapterTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/history/HistoryAdapterTest.java
similarity index 89%
rename from chrome/android/javatests/src/org/chromium/chrome/browser/history/HistoryAdapterTest.java
rename to chrome/android/junit/src/org/chromium/chrome/browser/history/HistoryAdapterTest.java
index 3247b9de..d35a3b59 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/history/HistoryAdapterTest.java
+++ b/chrome/android/junit/src/org/chromium/chrome/browser/history/HistoryAdapterTest.java
@@ -6,23 +6,19 @@
 
 import static org.chromium.chrome.browser.history.HistoryTestUtils.checkAdapterContents;
 
-import android.os.Build;
-import android.support.test.filters.SmallTest;
-
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
+import org.robolectric.annotation.Config;
 
 import org.chromium.base.ContextUtils;
-import org.chromium.base.test.util.DisableIf;
+import org.chromium.base.test.BaseRobolectricTestRunner;
 import org.chromium.chrome.R;
 import org.chromium.chrome.browser.ui.widget.MoreProgressButton;
 import org.chromium.chrome.browser.widget.selection.SelectionDelegate;
-import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
-import org.chromium.content_public.browser.test.util.TestThreadUtils;
 
 import java.util.Date;
 import java.util.concurrent.TimeUnit;
@@ -30,9 +26,8 @@
 /**
  * Tests for the {@link HistoryAdapter}.
  */
-@RunWith(ChromeJUnit4ClassRunner.class)
-@DisableIf.Build(supported_abis_includes = "arm64-v8a",
-        sdk_is_greater_than = Build.VERSION_CODES.LOLLIPOP, message = "crbug.com/1023426")
+@RunWith(BaseRobolectricTestRunner.class)
+@Config(manifest = Config.NONE)
 public class HistoryAdapterTest {
     private StubbedHistoryProvider mHistoryProvider;
     private HistoryAdapter mAdapter;
@@ -50,32 +45,29 @@
     }
 
     private void initializeAdapter() {
-        TestThreadUtils.runOnUiThreadBlocking(() -> mAdapter.initialize());
+        mAdapter.initialize();
     }
 
     @Test
-    @SmallTest
     public void testInitialize_Empty() {
-        initializeAdapter();
+        mAdapter.initialize();
         checkAdapterContents(mAdapter, false, false);
     }
 
     @Test
-    @SmallTest
     public void testInitialize_SingleItem() {
         Date today = new Date();
         long timestamp = today.getTime();
         HistoryItem item1 = StubbedHistoryProvider.createHistoryItem(0, timestamp);
         mHistoryProvider.addItem(item1);
 
-        initializeAdapter();
+        mAdapter.initialize();
 
         // There should be three items - the header, a date and the history item.
         checkAdapterContents(mAdapter, true, false, null, null, item1);
     }
 
     @Test
-    @SmallTest
     public void testRemove_TwoItemsOneDate() {
         Date today = new Date();
         long timestamp = today.getTime();
@@ -85,7 +77,7 @@
         HistoryItem item2 = StubbedHistoryProvider.createHistoryItem(1, timestamp);
         mHistoryProvider.addItem(item2);
 
-        initializeAdapter();
+        mAdapter.initialize();
 
         // There should be four items - the list header, a date header and two history items.
         checkAdapterContents(mAdapter, true, false, null, null, item1, item2);
@@ -109,7 +101,6 @@
     }
 
     @Test
-    @SmallTest
     public void testRemove_TwoItemsTwoDates() {
         Date today = new Date();
         long timestamp = today.getTime();
@@ -120,7 +111,7 @@
         HistoryItem item2 = StubbedHistoryProvider.createHistoryItem(1, timestamp2);
         mHistoryProvider.addItem(item2);
 
-        initializeAdapter();
+        mAdapter.initialize();
 
         // There should be five items - the list header, a date header, a history item, another
         // date header and another history item.
@@ -145,7 +136,6 @@
     }
 
     @Test
-    @SmallTest
     public void testSearch() {
         Date today = new Date();
         long timestamp = today.getTime();
@@ -156,7 +146,7 @@
         HistoryItem item2 = StubbedHistoryProvider.createHistoryItem(1, timestamp2);
         mHistoryProvider.addItem(item2);
 
-        initializeAdapter();
+        mAdapter.initialize();
         checkAdapterContents(mAdapter, true, false, null, null, item1, null, item2);
 
         mAdapter.search("google");
@@ -171,7 +161,6 @@
     }
 
     @Test
-    @SmallTest
     public void testLoadMoreItems() {
         Date today = new Date();
         long timestamp = today.getTime();
@@ -198,7 +187,7 @@
         HistoryItem item7 = StubbedHistoryProvider.createHistoryItem(1, timestamp3);
         mHistoryProvider.addItem(item7);
 
-        initializeAdapter();
+        mAdapter.initialize();
 
         // Only the first five of the seven items should be loaded.
         checkAdapterContents(
@@ -214,26 +203,24 @@
     }
 
     @Test
-    @SmallTest
     public void testOnHistoryDeleted() {
         Date today = new Date();
         long timestamp = today.getTime();
         HistoryItem item1 = StubbedHistoryProvider.createHistoryItem(0, timestamp);
         mHistoryProvider.addItem(item1);
 
-        initializeAdapter();
+        mAdapter.initialize();
 
         checkAdapterContents(mAdapter, true, false, null, null, item1);
 
         mHistoryProvider.removeItem(item1);
 
-        TestThreadUtils.runOnUiThreadBlocking(() -> mAdapter.onHistoryDeleted());
+        mAdapter.onHistoryDeleted();
 
         checkAdapterContents(mAdapter, false, false);
     }
 
     @Test
-    @SmallTest
     public void testBlockedSite() {
         Date today = new Date();
         long timestamp = today.getTime();
@@ -243,7 +230,7 @@
         HistoryItem item2 = StubbedHistoryProvider.createHistoryItem(5, timestamp);
         mHistoryProvider.addItem(item2);
 
-        initializeAdapter();
+        mAdapter.initialize();
 
         checkAdapterContents(mAdapter, true, false, null, null, item1, item2);
         Assert.assertEquals(ContextUtils.getApplicationContext().getString(
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/homepage/HomepagePolicyManagerTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/homepage/HomepagePolicyManagerTest.java
index 674b3ed..685fed8 100644
--- a/chrome/android/junit/src/org/chromium/chrome/browser/homepage/HomepagePolicyManagerTest.java
+++ b/chrome/android/junit/src/org/chromium/chrome/browser/homepage/HomepagePolicyManagerTest.java
@@ -55,7 +55,7 @@
 
         // Disable the policy during setup
         PrefServiceBridge.setInstanceForTesting(mMockServiceBridge);
-        setupNewHomepagePolicyManagerForTests("");
+        setupNewHomepagePolicyManagerForTests(false, "");
 
         // Verify setup
         Assert.assertFalse("#isHomepageManagedByPolicy == true without homepage pref setup",
@@ -67,7 +67,10 @@
      * instance.
      * @param homepageLocation homepage preference that will be returned by mock pref service
      */
-    private void setupNewHomepagePolicyManagerForTests(String homepageLocation) {
+    private void setupNewHomepagePolicyManagerForTests(
+            boolean isPolicyEnabled, String homepageLocation) {
+        Mockito.when(mMockServiceBridge.isManagedPreference(Pref.HOME_PAGE))
+                .thenReturn(isPolicyEnabled);
         Mockito.when(mMockServiceBridge.getString(Pref.HOME_PAGE)).thenReturn(homepageLocation);
 
         TestThreadUtils.runOnUiThreadBlocking(() -> {
@@ -79,7 +82,7 @@
     @Test
     @SmallTest
     public void testInitialization() {
-        setupNewHomepagePolicyManagerForTests(TEST_URL);
+        setupNewHomepagePolicyManagerForTests(true, TEST_URL);
 
         TestThreadUtils.runOnUiThreadBlocking(() -> {
             Assert.assertTrue("#isHomepageManagedByPolicy not consistent with test setting",
@@ -92,7 +95,7 @@
     @Test
     @SmallTest
     public void testInitialization_NTP() {
-        setupNewHomepagePolicyManagerForTests(CHROME_NTP);
+        setupNewHomepagePolicyManagerForTests(true, CHROME_NTP);
 
         TestThreadUtils.runOnUiThreadBlocking(() -> {
             Assert.assertTrue("#isHomepageManagedByPolicy not consistent with test setting",
@@ -117,6 +120,7 @@
 
         // A new policy URL is set, which triggers the refresh of native manager.
         final String newUrl = "https://www.anothertesturl.com";
+        Mockito.when(mMockServiceBridge.isManagedPreference(Pref.HOME_PAGE)).thenReturn(true);
         Mockito.when(mMockServiceBridge.getString(Pref.HOME_PAGE)).thenReturn(newUrl);
 
         // Update the preference, so that the policy will be enabled.
@@ -134,13 +138,14 @@
     @SmallTest
     public void testPrefRefreshToDisablePolicy() {
         // Set a new HomepagePolicyManager with policy enabled
-        setupNewHomepagePolicyManagerForTests(TEST_URL);
+        setupNewHomepagePolicyManagerForTests(true, TEST_URL);
 
         // The verify policyEnabled
         Assert.assertTrue("Policy should be enabled after set up",
                 mHomepagePolicyManager.isHomepageLocationPolicyEnabled());
 
         // Update the preference, so that the policy will be disabled.
+        Mockito.when(mMockServiceBridge.isManagedPreference(Pref.HOME_PAGE)).thenReturn(false);
         Mockito.when(mMockServiceBridge.getString(Pref.HOME_PAGE)).thenReturn("");
         TestThreadUtils.runOnUiThreadBlocking(
                 () -> { mHomepagePolicyManager.onPreferenceChange(); });
@@ -179,7 +184,7 @@
     @Test(expected = AssertionError.class)
     @SmallTest
     public void testIllegal_GetHomepageUrl() {
-        setupNewHomepagePolicyManagerForTests("");
+        setupNewHomepagePolicyManagerForTests(false, "");
         TestThreadUtils.runOnUiThreadBlocking(() -> { HomepagePolicyManager.getHomepageUrl(); });
     }
 
@@ -187,7 +192,6 @@
     @SmallTest
     @DisableFeatures(ChromeFeatureList.HOMEPAGE_LOCATION_POLICY)
     public void testIllegal_Refresh() {
-        // mTestFeatureMap.put(ChromeFeatureList.HOMEPAGE_LOCATION_POLICY, false);
         TestThreadUtils.runOnUiThreadBlocking(
                 () -> { mHomepagePolicyManager.onPreferenceChange(); });
     }
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/webapps/WebappDataStorageTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/webapps/WebappDataStorageTest.java
index 35cf4cc..63c841a 100644
--- a/chrome/android/junit/src/org/chromium/chrome/browser/webapps/WebappDataStorageTest.java
+++ b/chrome/android/junit/src/org/chromium/chrome/browser/webapps/WebappDataStorageTest.java
@@ -43,20 +43,6 @@
     private SharedPreferences mSharedPreferences;
     private boolean mCallbackCalled;
 
-    private class FetchCallback<T> implements WebappDataStorage.FetchCallback<T> {
-        T mExpected;
-
-        FetchCallback(T expected) {
-            mExpected = expected;
-        }
-
-        @Override
-        public void onDataRetrieved(T readObject) {
-            mCallbackCalled = true;
-            assertEquals(mExpected, readObject);
-        }
-    }
-
     @Before
     public void setUp() {
         mSharedPreferences = ContextUtils.getApplicationContext().getSharedPreferences(
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/webapps/WebappDirectoryManagerTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/webapps/WebappDirectoryManagerTest.java
index b637666e..d2c49a0 100644
--- a/chrome/android/junit/src/org/chromium/chrome/browser/webapps/WebappDirectoryManagerTest.java
+++ b/chrome/android/junit/src/org/chromium/chrome/browser/webapps/WebappDirectoryManagerTest.java
@@ -107,7 +107,7 @@
                     @Override
                     public void onWebappDataStorageRetrieved(WebappDataStorage storage) {}
                 });
-        ShadowApplication.getInstance().runBackgroundTasks();
+        ShadowApplication.runBackgroundTasks();
     }
 
     @Test
diff --git a/chrome/android/modules/image_editor/DEPS b/chrome/android/modules/image_editor/DEPS
new file mode 100644
index 0000000..2c39f92
--- /dev/null
+++ b/chrome/android/modules/image_editor/DEPS
@@ -0,0 +1,3 @@
+include_rules = [
+  "+chrome/browser/image_editor",
+]
diff --git a/chrome/android/modules/image_editor/internal/BUILD.gn b/chrome/android/modules/image_editor/internal/BUILD.gn
index 68c8a01..9223fde 100644
--- a/chrome/android/modules/image_editor/internal/BUILD.gn
+++ b/chrome/android/modules/image_editor/internal/BUILD.gn
@@ -7,13 +7,11 @@
 # Upstream ImageEditor DFM implementation which does nothing. Actual
 # implementation lives downstream.
 android_library("java") {
-  java_files = [
-    "java/src/org/chromium/chrome/modules/image_editor/ImageEditorProviderImpl.java",
-    "java/src/org/chromium/chrome/modules/image_editor/ImageEditorCoordinatorImpl.java",
-  ]
+  java_files = [ "java/src/org/chromium/chrome/modules/image_editor/ImageEditorProviderImpl.java" ]
 
   deps = [
-    "//base:base_java",
     "//chrome/android/modules/image_editor/public:java",
+    "//chrome/browser/image_editor/internal:java",
+    "//chrome/browser/image_editor/public:java",
   ]
 }
diff --git a/chrome/android/modules/image_editor/internal/java/src/org/chromium/chrome/modules/image_editor/ImageEditorProviderImpl.java b/chrome/android/modules/image_editor/internal/java/src/org/chromium/chrome/modules/image_editor/ImageEditorProviderImpl.java
index f9dfb86..5923b1d 100644
--- a/chrome/android/modules/image_editor/internal/java/src/org/chromium/chrome/modules/image_editor/ImageEditorProviderImpl.java
+++ b/chrome/android/modules/image_editor/internal/java/src/org/chromium/chrome/modules/image_editor/ImageEditorProviderImpl.java
@@ -7,6 +7,8 @@
 import android.app.Activity;
 
 import org.chromium.base.annotations.UsedByReflection;
+import org.chromium.chrome.browser.image_editor.ImageEditorCoordinator;
+import org.chromium.chrome.browser.image_editor.ImageEditorCoordinatorImpl;
 
 /**
  * Upstream implementation for DFM module hook. Does nothing. Actual implementation lives
diff --git a/chrome/android/modules/image_editor/provider/BUILD.gn b/chrome/android/modules/image_editor/provider/BUILD.gn
index ba3c0fc0..2b4debd 100644
--- a/chrome/android/modules/image_editor/provider/BUILD.gn
+++ b/chrome/android/modules/image_editor/provider/BUILD.gn
@@ -8,7 +8,6 @@
   java_files = [ "java/src/org/chromium/chrome/modules/image_editor/ImageEditorModuleProvider.java" ]
 
   deps = [
-    "//base:base_java",
     "//chrome/android/modules/image_editor/public:java",
   ]
 }
diff --git a/chrome/android/modules/image_editor/public/BUILD.gn b/chrome/android/modules/image_editor/public/BUILD.gn
index f20d6496..3faff647 100644
--- a/chrome/android/modules/image_editor/public/BUILD.gn
+++ b/chrome/android/modules/image_editor/public/BUILD.gn
@@ -5,13 +5,10 @@
 import("//build/config/android/rules.gni")
 
 android_library("java") {
-  java_files = [
-    "java/src/org/chromium/chrome/modules/image_editor/ImageEditorProvider.java",
-    "java/src/org/chromium/chrome/modules/image_editor/ImageEditorCoordinator.java",
-  ]
+  java_files = [ "java/src/org/chromium/chrome/modules/image_editor/ImageEditorProvider.java" ]
 
   deps = [
-    "//base:base_java",
+    "//chrome/browser/image_editor/public:java",
     "//components/module_installer/android:module_installer_java",
     "//components/module_installer/android:module_interface_java",
   ]
diff --git a/chrome/android/modules/image_editor/public/java/src/org/chromium/chrome/modules/image_editor/ImageEditorProvider.java b/chrome/android/modules/image_editor/public/java/src/org/chromium/chrome/modules/image_editor/ImageEditorProvider.java
index 93cd43a..060cd07d 100644
--- a/chrome/android/modules/image_editor/public/java/src/org/chromium/chrome/modules/image_editor/ImageEditorProvider.java
+++ b/chrome/android/modules/image_editor/public/java/src/org/chromium/chrome/modules/image_editor/ImageEditorProvider.java
@@ -6,6 +6,7 @@
 
 import android.app.Activity;
 
+import org.chromium.chrome.browser.image_editor.ImageEditorCoordinator;
 import org.chromium.components.module_installer.builder.ModuleInterface;
 
 /**
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
index 7df74bc..437aa4d 100644
--- a/chrome/browser/about_flags.cc
+++ b/chrome/browser/about_flags.cc
@@ -54,7 +54,6 @@
 #include "chrome/common/chrome_content_client.h"
 #include "chrome/common/chrome_features.h"
 #include "chrome/common/chrome_switches.h"
-#include "chromeos/components/proximity_auth/switches.h"
 #include "components/assist_ranker/predictor_config_definitions.h"
 #include "components/autofill/core/browser/autofill_experiments.h"
 #include "components/autofill/core/common/autofill_features.h"
diff --git a/chrome/browser/android/chrome_backup_agent.cc b/chrome/browser/android/chrome_backup_agent.cc
index adef943..18d41b7b 100644
--- a/chrome/browser/android/chrome_backup_agent.cc
+++ b/chrome/browser/android/chrome_backup_agent.cc
@@ -21,23 +21,11 @@
     data_reduction_proxy::prefs::kDataSaverEnabled,
     syncer::prefs::kSyncFirstSetupComplete,
     syncer::prefs::kSyncKeepEverythingSynced,
-    syncer::prefs::kSyncAutofillProfile,
-    syncer::prefs::kSyncAutofillWallet,
-    syncer::prefs::kSyncAutofillWalletMetadata,
     syncer::prefs::kSyncAutofill,
     syncer::prefs::kSyncBookmarks,
-    syncer::prefs::kSyncDeviceInfo,
-    syncer::prefs::kSyncFaviconImages,
-    syncer::prefs::kSyncFaviconTracking,
-    syncer::prefs::kSyncHistoryDeleteDirectives,
     syncer::prefs::kSyncPasswords,
     syncer::prefs::kSyncPreferences,
-    syncer::prefs::kSyncPriorityPreferences,
     syncer::prefs::kSyncRequested,
-    syncer::prefs::kSyncSessions,
-    syncer::prefs::kSyncSupervisedUserSettings,
-    syncer::prefs::kSyncSupervisedUserSharedSettings,
-    syncer::prefs::kSyncSupervisedUserWhitelists,
     syncer::prefs::kSyncTabs,
     syncer::prefs::kSyncTypedUrls,
 };
diff --git a/chrome/browser/autofill/autofill_captured_sites_interactive_uitest.cc b/chrome/browser/autofill/autofill_captured_sites_interactive_uitest.cc
index 85b157c4..cb4ff00c 100644
--- a/chrome/browser/autofill/autofill_captured_sites_interactive_uitest.cc
+++ b/chrome/browser/autofill/autofill_captured_sites_interactive_uitest.cc
@@ -327,7 +327,7 @@
   }
 }
 INSTANTIATE_TEST_SUITE_P(
-    ,
+    All,
     AutofillCapturedSitesInteractiveTest,
     testing::ValuesIn(GetCapturedSites(GetReplayFilesRootDirectory())),
     captured_sites_test_utils::GetParamAsString());
diff --git a/chrome/browser/certificate_manager_model_unittest.cc b/chrome/browser/certificate_manager_model_unittest.cc
index 9d42415..2b5ca9f 100644
--- a/chrome/browser/certificate_manager_model_unittest.cc
+++ b/chrome/browser/certificate_manager_model_unittest.cc
@@ -113,7 +113,9 @@
 
 // CertificateManagerModel correctly lists CA certificates from the platform NSS
 // Database.
-TEST_F(CertificateManagerModelTest, ListsCertsFromPlatform) {
+// TODO(https://crbug.com/787602): Re-enable this test when it is identified why
+// it was flaky.
+TEST_F(CertificateManagerModelTest, DISABLED_ListsCertsFromPlatform) {
   net::ScopedCERTCertificateList certs = CreateCERTCertificateListFromFile(
       net::GetTestCertsDirectory(), "websocket_cacert.pem",
       net::X509Certificate::FORMAT_AUTO);
diff --git a/chrome/browser/chromeos/login/easy_unlock/easy_unlock_auth_attempt.cc b/chrome/browser/chromeos/login/easy_unlock/easy_unlock_auth_attempt.cc
index 8a3871a..9990583c 100644
--- a/chrome/browser/chromeos/login/easy_unlock/easy_unlock_auth_attempt.cc
+++ b/chrome/browser/chromeos/login/easy_unlock/easy_unlock_auth_attempt.cc
@@ -10,7 +10,6 @@
 #include "build/build_config.h"
 #include "chrome/browser/chromeos/login/easy_unlock/easy_unlock_key_manager.h"
 #include "chromeos/components/proximity_auth/screenlock_bridge.h"
-#include "chromeos/components/proximity_auth/switches.h"
 #include "crypto/encryptor.h"
 #include "crypto/symmetric_key.h"
 
diff --git a/chrome/browser/chromeos/login/easy_unlock/easy_unlock_auth_attempt_unittest.cc b/chrome/browser/chromeos/login/easy_unlock/easy_unlock_auth_attempt_unittest.cc
index 6c65a7a..9007c5c 100644
--- a/chrome/browser/chromeos/login/easy_unlock/easy_unlock_auth_attempt_unittest.cc
+++ b/chrome/browser/chromeos/login/easy_unlock/easy_unlock_auth_attempt_unittest.cc
@@ -11,7 +11,6 @@
 #include "build/build_config.h"
 #include "chrome/browser/chromeos/login/easy_unlock/easy_unlock_key_manager.h"
 #include "chromeos/components/proximity_auth/screenlock_bridge.h"
-#include "chromeos/components/proximity_auth/switches.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
 namespace chromeos {
diff --git a/chrome/browser/chromeos/login/easy_unlock/easy_unlock_notification_controller.h b/chrome/browser/chromeos/login/easy_unlock/easy_unlock_notification_controller.h
index 3092b805c..75353a7 100644
--- a/chrome/browser/chromeos/login/easy_unlock/easy_unlock_notification_controller.h
+++ b/chrome/browser/chromeos/login/easy_unlock/easy_unlock_notification_controller.h
@@ -11,8 +11,6 @@
 #include "base/callback.h"
 #include "base/macros.h"
 #include "base/memory/weak_ptr.h"
-#include "chrome/browser/chromeos/login/easy_unlock/easy_unlock_notification_controller.h"
-#include "chromeos/components/proximity_auth/notification_controller.h"
 #include "ui/message_center/public/cpp/notification.h"
 #include "ui/message_center/public/cpp/notification_delegate.h"
 
@@ -20,17 +18,22 @@
 
 namespace chromeos {
 
-class EasyUnlockNotificationController
-    : public proximity_auth::NotificationController {
+class EasyUnlockNotificationController {
  public:
   explicit EasyUnlockNotificationController(Profile* profile);
-  ~EasyUnlockNotificationController() override;
+  virtual ~EasyUnlockNotificationController();
 
-  // proximity_auth::NotificationController:
-  void ShowChromebookAddedNotification() override;
-  void ShowPairingChangeNotification() override;
-  void ShowPairingChangeAppliedNotification(
-      const std::string& phone_name) override;
+  // Shows the notification when EasyUnlock is synced to a new Chromebook.
+  virtual void ShowChromebookAddedNotification();
+
+  // Shows the notification when EasyUnlock is already enabled on a Chromebook,
+  // but a different phone is synced as the unlock key.
+  virtual void ShowPairingChangeNotification();
+
+  // Shows the notification after password reauth confirming that the new phone
+  // should be used for EasyUnlock from now on.
+  virtual void ShowPairingChangeAppliedNotification(
+      const std::string& phone_name);
 
  protected:
   // Exposed for testing.
diff --git a/chrome/browser/chromeos/login/easy_unlock/easy_unlock_service.cc b/chrome/browser/chromeos/login/easy_unlock/easy_unlock_service.cc
index d34ca34..fe2bb79 100644
--- a/chrome/browser/chromeos/login/easy_unlock/easy_unlock_service.cc
+++ b/chrome/browser/chromeos/login/easy_unlock/easy_unlock_service.cc
@@ -36,7 +36,6 @@
 #include "chromeos/components/proximity_auth/proximity_auth_profile_pref_manager.h"
 #include "chromeos/components/proximity_auth/proximity_auth_system.h"
 #include "chromeos/components/proximity_auth/screenlock_bridge.h"
-#include "chromeos/components/proximity_auth/switches.h"
 #include "chromeos/dbus/dbus_thread_manager.h"
 #include "chromeos/dbus/power/power_manager_client.h"
 #include "chromeos/login/auth/user_context.h"
@@ -384,7 +383,7 @@
   // attempted. However, we ideally should refactor the auth attempt logic to
   // the proximity_auth component.
   if (proximity_auth_system_)
-    proximity_auth_system_->OnAuthAttempted(account_id);
+    proximity_auth_system_->OnAuthAttempted();
 }
 
 void EasyUnlockService::FinalizeUnlock(bool success) {
diff --git a/chrome/browser/chromeos/login/easy_unlock/easy_unlock_service.h b/chrome/browser/chromeos/login/easy_unlock/easy_unlock_service.h
index 675e38c6..8d629fc 100644
--- a/chrome/browser/chromeos/login/easy_unlock/easy_unlock_service.h
+++ b/chrome/browser/chromeos/login/easy_unlock/easy_unlock_service.h
@@ -82,9 +82,6 @@
   // Returns the user currently associated with the service.
   virtual AccountId GetAccountId() const = 0;
 
-  // Gets/Sets/Clears the permit access for the local device.
-  virtual void ClearPermitAccess() = 0;
-
   // Retrieve the stored remote devices list:
   //   * If in regular context, device list is retrieved from prefs.
   //   * If in sign-in context, device list is retrieved from TPM.
diff --git a/chrome/browser/chromeos/login/easy_unlock/easy_unlock_service_regular.cc b/chrome/browser/chromeos/login/easy_unlock/easy_unlock_service_regular.cc
index 2e55d815..23878c9 100644
--- a/chrome/browser/chromeos/login/easy_unlock/easy_unlock_service_regular.cc
+++ b/chrome/browser/chromeos/login/easy_unlock/easy_unlock_service_regular.cc
@@ -41,7 +41,6 @@
 #include "chromeos/components/proximity_auth/proximity_auth_system.h"
 #include "chromeos/components/proximity_auth/screenlock_bridge.h"
 #include "chromeos/components/proximity_auth/smart_lock_metrics_recorder.h"
-#include "chromeos/components/proximity_auth/switches.h"
 #include "chromeos/constants/chromeos_features.h"
 #include "components/gcm_driver/gcm_profile_service.h"
 #include "components/pref_registry/pref_registry_syncable.h"
@@ -60,9 +59,6 @@
 
 namespace {
 
-// Key name of the local device permit record dictonary in kEasyUnlockPairing.
-const char kKeyPermitAccess[] = "permitAccess";
-
 // Key name of the remote device list in kEasyUnlockPairing.
 const char kKeyDevices[] = "devices";
 
@@ -292,12 +288,6 @@
   return primary_user->GetAccountId();
 }
 
-void EasyUnlockServiceRegular::ClearPermitAccess() {
-  DictionaryPrefUpdate pairing_update(profile()->GetPrefs(),
-                                      prefs::kEasyUnlockPairing);
-  pairing_update->RemoveWithoutPathExpansion(kKeyPermitAccess, NULL);
-}
-
 const base::ListValue* EasyUnlockServiceRegular::GetRemoteDevices() const {
   const base::DictionaryValue* pairing_dict =
       profile()->GetPrefs()->GetDictionary(prefs::kEasyUnlockPairing);
@@ -459,9 +449,6 @@
 void EasyUnlockServiceRegular::ShowNotificationIfNewDevicePresent(
     const std::set<std::string>& public_keys_before_sync,
     const std::set<std::string>& public_keys_after_sync) {
-  if (public_keys_after_sync.empty())
-    ClearPermitAccess();
-
   if (public_keys_before_sync == public_keys_after_sync)
     return;
 
diff --git a/chrome/browser/chromeos/login/easy_unlock/easy_unlock_service_regular.h b/chrome/browser/chromeos/login/easy_unlock/easy_unlock_service_regular.h
index 3ce20307..a94e415 100644
--- a/chrome/browser/chromeos/login/easy_unlock/easy_unlock_service_regular.h
+++ b/chrome/browser/chromeos/login/easy_unlock/easy_unlock_service_regular.h
@@ -84,7 +84,6 @@
       override;
   EasyUnlockService::Type GetType() const override;
   AccountId GetAccountId() const override;
-  void ClearPermitAccess() override;
   const base::ListValue* GetRemoteDevices() const override;
   std::string GetChallenge() const override;
   std::string GetWrappedSecret() const override;
diff --git a/chrome/browser/chromeos/login/easy_unlock/easy_unlock_service_signin_chromeos.cc b/chrome/browser/chromeos/login/easy_unlock/easy_unlock_service_signin_chromeos.cc
index f7507fb..e923f5a 100644
--- a/chrome/browser/chromeos/login/easy_unlock/easy_unlock_service_signin_chromeos.cc
+++ b/chrome/browser/chromeos/login/easy_unlock/easy_unlock_service_signin_chromeos.cc
@@ -30,7 +30,6 @@
 #include "chromeos/components/multidevice/software_feature_state.h"
 #include "chromeos/components/proximity_auth/proximity_auth_local_state_pref_manager.h"
 #include "chromeos/components/proximity_auth/smart_lock_metrics_recorder.h"
-#include "chromeos/components/proximity_auth/switches.h"
 #include "chromeos/constants/chromeos_features.h"
 #include "chromeos/login/auth/user_context.h"
 #include "chromeos/login/login_state/login_state.h"
@@ -227,10 +226,6 @@
   return account_id_;
 }
 
-void EasyUnlockServiceSignin::ClearPermitAccess() {
-  NOTREACHED();
-}
-
 const base::ListValue* EasyUnlockServiceSignin::GetRemoteDevices() const {
   const UserData* data = FindLoadedDataForCurrentUser();
   if (!data)
diff --git a/chrome/browser/chromeos/login/easy_unlock/easy_unlock_service_signin_chromeos.h b/chrome/browser/chromeos/login/easy_unlock/easy_unlock_service_signin_chromeos.h
index 254525db..daeb05c 100644
--- a/chrome/browser/chromeos/login/easy_unlock/easy_unlock_service_signin_chromeos.h
+++ b/chrome/browser/chromeos/login/easy_unlock/easy_unlock_service_signin_chromeos.h
@@ -90,7 +90,6 @@
       override;
   EasyUnlockService::Type GetType() const override;
   AccountId GetAccountId() const override;
-  void ClearPermitAccess() override;
   const base::ListValue* GetRemoteDevices() const override;
   std::string GetChallenge() const override;
   std::string GetWrappedSecret() const override;
diff --git a/chrome/browser/chromeos/login/login_browsertest.cc b/chrome/browser/chromeos/login/login_browsertest.cc
index 56fbf14..eb919550 100644
--- a/chrome/browser/chromeos/login/login_browsertest.cc
+++ b/chrome/browser/chromeos/login/login_browsertest.cc
@@ -11,6 +11,8 @@
 #include "base/command_line.h"
 #include "chrome/browser/chrome_notification_types.h"
 #include "chrome/browser/chromeos/login/login_wizard.h"
+#include "chrome/browser/chromeos/login/test/embedded_test_server_mixin.h"
+#include "chrome/browser/chromeos/login/test/fake_gaia_mixin.h"
 #include "chrome/browser/chromeos/login/test/guest_session_mixin.h"
 #include "chrome/browser/chromeos/login/test/login_manager_mixin.h"
 #include "chrome/browser/chromeos/login/test/offline_gaia_test_mixin.h"
@@ -23,6 +25,7 @@
 #include "chromeos/constants/chromeos_switches.h"
 #include "components/user_manager/user_names.h"
 #include "content/public/test/test_utils.h"
+#include "net/dns/mock_host_resolver.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "ui/gfx/geometry/test/rect_test_util.h"
 
@@ -75,6 +78,11 @@
   LoginTest() = default;
   ~LoginTest() override {}
 
+  void SetUpOnMainThread() override {
+    host_resolver()->AddRule("*", "127.0.0.1");
+    MixinBasedInProcessBrowserTest::SetUpOnMainThread();
+  }
+
  protected:
   const LoginManagerMixin::TestUserInfo test_user_{
       AccountId::FromUserEmailGaiaId(kTestUser, kGaiaId),
@@ -82,6 +90,11 @@
 
   LoginManagerMixin login_manager_{&mixin_host_, {test_user_}};
   OfflineGaiaTestMixin offline_gaia_test_mixin_{&mixin_host_};
+  EmbeddedTestServerSetupMixin embedded_test_server_{&mixin_host_,
+                                                     embedded_test_server()};
+  // We need Fake gaia to avoid network errors that can be caused by
+  // attempts to load real GAIA.
+  FakeGaiaMixin fake_gaia_{&mixin_host_, embedded_test_server()};
 };
 
 // Used to make sure that the system tray is visible and within the screen
@@ -154,7 +167,7 @@
 }
 
 // Flaking: https://crbug.com/1023591
-IN_PROC_BROWSER_TEST_F(LoginTest, DISABLED_GaiaAuthOffline) {
+IN_PROC_BROWSER_TEST_F(LoginTest, GaiaAuthOffline) {
   offline_gaia_test_mixin_.GoOffline();
   offline_gaia_test_mixin_.SignIn(test_user_.account_id, kPassword);
   TestSystemTrayIsVisible(false);
diff --git a/chrome/browser/chromeos/login/test/oobe_base_test.cc b/chrome/browser/chromeos/login/test/oobe_base_test.cc
index 096aa6e..d2e0896 100644
--- a/chrome/browser/chromeos/login/test/oobe_base_test.cc
+++ b/chrome/browser/chromeos/login/test/oobe_base_test.cc
@@ -34,8 +34,6 @@
 #include "content/public/test/test_utils.h"
 #include "google_apis/gaia/gaia_switches.h"
 #include "net/dns/mock_host_resolver.h"
-#include "net/test/embedded_test_server/http_request.h"
-#include "net/test/embedded_test_server/http_response.h"
 
 namespace chromeos {
 
diff --git a/chrome/browser/component_updater/chrome_component_updater_configurator.cc b/chrome/browser/component_updater/chrome_component_updater_configurator.cc
index 29eba94..77e0fdc 100644
--- a/chrome/browser/component_updater/chrome_component_updater_configurator.cc
+++ b/chrome/browser/component_updater/chrome_component_updater_configurator.cc
@@ -257,13 +257,11 @@
   return configurator_impl_.GetProtocolHandlerFactory();
 }
 
+// TODO(sorin): remove the members related to elevation, action runners, and
+// recovery component. crbug.com/1027395
 update_client::RecoveryCRXElevator ChromeConfigurator::GetRecoveryCRXElevator()
     const {
-#if BUILDFLAG(GOOGLE_CHROME_BRANDING) && defined(OS_WIN)
-  return base::BindOnce(&RunRecoveryCRXElevated);
-#else
-  return {};
-#endif
+  return configurator_impl_.GetRecoveryCRXElevator();
 }
 
 }  // namespace
diff --git a/chrome/browser/component_updater/recovery_improved_component_installer.cc b/chrome/browser/component_updater/recovery_improved_component_installer.cc
index 248dc6d..9d6479e 100644
--- a/chrome/browser/component_updater/recovery_improved_component_installer.cc
+++ b/chrome/browser/component_updater/recovery_improved_component_installer.cc
@@ -4,38 +4,78 @@
 
 #include "chrome/browser/component_updater/recovery_improved_component_installer.h"
 
-#include <iterator>
-#include <utility>
-
-#include "base/callback.h"
-#include "base/memory/ref_counted.h"
-#include "base/process/process.h"
-#include "base/strings/sys_string_conversions.h"
 #include "build/branding_buildflags.h"
+
+// The recovery component is built and used by Google Chrome only.
+#if BUILDFLAG(GOOGLE_CHROME_BRANDING)
+
+#include "base/files/file_path.h"
+#include "base/logging.h"
 #include "build/build_config.h"
 
+// The action handler is defined for Windows only. crbug/687231.
 #if defined(OS_WIN)
 #include <windows.h>
 #include <wrl/client.h>
-#include "chrome/install_static/install_util.h"
-#endif
 
-#if defined(OS_WIN) && BUILDFLAG(GOOGLE_CHROME_BRANDING)
+#include <iterator>
+#include <tuple>
+#include <utility>
+
+#include "base/bind.h"
+#include "base/callback.h"
+#include "base/command_line.h"
+#include "base/files/file_util.h"
+#include "base/memory/ref_counted.h"
+#include "base/process/launch.h"
+#include "base/process/process.h"
+#include "base/sequence_checker.h"
+#include "base/single_thread_task_runner.h"
+#include "base/strings/utf_string_conversions.h"
+#include "base/task/post_task.h"
+#include "base/threading/sequenced_task_runner_handle.h"
+#include "chrome/browser/component_updater/component_updater_utils.h"
 #include "chrome/elevation_service/elevation_service_idl.h"
-#endif
+#include "chrome/install_static/install_util.h"
+#include "components/crx_file/crx_verifier.h"
+#include "components/services/unzip/content/unzip_service.h"
+#include "components/update_client/component_unpacker.h"
+#include "components/update_client/patcher.h"
+#include "components/update_client/unzip/unzip_impl.h"
+#include "components/version_info/version_info.h"
+#endif  // OS_WIN
 
 // This component is behind a Finch experiment. To enable the registration of
 // the component, run Chrome with --enable-features=ImprovedRecoveryComponent.
 namespace component_updater {
 
-// The SHA256 of the SubjectPublicKeyInfo used to sign the component CRX.
-// The component id is: ihnlcenocehgdaegdmhbidjhnhdchfmm
-constexpr uint8_t kRecoveryImprovedPublicKeySHA256[32] = {
-    0x87, 0xdb, 0x24, 0xde, 0x24, 0x76, 0x30, 0x46, 0x3c, 0x71, 0x83,
-    0x97, 0xd7, 0x32, 0x75, 0xcc, 0xd5, 0x7f, 0xec, 0x09, 0x60, 0x6d,
-    0x20, 0xc3, 0x81, 0xd7, 0xce, 0x7b, 0x10, 0x15, 0x44, 0xd1};
+#if defined(OS_WIN)
 
-#if BUILDFLAG(GOOGLE_CHROME_BRANDING) && defined(OS_WIN)
+namespace {
+
+const base::FilePath::CharType kRecoveryFileName[] =
+    FILE_PATH_LITERAL("ChromeRecovery.exe");
+
+constexpr base::TaskTraits kTaskTraits = {
+    base::ThreadPool(), base::MayBlock(), base::TaskPriority::BEST_EFFORT,
+    base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN};
+
+// This task joins a process, hence .WithBaseSyncPrimitives().
+constexpr base::TaskTraits kTaskTraitsRunCommand = {
+    base::ThreadPool(), base::MayBlock(), base::WithBaseSyncPrimitives(),
+    base::TaskPriority::BEST_EFFORT,
+    base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN};
+
+// Returns the current browser version.
+std::string GetBrowserVersion() {
+  return version_info::GetVersion().GetString();
+}
+
+// Returns the Chrome's appid registered with Google Update for updates.
+std::string GetBrowserAppId() {
+  return base::UTF16ToUTF8(install_static::GetAppGuid());
+}
+
 // Instantiates the elevator service, calls its elevator interface, then
 // blocks waiting for the recovery processes to exit. Returns the result
 // of the recovery as a tuple.
@@ -60,9 +100,9 @@
 
   ULONG_PTR proc_handle = 0;
   hr = elevator->RunRecoveryCRXElevated(
-      crx_path.value().c_str(), base::SysUTF8ToWide(browser_appid).c_str(),
-      base::SysUTF8ToWide(browser_version).c_str(),
-      base::SysUTF8ToWide(session_id).c_str(), base::Process::Current().Pid(),
+      crx_path.value().c_str(), base::UTF8ToWide(browser_appid).c_str(),
+      base::UTF8ToWide(browser_version).c_str(),
+      base::UTF8ToWide(session_id).c_str(), base::Process::Current().Pid(),
       &proc_handle);
   if (FAILED(hr))
     return {false, static_cast<int>(hr), 0};
@@ -74,7 +114,196 @@
       process.WaitForExitWithTimeout(kMaxWaitTime, &exit_code);
   return {succeeded, exit_code, 0};
 }
-#endif
+
+// Handles the |run| action for the recovery component for Windows.
+//
+// The recovery component for Windows consists of a Windows executable
+// program named |ChromeRecovery.exe|, wrapped inside a CRX container, which
+// is itself contained inside a component updater CRX payload.
+// In other words, looking from outside, the component updater installs and
+// updates a CRX, containing a CRX, containing an EXE.
+
+// The |ActionHandler| is responsible for unpacking the inner CRX described
+// above, and running the executable program inside it.
+//
+// The |ActionHandler::Handle| function is invoked as a result of an |action|
+// element present in the update response for the recovery component. Note that
+// the |action| element can be present in the update response even if there are
+// no updates for the recovery component.
+//
+// When Chrome is installed per-system, the CRX is being handed over to
+// a system elevator, which unpacks the CRX in a secure location of the
+// file system, and runs the recovery program with system privileges.
+//
+// When Chrome is installed per-user, the CRX is unpacked in a temporary
+// directory for the user, and the recovery program runs with normal user
+// privileges.
+class ActionHandler : public update_client::ActionHandler {
+ public:
+  ActionHandler();
+
+ private:
+  ~ActionHandler() override;
+
+  // Overrides for update_client::ActionHandler. |action| is an absolute file
+  // path to a CRX to be unpacked. |session_id| contains the session id
+  // corresponding to the current update transaction. The session id is passed
+  // as a command line argument to the recovery program, and sent as part of
+  // the completion pings during the actual recovery.
+  void Handle(const base::FilePath& action,
+              const std::string& session_id,
+              Callback callback) override;
+
+  // Calls the elevator service to handle the CRX. Since the invocation of
+  // the elevator service consists of several Windows COM IPC calls, a
+  // certain type of task runner is necessary to initialize a COM apartment.
+  void RunElevatedInSTA();
+
+  void Unpack();
+  void UnpackComplete(const update_client::ComponentUnpacker::Result& result);
+  void RunCommand(const base::CommandLine& cmdline);
+  base::CommandLine MakeCommandLine(const base::FilePath& unpack_path) const;
+  void WaitForCommand(base::Process process);
+
+  SEQUENCE_CHECKER(sequence_checker_);
+
+  // True if Chrome is installed per-user.
+  bool is_per_user_install_ = component_updater::IsPerUserInstall();
+
+  // Executes tasks in the context of the sequence which created this object.
+  scoped_refptr<base::SequencedTaskRunner> main_task_runner_ =
+      base::SequencedTaskRunnerHandle::Get();
+
+  // Contains the CRX specified as a run action.
+  base::FilePath crx_path_;
+
+  // The session id of the update transaction, as defined by |update_client|.
+  std::string session_id_;
+
+  // Called when the action is handled.
+  Callback callback_;
+
+  // Contains the path where the action CRX is unpacked in the per-user case.
+  base::FilePath unpack_path_;
+
+  ActionHandler(const ActionHandler&) = delete;
+  ActionHandler& operator=(const ActionHandler&) = delete;
+};
+
+ActionHandler::ActionHandler() = default;
+
+ActionHandler::~ActionHandler() {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+}
+
+void ActionHandler::Handle(const base::FilePath& action,
+                           const std::string& session_id,
+                           Callback callback) {
+  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+
+  crx_path_ = action;
+  session_id_ = session_id;
+  callback_ = std::move(callback);
+
+  // Unpacks the CRX for this user or hands it over to the system elevator.
+  if (is_per_user_install_) {
+    base::CreateSequencedTaskRunner(kTaskTraits)
+        ->PostTask(FROM_HERE, base::BindOnce(&ActionHandler::Unpack, this));
+  } else {
+    base::CreateCOMSTATaskRunner(
+        kTaskTraitsRunCommand,
+        base::SingleThreadTaskRunnerThreadMode::DEDICATED)
+        ->PostTask(FROM_HERE,
+                   base::BindOnce(&ActionHandler::RunElevatedInSTA, this));
+  }
+}
+
+void ActionHandler::RunElevatedInSTA() {
+  bool succeeded = false;
+  int error_code = 0;
+  int extra_code = 0;
+  std::tie(succeeded, error_code, extra_code) = RunRecoveryCRXElevated(
+      crx_path_, GetBrowserAppId(), GetBrowserVersion(), session_id_);
+  main_task_runner_->PostTask(
+      FROM_HERE,
+      base::BindOnce(std::move(callback_), succeeded, error_code, extra_code));
+}
+
+void ActionHandler::Unpack() {
+  // The key hash for the inner CRX.
+  const std::vector<uint8_t> key_hash = {
+      0x5f, 0x94, 0xe0, 0x3c, 0x64, 0x30, 0x9f, 0xbc, 0xfe, 0x00, 0x9a,
+      0x27, 0x3e, 0x52, 0xbf, 0xa5, 0x84, 0xb9, 0xb3, 0x75, 0x07, 0x29,
+      0xde, 0xfa, 0x32, 0x76, 0xd9, 0x93, 0xb5, 0xa3, 0xce, 0x02};
+  auto unzipper = base::MakeRefCounted<update_client::UnzipChromiumFactory>(
+                      base::BindRepeating(&unzip::LaunchUnzipper))
+                      ->Create();
+  auto unpacker = base::MakeRefCounted<update_client::ComponentUnpacker>(
+      key_hash, crx_path_, nullptr, std::move(unzipper), nullptr,
+      crx_file::VerifierFormat::CRX3_WITH_PUBLISHER_PROOF);
+  unpacker->Unpack(base::BindOnce(&ActionHandler::UnpackComplete, this));
+}
+
+void ActionHandler::UnpackComplete(
+    const update_client::ComponentUnpacker::Result& result) {
+  if (result.error != update_client::UnpackerError::kNone) {
+    DCHECK(!base::DirectoryExists(result.unpack_path));
+    main_task_runner_->PostTask(
+        FROM_HERE,
+        base::BindOnce(std::move(callback_), false,
+                       static_cast<int>(result.error), result.extended_error));
+    return;
+  }
+
+  unpack_path_ = result.unpack_path;
+  base::SequencedTaskRunnerHandle::Get()->PostTask(
+      FROM_HERE, base::BindOnce(&ActionHandler::RunCommand, this,
+                                MakeCommandLine(result.unpack_path)));
+}
+
+void ActionHandler::RunCommand(const base::CommandLine& cmdline) {
+  base::LaunchOptions options;
+  options.start_hidden = true;
+  base::Process process = base::LaunchProcess(cmdline, options);
+  base::PostTask(
+      FROM_HERE, kTaskTraitsRunCommand,
+      base::BindOnce(&ActionHandler::WaitForCommand, this, std::move(process)));
+}
+
+base::CommandLine ActionHandler::MakeCommandLine(
+    const base::FilePath& unpack_path) const {
+  base::CommandLine command_line(unpack_path.Append(kRecoveryFileName));
+  if (!is_per_user_install_)
+    command_line.AppendSwitch("system");
+  command_line.AppendSwitchASCII("browser-version", GetBrowserVersion());
+  command_line.AppendSwitchASCII("sessionid", session_id_);
+  const auto app_guid = GetBrowserAppId();
+  if (!app_guid.empty())
+    command_line.AppendSwitchASCII("appguid", app_guid);
+  VLOG(1) << "run action: " << command_line.GetCommandLineString();
+  return command_line;
+}
+
+void ActionHandler::WaitForCommand(base::Process process) {
+  int exit_code = 0;
+  const base::TimeDelta kMaxWaitTime = base::TimeDelta::FromSeconds(600);
+  const bool succeeded =
+      process.WaitForExitWithTimeout(kMaxWaitTime, &exit_code);
+  base::DeleteFileRecursively(unpack_path_);
+  main_task_runner_->PostTask(
+      FROM_HERE, base::BindOnce(std::move(callback_), succeeded, exit_code, 0));
+}
+
+}  // namespace
+
+#endif  // OS_WIN
+
+// The SHA256 of the SubjectPublicKeyInfo used to sign the component CRX.
+// The component id is: ihnlcenocehgdaegdmhbidjhnhdchfmm
+constexpr uint8_t kRecoveryImprovedPublicKeySHA256[32] = {
+    0x87, 0xdb, 0x24, 0xde, 0x24, 0x76, 0x30, 0x46, 0x3c, 0x71, 0x83,
+    0x97, 0xd7, 0x32, 0x75, 0xcc, 0xd5, 0x7f, 0xec, 0x09, 0x60, 0x6d,
+    0x20, 0xc3, 0x81, 0xd7, 0xce, 0x7b, 0x10, 0x15, 0x44, 0xd1};
 
 RecoveryImprovedInstallerPolicy::RecoveryImprovedInstallerPolicy(
     PrefService* prefs)
@@ -130,27 +359,32 @@
 
 update_client::InstallerAttributes
 RecoveryImprovedInstallerPolicy::GetInstallerAttributes() const {
-  return update_client::InstallerAttributes();
+  return {};
 }
 
 std::vector<std::string> RecoveryImprovedInstallerPolicy::GetMimeTypes() const {
-  return std::vector<std::string>();
+  return {};
 }
 
 void RegisterRecoveryImprovedComponent(ComponentUpdateService* cus,
                                        PrefService* prefs) {
-#if BUILDFLAG(GOOGLE_CHROME_BRANDING)
-#if defined(OS_WIN) || defined(OS_MACOSX)
+// TODO(sorin): enable recovery component for macOS. crbug/687231.
+#if defined(OS_WIN)
   DVLOG(1) << "Registering RecoveryImproved component.";
 
-  // |cus| takes ownership of |installer| through the CrxComponent instance.
+  // |cus| keeps a reference to the |installer| in the CrxComponent instance.
   auto installer = base::MakeRefCounted<ComponentInstaller>(
-      std::make_unique<RecoveryImprovedInstallerPolicy>(prefs));
+      std::make_unique<RecoveryImprovedInstallerPolicy>(prefs),
+      base::MakeRefCounted<ActionHandler>());
   installer->Register(cus, base::OnceClosure());
 #endif
-#endif
 }
 
-void RegisterPrefsForRecoveryImprovedComponent(PrefRegistrySimple* registry) {}
-
 }  // namespace component_updater
+
+#else
+namespace component_updater {
+void RegisterRecoveryImprovedComponent(ComponentUpdateService* cus,
+                                       PrefService* prefs) {}
+}  // namespace component_updater
+#endif  // GOOGLE_CHROME_BRANDING
diff --git a/chrome/browser/component_updater/recovery_improved_component_installer.h b/chrome/browser/component_updater/recovery_improved_component_installer.h
index 39119d1a..7827faff 100644
--- a/chrome/browser/component_updater/recovery_improved_component_installer.h
+++ b/chrome/browser/component_updater/recovery_improved_component_installer.h
@@ -5,9 +5,9 @@
 #ifndef CHROME_BROWSER_COMPONENT_UPDATER_RECOVERY_IMPROVED_COMPONENT_INSTALLER_H_
 #define CHROME_BROWSER_COMPONENT_UPDATER_RECOVERY_IMPROVED_COMPONENT_INSTALLER_H_
 
+#include <cstdint>
 #include <memory>
 #include <string>
-#include <tuple>
 #include <vector>
 
 #include "base/feature_list.h"
@@ -52,22 +52,19 @@
 
   PrefService* prefs_;
 
-  DISALLOW_COPY_AND_ASSIGN(RecoveryImprovedInstallerPolicy);
+  RecoveryImprovedInstallerPolicy(const RecoveryImprovedInstallerPolicy&) =
+      delete;
+  RecoveryImprovedInstallerPolicy& operator=(
+      const RecoveryImprovedInstallerPolicy&) = delete;
 };
 
 void RegisterRecoveryImprovedComponent(ComponentUpdateService* cus,
                                        PrefService* prefs);
 
 // Registers user preferences related to the recovery component.
-void RegisterPrefsForRecoveryImprovedComponent(PrefRegistrySimple* registry);
-
-// Returns a tuple containing the result of running the recovery component
-// elevated: (bool succeeded, int error_code, int extra_code1).
-std::tuple<bool, int, int> RunRecoveryCRXElevated(
-    const base::FilePath& crx_path,
-    const std::string& browser_appid,
-    const std::string& browser_version,
-    const std::string& session_id);
+// TODO(sorin): consider removing the function. crbug.com/1027159
+inline void RegisterPrefsForRecoveryImprovedComponent(
+    PrefRegistrySimple* registry) {}
 
 }  // namespace component_updater
 
diff --git a/chrome/browser/download/OWNERS b/chrome/browser/download/OWNERS
index 530323b3..31f6a19 100644
--- a/chrome/browser/download/OWNERS
+++ b/chrome/browser/download/OWNERS
@@ -2,5 +2,6 @@
 
 per-file download_dir_policy_handler*=atwilson@chromium.org
 per-file download_request_limiter*=dominickn@chromium.org
+per-file mixed_content_download_blocking*=jdeblasio@chromium.org
 
 # COMPONENT: UI>Browser>Downloads
diff --git a/chrome/browser/download/android/java/src/org/chromium/chrome/browser/download/DownloadFileProvider.java b/chrome/browser/download/android/java/src/org/chromium/chrome/browser/download/DownloadFileProvider.java
index f191713a..eb8bba5 100644
--- a/chrome/browser/download/android/java/src/org/chromium/chrome/browser/download/DownloadFileProvider.java
+++ b/chrome/browser/download/android/java/src/org/chromium/chrome/browser/download/DownloadFileProvider.java
@@ -197,7 +197,7 @@
     }
 
     private static String getMimeTypeFromUri(Uri fileUri) {
-        String extension = MimeTypeMap.getSingleton().getFileExtensionFromUrl(fileUri.toString());
+        String extension = MimeTypeMap.getFileExtensionFromUrl(fileUri.toString());
         return MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension);
     }
 
diff --git a/chrome/browser/extensions/extension_error_controller.cc b/chrome/browser/extensions/extension_error_controller.cc
index 1b2cdee6..e080397 100644
--- a/chrome/browser/extensions/extension_error_controller.cc
+++ b/chrome/browser/extensions/extension_error_controller.cc
@@ -23,7 +23,7 @@
 
 ExtensionErrorController::UICreateMethod g_create_ui =
     CreateDefaultExtensionErrorUI;
-}
+}  // namespace
 
 ExtensionErrorController::ExtensionErrorController(
     content::BrowserContext* context,
diff --git a/chrome/browser/extensions/extension_error_ui_default.cc b/chrome/browser/extensions/extension_error_ui_default.cc
index 124e9972..878503c 100644
--- a/chrome/browser/extensions/extension_error_ui_default.cc
+++ b/chrome/browser/extensions/extension_error_ui_default.cc
@@ -21,16 +21,16 @@
 
 std::vector<base::string16> GenerateMessage(const ExtensionSet& external,
                                             const ExtensionSet& forbidden) {
-  std::vector<base::string16> message;
-  std::transform(external.begin(), external.end(), message.begin(),
-                 [](const auto& extension) {
-                   int id = extension->is_app()
-                                ? IDS_APP_ALERT_ITEM_EXTERNAL
-                                : IDS_EXTENSION_ALERT_ITEM_EXTERNAL;
-                   base::string16 name = base::UTF8ToUTF16(extension->name());
-                   return l10n_util::GetStringFUTF16(id, name);
-                 });
-  std::transform(forbidden.begin(), forbidden.end(), message.begin(),
+  std::vector<base::string16> message(external.size() + forbidden.size());
+  auto it = std::transform(
+      external.begin(), external.end(), message.begin(),
+      [](const auto& extension) {
+        int id = extension->is_app() ? IDS_APP_ALERT_ITEM_EXTERNAL
+                                     : IDS_EXTENSION_ALERT_ITEM_EXTERNAL;
+        base::string16 name = base::UTF8ToUTF16(extension->name());
+        return l10n_util::GetStringFUTF16(id, name);
+      });
+  std::transform(forbidden.begin(), forbidden.end(), it,
                  [](const auto& extension) {
                    int id = extension->is_app()
                                 ? IDS_APP_ALERT_ITEM_BLACKLISTED
@@ -131,4 +131,8 @@
   }
 }
 
+GlobalErrorWithStandardBubble* ExtensionErrorUIDefault::GetErrorForTesting() {
+  return global_error_.get();
+}
+
 }  // namespace extensions
diff --git a/chrome/browser/extensions/extension_error_ui_default.h b/chrome/browser/extensions/extension_error_ui_default.h
index d58e9824..b790948 100644
--- a/chrome/browser/extensions/extension_error_ui_default.h
+++ b/chrome/browser/extensions/extension_error_ui_default.h
@@ -27,6 +27,8 @@
   void ShowExtensions() override;
   void Close() override;
 
+  GlobalErrorWithStandardBubble* GetErrorForTesting();
+
  private:
   // The profile associated with this error.
   Profile* profile_ = nullptr;
diff --git a/chrome/browser/extensions/extension_error_ui_default_unittest.cc b/chrome/browser/extensions/extension_error_ui_default_unittest.cc
new file mode 100644
index 0000000..2494f90
--- /dev/null
+++ b/chrome/browser/extensions/extension_error_ui_default_unittest.cc
@@ -0,0 +1,68 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/extensions/extension_error_ui_default.h"
+#include "base/strings/utf_string_conversions.h"
+#include "chrome/browser/extensions/extension_error_ui.h"
+#include "chrome/test/base/testing_profile.h"
+#include "content/public/test/browser_task_environment.h"
+#include "extensions/common/extension_builder.h"
+#include "extensions/common/extension_set.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace {
+
+class TestErrorUIDelegate : public extensions::ExtensionErrorUI::Delegate {
+ public:
+  // extensions::ExtensionErrorUI::Delegate:
+  content::BrowserContext* GetContext() override { return &profile_; }
+  const extensions::ExtensionSet& GetExternalExtensions() override {
+    return external_;
+  }
+  const extensions::ExtensionSet& GetBlacklistedExtensions() override {
+    return forbidden_;
+  }
+  void OnAlertDetails() override {}
+  void OnAlertAccept() override {}
+  void OnAlertClosed() override {}
+
+  void InsertExternal(scoped_refptr<const extensions::Extension> ext) {
+    external_.Insert(ext);
+  }
+
+  void InsertForbidden(scoped_refptr<const extensions::Extension> ext) {
+    forbidden_.Insert(ext);
+  }
+
+ private:
+  content::BrowserTaskEnvironment environment_;
+  TestingProfile profile_;
+  extensions::ExtensionSet external_;
+  extensions::ExtensionSet forbidden_;
+};
+
+bool ContainsString(const base::string16& haystack, const std::string& needle) {
+  base::string16 needle16 = base::UTF8ToUTF16(needle);
+  return haystack.find(needle16) != haystack.npos;
+}
+
+}  // namespace
+
+TEST(ExtensionErrorUIDefaultTest, BubbleMessageMentionsExtension) {
+  TestErrorUIDelegate delegate;
+
+  delegate.InsertExternal(extensions::ExtensionBuilder("Foo").Build());
+  delegate.InsertForbidden(extensions::ExtensionBuilder("Bar").Build());
+  delegate.InsertForbidden(extensions::ExtensionBuilder("Baz").Build());
+
+  extensions::ExtensionErrorUIDefault ui(&delegate);
+  GlobalErrorWithStandardBubble* bubble = ui.GetErrorForTesting();
+
+  std::vector<base::string16> messages = bubble->GetBubbleViewMessages();
+
+  ASSERT_EQ(3U, messages.size());
+  EXPECT_TRUE(ContainsString(messages[0], "\"Foo\""));
+  EXPECT_TRUE(ContainsString(messages[1], "\"Bar\""));
+  EXPECT_TRUE(ContainsString(messages[2], "\"Baz\""));
+}
diff --git a/chrome/browser/image_editor/OWNERS b/chrome/browser/image_editor/OWNERS
new file mode 100644
index 0000000..e58f618d
--- /dev/null
+++ b/chrome/browser/image_editor/OWNERS
@@ -0,0 +1,3 @@
+file://components/send_tab_to_self/OWNERS
+
+# COMPONENT: UI>Browser>Sharing
diff --git a/chrome/browser/image_editor/internal/BUILD.gn b/chrome/browser/image_editor/internal/BUILD.gn
new file mode 100644
index 0000000..bf74354f
--- /dev/null
+++ b/chrome/browser/image_editor/internal/BUILD.gn
@@ -0,0 +1,15 @@
+# Copyright 2019 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import("//build/config/android/rules.gni")
+
+# Upstream ImageEditor implementation which does nothing. Actual implementation
+# lives downstream.
+android_library("java") {
+  java_files = [ "android/java/src/org/chromium/chrome/browser/image_editor/ImageEditorCoordinatorImpl.java" ]
+
+  deps = [
+    "//chrome/browser/image_editor/public:java",
+  ]
+}
diff --git a/chrome/android/modules/image_editor/internal/java/src/org/chromium/chrome/modules/image_editor/ImageEditorCoordinatorImpl.java b/chrome/browser/image_editor/internal/android/java/src/org/chromium/chrome/browser/image_editor/ImageEditorCoordinatorImpl.java
similarity index 80%
rename from chrome/android/modules/image_editor/internal/java/src/org/chromium/chrome/modules/image_editor/ImageEditorCoordinatorImpl.java
rename to chrome/browser/image_editor/internal/android/java/src/org/chromium/chrome/browser/image_editor/ImageEditorCoordinatorImpl.java
index 737d534..d1e8e09 100644
--- a/chrome/android/modules/image_editor/internal/java/src/org/chromium/chrome/modules/image_editor/ImageEditorCoordinatorImpl.java
+++ b/chrome/browser/image_editor/internal/android/java/src/org/chromium/chrome/browser/image_editor/ImageEditorCoordinatorImpl.java
@@ -2,13 +2,13 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-package org.chromium.chrome.modules.image_editor;
+package org.chromium.chrome.browser.image_editor;
 
 import android.app.Activity;
 
 /**
- * Upstream implementation for ImageEditorCoordinator. Does nothing. Actual implementation
- * lives downstream.
+ * Upstream implementation for ImageEditorCoordinator. Does nothing. Actual implementation lives
+ * downstream.
  */
 public class ImageEditorCoordinatorImpl implements ImageEditorCoordinator {
     public ImageEditorCoordinatorImpl(Activity activity) {}
diff --git a/chrome/browser/image_editor/public/BUILD.gn b/chrome/browser/image_editor/public/BUILD.gn
new file mode 100644
index 0000000..d38e12e
--- /dev/null
+++ b/chrome/browser/image_editor/public/BUILD.gn
@@ -0,0 +1,9 @@
+# Copyright 2019 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import("//build/config/android/rules.gni")
+
+android_library("java") {
+  java_files = [ "android/java/src/org/chromium/chrome/browser/image_editor/ImageEditorCoordinator.java" ]
+}
diff --git a/chrome/android/modules/image_editor/public/java/src/org/chromium/chrome/modules/image_editor/ImageEditorCoordinator.java b/chrome/browser/image_editor/public/android/java/src/org/chromium/chrome/browser/image_editor/ImageEditorCoordinator.java
similarity index 84%
rename from chrome/android/modules/image_editor/public/java/src/org/chromium/chrome/modules/image_editor/ImageEditorCoordinator.java
rename to chrome/browser/image_editor/public/android/java/src/org/chromium/chrome/browser/image_editor/ImageEditorCoordinator.java
index 54b4092..7609a0e 100644
--- a/chrome/android/modules/image_editor/public/java/src/org/chromium/chrome/modules/image_editor/ImageEditorCoordinator.java
+++ b/chrome/browser/image_editor/public/android/java/src/org/chromium/chrome/browser/image_editor/ImageEditorCoordinator.java
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-package org.chromium.chrome.modules.image_editor;
+package org.chromium.chrome.browser.image_editor;
 
 /**
  * Interface to interact with the image editor activity.
diff --git a/chrome/browser/metrics/first_web_contents_profiler.cc b/chrome/browser/metrics/first_web_contents_profiler.cc
index dab97a09..6feea3d2 100644
--- a/chrome/browser/metrics/first_web_contents_profiler.cc
+++ b/chrome/browser/metrics/first_web_contents_profiler.cc
@@ -9,7 +9,7 @@
 #include "base/location.h"
 #include "base/logging.h"
 #include "base/macros.h"
-#include "base/metrics/histogram_macros.h"
+#include "base/metrics/histogram_functions.h"
 #include "base/time/time.h"
 #include "build/build_config.h"
 #include "chrome/browser/ui/browser.h"
@@ -38,7 +38,11 @@
   kAbandonContentHidden = 2,
   // Abandon if the WebContents is destroyed.
   kAbandonContentDestroyed = 3,
-  // Abandon if the WebContents navigates away from its initial page.
+  // Abandon if the WebContents navigates away from its initial page, as it:
+  //   (1) is no longer a fair timing; and
+  //   (2) can cause http://crbug.com/525209 where the first paint didn't fire
+  //       for the initial content but fires after a lot of idle time when the
+  //       user finally navigates to another page that does trigger it.
   kAbandonNewNavigation = 4,
   // Abandon if the WebContents fails to load (e.g. network error, etc.).
   kAbandonNavigationError = 5,
@@ -47,9 +51,13 @@
   kMaxValue = kAbandonNoInitiallyVisibleContent
 };
 
+// Per documentation in navigation_request.cc, a navigation id is guaranteed
+// nonzero.
+constexpr int64_t kInvalidNavigationId = 0;
+
 void RecordFinishReason(FinishReason finish_reason) {
-  UMA_HISTOGRAM_ENUMERATION("Startup.FirstWebContents.FinishReason",
-                            finish_reason);
+  base::UmaHistogramEnumeration("Startup.FirstWebContents.FinishReason",
+                                finish_reason);
 }
 
 class FirstWebContentsProfiler : public content::WebContentsObserver {
@@ -58,27 +66,14 @@
                            startup_metric_utils::WebContentsWorkload workload);
 
  private:
-  // Steps of main frame navigation in a WebContents.
-  enum class NavigationStep {
-    // DidStartNavigation() is invalid
-    // DidFinishNavigation() transitions to kNavigationFinished
-    // DidFirstVisuallyNonEmptyPaint() is invalid
-    kNavigationStarted,
-
-    // DidStartNavigation() stops profiling with kAbandonNewNavigation
-    // DidFinishNavigation() is invalid
-    // DidFirstVisuallyNonEmptyPaint() stops profiling with kDone
-    kNavigationFinished,
-  };
-
   ~FirstWebContentsProfiler() override = default;
 
   // content::WebContentsObserver:
-  void DidFirstVisuallyNonEmptyPaint() override;
   void DidStartNavigation(
       content::NavigationHandle* navigation_handle) override;
   void DidFinishNavigation(
       content::NavigationHandle* navigation_handle) override;
+  void DidFirstVisuallyNonEmptyPaint() override;
   void OnVisibilityChanged(content::Visibility visibility) override;
   void WebContentsDestroyed() override;
 
@@ -86,7 +81,12 @@
   void FinishedCollectingMetrics(FinishReason finish_reason);
 
   const startup_metric_utils::WebContentsWorkload workload_;
-  NavigationStep navigation_step_ = NavigationStep::kNavigationStarted;
+
+  // The first NavigationHandle id observed by this.
+  int64_t first_navigation_id_ = kInvalidNavigationId;
+
+  // Whether a main frame navigation finished since this was created.
+  bool did_finish_first_navigation_ = false;
 
   DISALLOW_COPY_AND_ASSIGN(FirstWebContentsProfiler);
 };
@@ -94,14 +94,70 @@
 FirstWebContentsProfiler::FirstWebContentsProfiler(
     content::WebContents* web_contents,
     startup_metric_utils::WebContentsWorkload workload)
-    : content::WebContentsObserver(web_contents), workload_(workload) {
-  // FirstWebContentsProfiler is always created with a WebContents that started
-  // but did not finish navigating.
-  DCHECK(web_contents->GetController().GetPendingEntry());
+    : content::WebContentsObserver(web_contents), workload_(workload) {}
+
+void FirstWebContentsProfiler::DidStartNavigation(
+    content::NavigationHandle* navigation_handle) {
+  // Ignore subframe navigations and same-document navigations.
+  if (!navigation_handle->IsInMainFrame() ||
+      navigation_handle->IsSameDocument()) {
+    return;
+  }
+
+  if (first_navigation_id_ != kInvalidNavigationId) {
+    // Abandon if this is not the first observed top-level navigation.
+    DCHECK_NE(first_navigation_id_, navigation_handle->GetNavigationId());
+    FinishedCollectingMetrics(FinishReason::kAbandonNewNavigation);
+    return;
+  }
+
+  DCHECK(!did_finish_first_navigation_);
+
+  // Keep track of the first top-level navigation id observed by this.
+  first_navigation_id_ = navigation_handle->GetNavigationId();
+}
+
+void FirstWebContentsProfiler::DidFinishNavigation(
+    content::NavigationHandle* navigation_handle) {
+  if (startup_metric_utils::WasMainWindowStartupInterrupted()) {
+    FinishedCollectingMetrics(FinishReason::kAbandonBlockingUI);
+    return;
+  }
+
+  // Ignore subframe navigations and same-document navigations.
+  if (!navigation_handle->IsInMainFrame() ||
+      navigation_handle->IsSameDocument()) {
+    return;
+  }
+
+  if (!navigation_handle->HasCommitted() ||
+      navigation_handle->IsErrorPage()) {
+    FinishedCollectingMetrics(FinishReason::kAbandonNavigationError);
+    return;
+  }
+
+  if (first_navigation_id_ == kInvalidNavigationId) {
+    // Keep track of the first top-level navigation id observed by this.
+    //
+    // Note: FirstWebContentsProfiler may be created before or after
+    // DidStartNavigation() is dispatched for the first navigation, which is why
+    // |first_navigation_id_| may be set in DidStartNavigation() or
+    // DidFinishNavigation().
+    first_navigation_id_ = navigation_handle->GetNavigationId();
+  }
+
+  DCHECK_EQ(first_navigation_id_, navigation_handle->GetNavigationId());
+  DCHECK(!did_finish_first_navigation_);
+  did_finish_first_navigation_ = true;
+
+  startup_metric_utils::RecordFirstWebContentsMainNavigationStart(
+      navigation_handle->NavigationStart(), workload_);
+  startup_metric_utils::RecordFirstWebContentsMainNavigationFinished(
+      base::TimeTicks::Now());
 }
 
 void FirstWebContentsProfiler::DidFirstVisuallyNonEmptyPaint() {
-  DCHECK_EQ(navigation_step_, NavigationStep::kNavigationFinished);
+  DCHECK(did_finish_first_navigation_);
 
   if (startup_metric_utils::WasMainWindowStartupInterrupted()) {
     FinishedCollectingMetrics(FinishReason::kAbandonBlockingUI);
@@ -117,54 +173,6 @@
   FinishedCollectingMetrics(FinishReason::kDone);
 }
 
-void FirstWebContentsProfiler::DidStartNavigation(
-    content::NavigationHandle* navigation_handle) {
-  // Ignore subframe navigations and same-document navigations.
-  if (!navigation_handle->IsInMainFrame() ||
-      navigation_handle->IsSameDocument()) {
-    return;
-  }
-
-  // DidFinishNavigation() should have been called to finish the preceding
-  // navigation.
-  DCHECK_EQ(navigation_step_, NavigationStep::kNavigationFinished);
-
-  // Abandon profiling on a top-level navigation to a different page as it:
-  //   (1) is no longer a fair timing; and
-  //   (2) can cause http://crbug.com/525209 where the first paint didn't fire
-  //       for the initial content but fires after a lot of idle time when the
-  //       user finally navigates to another page that does trigger it.
-  FinishedCollectingMetrics(FinishReason::kAbandonNewNavigation);
-}
-
-void FirstWebContentsProfiler::DidFinishNavigation(
-    content::NavigationHandle* navigation_handle) {
-  // Ignore subframe navigations and same-document navigations.
-  if (!navigation_handle->IsInMainFrame() ||
-      navigation_handle->IsSameDocument()) {
-    return;
-  }
-
-  DCHECK_EQ(navigation_step_, NavigationStep::kNavigationStarted);
-  navigation_step_ = NavigationStep::kNavigationFinished;
-
-  if (!navigation_handle->HasCommitted() ||
-      navigation_handle->IsErrorPage()) {
-    FinishedCollectingMetrics(FinishReason::kAbandonNavigationError);
-    return;
-  }
-
-  if (startup_metric_utils::WasMainWindowStartupInterrupted()) {
-    FinishedCollectingMetrics(FinishReason::kAbandonBlockingUI);
-    return;
-  }
-
-  startup_metric_utils::RecordFirstWebContentsMainNavigationStart(
-      navigation_handle->NavigationStart(), workload_);
-  startup_metric_utils::RecordFirstWebContentsMainNavigationFinished(
-      base::TimeTicks::Now());
-}
-
 void FirstWebContentsProfiler::OnVisibilityChanged(
     content::Visibility visibility) {
   if (visibility != content::Visibility::VISIBLE) {
diff --git a/chrome/browser/payments/has_enrolled_instrument_browsertest.cc b/chrome/browser/payments/has_enrolled_instrument_browsertest.cc
index 37b625e..e113aaf0 100644
--- a/chrome/browser/payments/has_enrolled_instrument_browsertest.cc
+++ b/chrome/browser/payments/has_enrolled_instrument_browsertest.cc
@@ -48,10 +48,25 @@
   return card;
 }
 
-class HasEnrolledInstrumentTest : public PlatformBrowserTest {
+enum HasEnrolledInstrumentMode {
+  STRICT_HAS_ENROLLED_INSTRUMENT,
+  LEGACY_HAS_ENROLLED_INSTRUMENT,
+};
+
+// A parameterized test to test both values of
+// features::kStrictHasEnrolledAutofillInstrument.
+class HasEnrolledInstrumentTest
+    : public PlatformBrowserTest,
+      public testing::WithParamInterface<HasEnrolledInstrumentMode> {
  public:
   HasEnrolledInstrumentTest()
-      : https_server_(net::EmbeddedTestServer::TYPE_HTTPS) {}
+      : https_server_(net::EmbeddedTestServer::TYPE_HTTPS) {
+    if (GetParam() == STRICT_HAS_ENROLLED_INSTRUMENT) {
+      feature_list_.InitWithFeatures(
+          /*enabled_features=*/{features::kStrictHasEnrolledAutofillInstrument},
+          /*disabled_features=*/{features::kPaymentRequestSkipToGPay});
+    }
+  }
 
   ~HasEnrolledInstrumentTest() override {}
 
@@ -74,144 +89,82 @@
     return not_supported_message_;
   }
 
+  // Helper function to test that all variations of hasEnrolledInstrument()
+  // returns |expected|.
+  void ExpectHasEnrolledInstrumentIs(bool expected) {
+    EXPECT_EQ(expected, content::EvalJs(GetActiveWebContents(),
+                                        "hasEnrolledInstrument()"));
+    EXPECT_EQ(expected,
+              content::EvalJs(GetActiveWebContents(),
+                              "hasEnrolledInstrument({requestShipping:true})"));
+    EXPECT_EQ(expected, content::EvalJs(
+                            GetActiveWebContents(),
+                            "hasEnrolledInstrument({requestPayerEmail:true})"));
+  }
+
+  // Helper function to test that all variants of show() rejects with
+  // not_supported_message().
+  void ExpectShowRejects() {
+    // Only check show() if feature is on.
+    if (GetParam() == STRICT_HAS_ENROLLED_INSTRUMENT) {
+      base::HistogramTester histogram_tester;
+      base::HistogramBase::Count expected_count =
+          histogram_tester.GetBucketCount(
+              "PaymentRequest.CheckoutFunnel.NoShow",
+              JourneyLogger::NOT_SHOWN_REASON_NO_SUPPORTED_PAYMENT_METHOD);
+
+      EXPECT_EQ(not_supported_message(),
+                content::EvalJs(GetActiveWebContents(), "show()"));
+      // TODO(crbug.com/1027322): Fix NoShow logging on Android.
+#if !defined(OS_ANDROID)
+      expected_count++;
+#endif
+      histogram_tester.ExpectBucketCount(
+          "PaymentRequest.CheckoutFunnel.NoShow",
+          JourneyLogger::NOT_SHOWN_REASON_NO_SUPPORTED_PAYMENT_METHOD,
+          expected_count);
+      EXPECT_EQ(not_supported_message(),
+                content::EvalJs(GetActiveWebContents(),
+                                "show({requestShipping:true})"));
+      EXPECT_EQ(not_supported_message(),
+                content::EvalJs(GetActiveWebContents(),
+                                "show({requestPayerEmail:true})"));
+    }
+  }
+
  private:
   PaymentRequestTestController test_controller_;
   net::EmbeddedTestServer https_server_;
   std::string not_supported_message_ = kNotSupportedMessage;
+  base::test::ScopedFeatureList feature_list_;
 
   DISALLOW_COPY_AND_ASSIGN(HasEnrolledInstrumentTest);
 };
 
-class HasEnrolledInstrumentTestWithStrictHasEnrolledAutofillInstrument
-    : public HasEnrolledInstrumentTest {
- public:
-  HasEnrolledInstrumentTestWithStrictHasEnrolledAutofillInstrument() {
-    feature_list_.InitWithFeatures(
-        /*enabled_features=*/{features::kStrictHasEnrolledAutofillInstrument},
-        /*disabled_features=*/{features::kPaymentRequestSkipToGPay});
-  }
-
- private:
-  base::test::ScopedFeatureList feature_list_;
-};
-
-IN_PROC_BROWSER_TEST_F(HasEnrolledInstrumentTest, NoCard) {
-  EXPECT_EQ(false,
-            content::EvalJs(GetActiveWebContents(), "hasEnrolledInstrument()"));
-  EXPECT_EQ(false,
-            content::EvalJs(GetActiveWebContents(),
-                            "hasEnrolledInstrument({requestShipping:true})"));
-  EXPECT_EQ(false,
-            content::EvalJs(GetActiveWebContents(),
-                            "hasEnrolledInstrument({requestPayerEmail:true})"));
+IN_PROC_BROWSER_TEST_P(HasEnrolledInstrumentTest, NoCard) {
+  ExpectHasEnrolledInstrumentIs(false);
+  ExpectShowRejects();
 }
 
-IN_PROC_BROWSER_TEST_F(
-    HasEnrolledInstrumentTestWithStrictHasEnrolledAutofillInstrument,
-    NoCard) {
-  EXPECT_EQ(false,
-            content::EvalJs(GetActiveWebContents(), "hasEnrolledInstrument()"));
-  EXPECT_EQ(false,
-            content::EvalJs(GetActiveWebContents(),
-                            "hasEnrolledInstrument({requestShipping:true})"));
-  EXPECT_EQ(false,
-            content::EvalJs(GetActiveWebContents(),
-                            "hasEnrolledInstrument({requestPayerEmail:true})"));
-
-  EXPECT_EQ(not_supported_message(),
-            content::EvalJs(GetActiveWebContents(), "show()"));
-  EXPECT_EQ(
-      not_supported_message(),
-      content::EvalJs(GetActiveWebContents(), "show({requestShipping:true})"));
-  EXPECT_EQ(not_supported_message(),
-            content::EvalJs(GetActiveWebContents(),
-                            "show({requestPayerEmail:true})"));
-}
-
-IN_PROC_BROWSER_TEST_F(HasEnrolledInstrumentTest, NoBillingAddress) {
+IN_PROC_BROWSER_TEST_P(HasEnrolledInstrumentTest, NoBillingAddress) {
   test::AddCreditCard(GetActiveWebContents()->GetBrowserContext(),
                       autofill::test::GetCreditCard());
-
-  EXPECT_EQ(true,
-            content::EvalJs(GetActiveWebContents(), "hasEnrolledInstrument()"));
-  EXPECT_EQ(true,
-            content::EvalJs(GetActiveWebContents(),
-                            "hasEnrolledInstrument({requestShipping:true})"));
-  EXPECT_EQ(true,
-            content::EvalJs(GetActiveWebContents(),
-                            "hasEnrolledInstrument({requestPayerEmail:true})"));
+  ExpectHasEnrolledInstrumentIs(GetParam() != STRICT_HAS_ENROLLED_INSTRUMENT);
+  ExpectShowRejects();
 }
 
-IN_PROC_BROWSER_TEST_F(
-    HasEnrolledInstrumentTestWithStrictHasEnrolledAutofillInstrument,
-    NoBillingAddress) {
-  test::AddCreditCard(GetActiveWebContents()->GetBrowserContext(),
-                      autofill::test::GetCreditCard());
-
-  EXPECT_EQ(false,
-            content::EvalJs(GetActiveWebContents(), "hasEnrolledInstrument()"));
-  EXPECT_EQ(false,
-            content::EvalJs(GetActiveWebContents(),
-                            "hasEnrolledInstrument({requestShipping:true})"));
-  EXPECT_EQ(false,
-            content::EvalJs(GetActiveWebContents(),
-                            "hasEnrolledInstrument({requestPayerEmail:true})"));
-
-  EXPECT_EQ(not_supported_message(),
-            content::EvalJs(GetActiveWebContents(), "show()"));
-  EXPECT_EQ(
-      not_supported_message(),
-      content::EvalJs(GetActiveWebContents(), "show({requestShipping:true})"));
-  EXPECT_EQ(not_supported_message(),
-            content::EvalJs(GetActiveWebContents(),
-                            "show({requestPayerEmail:true})"));
-}
-
-IN_PROC_BROWSER_TEST_F(HasEnrolledInstrumentTest,
+IN_PROC_BROWSER_TEST_P(HasEnrolledInstrumentTest,
                        HaveShippingNoBillingAddress) {
   test::AddAutofillProfile(GetActiveWebContents()->GetBrowserContext(),
                            autofill::test::GetFullProfile());
   test::AddCreditCard(GetActiveWebContents()->GetBrowserContext(),
                       autofill::test::GetCreditCard());
 
-  EXPECT_EQ(true,
-            content::EvalJs(GetActiveWebContents(), "hasEnrolledInstrument()"));
-  EXPECT_EQ(true,
-            content::EvalJs(GetActiveWebContents(),
-                            "hasEnrolledInstrument({requestShipping:true})"));
-  EXPECT_EQ(true,
-            content::EvalJs(GetActiveWebContents(),
-                            "hasEnrolledInstrument({requestPayerEmail:true})"));
+  ExpectHasEnrolledInstrumentIs(GetParam() != STRICT_HAS_ENROLLED_INSTRUMENT);
+  ExpectShowRejects();
 }
 
-IN_PROC_BROWSER_TEST_F(
-    HasEnrolledInstrumentTestWithStrictHasEnrolledAutofillInstrument,
-    HaveShippingNoBillingAddress) {
-  test::AddAutofillProfile(GetActiveWebContents()->GetBrowserContext(),
-                           autofill::test::GetFullProfile());
-  test::AddCreditCard(GetActiveWebContents()->GetBrowserContext(),
-                      autofill::test::GetCreditCard());
-
-  EXPECT_EQ(false,
-            content::EvalJs(GetActiveWebContents(), "hasEnrolledInstrument()"));
-  EXPECT_EQ(false,
-            content::EvalJs(GetActiveWebContents(),
-                            "hasEnrolledInstrument({requestShipping:true})"));
-  EXPECT_EQ(false,
-            content::EvalJs(GetActiveWebContents(),
-                            "hasEnrolledInstrument({requestPayerEmail:true})"));
-
-  EXPECT_EQ(not_supported_message(),
-            content::EvalJs(GetActiveWebContents(), "show()"));
-  EXPECT_EQ(
-      not_supported_message(),
-      content::EvalJs(GetActiveWebContents(), "show({requestShipping:true})"));
-  EXPECT_EQ(not_supported_message(),
-            content::EvalJs(GetActiveWebContents(),
-                            "show({requestPayerEmail:true})"));
-}
-
-IN_PROC_BROWSER_TEST_F(HasEnrolledInstrumentTest,
+IN_PROC_BROWSER_TEST_P(HasEnrolledInstrumentTest,
                        HaveShippingAndBillingAddress) {
   autofill::AutofillProfile address = autofill::test::GetFullProfile();
   test::AddAutofillProfile(GetActiveWebContents()->GetBrowserContext(),
@@ -219,36 +172,10 @@
   test::AddCreditCard(GetActiveWebContents()->GetBrowserContext(),
                       GetCardWithBillingAddress(address));
 
-  EXPECT_EQ(true,
-            content::EvalJs(GetActiveWebContents(), "hasEnrolledInstrument()"));
-  EXPECT_EQ(true,
-            content::EvalJs(GetActiveWebContents(),
-                            "hasEnrolledInstrument({requestShipping:true})"));
-  EXPECT_EQ(true,
-            content::EvalJs(GetActiveWebContents(),
-                            "hasEnrolledInstrument({requestPayerEmail:true})"));
+  ExpectHasEnrolledInstrumentIs(true);
 }
 
-IN_PROC_BROWSER_TEST_F(
-    HasEnrolledInstrumentTestWithStrictHasEnrolledAutofillInstrument,
-    HaveShippingAndBillingAddress) {
-  autofill::AutofillProfile address = autofill::test::GetFullProfile();
-  test::AddAutofillProfile(GetActiveWebContents()->GetBrowserContext(),
-                           address);
-  test::AddCreditCard(GetActiveWebContents()->GetBrowserContext(),
-                      GetCardWithBillingAddress(address));
-
-  EXPECT_EQ(true,
-            content::EvalJs(GetActiveWebContents(), "hasEnrolledInstrument()"));
-  EXPECT_EQ(true,
-            content::EvalJs(GetActiveWebContents(),
-                            "hasEnrolledInstrument({requestShipping:true})"));
-  EXPECT_EQ(true,
-            content::EvalJs(GetActiveWebContents(),
-                            "hasEnrolledInstrument({requestPayerEmail:true})"));
-}
-
-IN_PROC_BROWSER_TEST_F(HasEnrolledInstrumentTest, InvalidCardNumber) {
+IN_PROC_BROWSER_TEST_P(HasEnrolledInstrumentTest, InvalidCardNumber) {
   autofill::AutofillProfile address = autofill::test::GetFullProfile();
   test::AddAutofillProfile(GetActiveWebContents()->GetBrowserContext(),
                            address);
@@ -257,58 +184,11 @@
                   base::ASCIIToUTF16("1111111111111111"));
   test::AddCreditCard(GetActiveWebContents()->GetBrowserContext(), card);
 
-  EXPECT_EQ(false,
-            content::EvalJs(GetActiveWebContents(), "hasEnrolledInstrument()"));
-  EXPECT_EQ(false,
-            content::EvalJs(GetActiveWebContents(),
-                            "hasEnrolledInstrument({requestShipping:true})"));
-  EXPECT_EQ(false,
-            content::EvalJs(GetActiveWebContents(),
-                            "hasEnrolledInstrument({requestPayerEmail:true})"));
+  ExpectHasEnrolledInstrumentIs(false);
+  ExpectShowRejects();
 }
 
-IN_PROC_BROWSER_TEST_F(
-    HasEnrolledInstrumentTestWithStrictHasEnrolledAutofillInstrument,
-    InvalidCardNumber) {
-  base::HistogramTester histogram_tester;
-
-  autofill::AutofillProfile address = autofill::test::GetFullProfile();
-  test::AddAutofillProfile(GetActiveWebContents()->GetBrowserContext(),
-                           address);
-  autofill::CreditCard card = GetCardWithBillingAddress(address);
-  card.SetRawInfo(autofill::ServerFieldType::CREDIT_CARD_NUMBER,
-                  base::ASCIIToUTF16("1111111111111111"));
-  test::AddCreditCard(GetActiveWebContents()->GetBrowserContext(), card);
-
-  EXPECT_EQ(false,
-            content::EvalJs(GetActiveWebContents(), "hasEnrolledInstrument()"));
-  EXPECT_EQ(false,
-            content::EvalJs(GetActiveWebContents(),
-                            "hasEnrolledInstrument({requestShipping:true})"));
-  EXPECT_EQ(false,
-            content::EvalJs(GetActiveWebContents(),
-                            "hasEnrolledInstrument({requestPayerEmail:true})"));
-
-  EXPECT_EQ(not_supported_message(),
-            content::EvalJs(GetActiveWebContents(), "show()"));
-
-  // TODO(crbug.com/1027322): Fix NoShow logging on Android and add histogram
-  // checks to all other tests.
-#if !defined(OS_ANDROID)
-  histogram_tester.ExpectBucketCount(
-      "PaymentRequest.CheckoutFunnel.NoShow",
-      JourneyLogger::NOT_SHOWN_REASON_NO_SUPPORTED_PAYMENT_METHOD, 1);
-#endif
-
-  EXPECT_EQ(
-      not_supported_message(),
-      content::EvalJs(GetActiveWebContents(), "show({requestShipping:true})"));
-  EXPECT_EQ(not_supported_message(),
-            content::EvalJs(GetActiveWebContents(),
-                            "show({requestPayerEmail:true})"));
-}
-
-IN_PROC_BROWSER_TEST_F(HasEnrolledInstrumentTest, ExpiredCard) {
+IN_PROC_BROWSER_TEST_P(HasEnrolledInstrumentTest, ExpiredCard) {
   autofill::AutofillProfile address = autofill::test::GetFullProfile();
   test::AddAutofillProfile(GetActiveWebContents()->GetBrowserContext(),
                            address);
@@ -316,48 +196,13 @@
   card.SetExpirationYear(2000);
   test::AddCreditCard(GetActiveWebContents()->GetBrowserContext(), card);
 
-  EXPECT_EQ(true,
-            content::EvalJs(GetActiveWebContents(), "hasEnrolledInstrument()"));
-  EXPECT_EQ(true,
-            content::EvalJs(GetActiveWebContents(),
-                            "hasEnrolledInstrument({requestShipping:true})"));
-  EXPECT_EQ(true,
-            content::EvalJs(GetActiveWebContents(),
-                            "hasEnrolledInstrument({requestPayerEmail:true})"));
-}
-
-IN_PROC_BROWSER_TEST_F(
-    HasEnrolledInstrumentTestWithStrictHasEnrolledAutofillInstrument,
-    ExpiredCard) {
-  autofill::AutofillProfile address = autofill::test::GetFullProfile();
-  test::AddAutofillProfile(GetActiveWebContents()->GetBrowserContext(),
-                           address);
-  autofill::CreditCard card = GetCardWithBillingAddress(address);
-  card.SetExpirationYear(2000);
-  test::AddCreditCard(GetActiveWebContents()->GetBrowserContext(), card);
-
-  EXPECT_EQ(false,
-            content::EvalJs(GetActiveWebContents(), "hasEnrolledInstrument()"));
-  EXPECT_EQ(false,
-            content::EvalJs(GetActiveWebContents(),
-                            "hasEnrolledInstrument({requestShipping:true})"));
-  EXPECT_EQ(false,
-            content::EvalJs(GetActiveWebContents(),
-                            "hasEnrolledInstrument({requestPayerEmail:true})"));
-
-  EXPECT_EQ(not_supported_message(),
-            content::EvalJs(GetActiveWebContents(), "show()"));
-  EXPECT_EQ(
-      not_supported_message(),
-      content::EvalJs(GetActiveWebContents(), "show({requestShipping:true})"));
-  EXPECT_EQ(not_supported_message(),
-            content::EvalJs(GetActiveWebContents(),
-                            "show({requestPayerEmail:true})"));
+  ExpectHasEnrolledInstrumentIs(GetParam() != STRICT_HAS_ENROLLED_INSTRUMENT);
+  ExpectShowRejects();
 }
 
 // TODO(https://crbug.com/994799): Unify autofill data validation and returned
 // data across platforms.
-IN_PROC_BROWSER_TEST_F(HasEnrolledInstrumentTest,
+IN_PROC_BROWSER_TEST_P(HasEnrolledInstrumentTest,
                        HaveNoNameShippingAndBillingAddress) {
   autofill::AutofillProfile address = autofill::test::GetFullProfile();
 
@@ -370,61 +215,42 @@
   test::AddCreditCard(GetActiveWebContents()->GetBrowserContext(),
                       GetCardWithBillingAddress(address));
 
-  EXPECT_EQ(true,
-            content::EvalJs(GetActiveWebContents(), "hasEnrolledInstrument()"));
-  EXPECT_EQ(true,
+  // Recipient name is required for shipping address in strict mode.
+  EXPECT_EQ(GetParam() != STRICT_HAS_ENROLLED_INSTRUMENT,
             content::EvalJs(GetActiveWebContents(),
                             "hasEnrolledInstrument({requestShipping:true})"));
-  EXPECT_EQ(true,
-            content::EvalJs(GetActiveWebContents(),
-                            "hasEnrolledInstrument({requestPayerEmail:true})"));
-}
+  if (GetParam() == STRICT_HAS_ENROLLED_INSTRUMENT) {
+    EXPECT_EQ(not_supported_message(),
+              content::EvalJs(GetActiveWebContents(),
+                              "show({requestShipping:true})"));
+  }
 
-IN_PROC_BROWSER_TEST_F(
-    HasEnrolledInstrumentTestWithStrictHasEnrolledAutofillInstrument,
-    HaveNoNameShippingAndBillingAddress) {
-  autofill::AutofillProfile address = autofill::test::GetFullProfile();
-
-  address.SetRawInfo(autofill::ServerFieldType::NAME_FIRST, base::string16());
-  address.SetRawInfo(autofill::ServerFieldType::NAME_MIDDLE, base::string16());
-  address.SetRawInfo(autofill::ServerFieldType::NAME_LAST, base::string16());
-
-  test::AddAutofillProfile(GetActiveWebContents()->GetBrowserContext(),
-                           address);
-  test::AddCreditCard(GetActiveWebContents()->GetBrowserContext(),
-                      GetCardWithBillingAddress(address));
-
-// TODO(https://crbug.com/994799): Unify autofill data requirements between
-// desktop and Android.
+  // Recipient name should be required for billing address in strict mode, but
+  // current desktop implementation doesn't match this requirement.
+  // TODO(https://crbug.com/994799): Unify autofill data requirements between
+  // desktop and Android.
 #if defined(OS_ANDROID)
-  // Android requires the billing address to have a name.
-  bool is_no_name_billing_address_valid = false;
-  EXPECT_EQ(not_supported_message(),
-            content::EvalJs(GetActiveWebContents(), "show()"));
-  EXPECT_EQ(not_supported_message(),
-            content::EvalJs(GetActiveWebContents(),
-                            "show({requestPayerEmail:true})"));
+  bool is_no_name_billing_address_valid =
+      GetParam() != STRICT_HAS_ENROLLED_INSTRUMENT;
 #else
-  // Desktop does not require the billing address to have a name.
   bool is_no_name_billing_address_valid = true;
-#endif  // OS_ANDROID
+#endif
 
   EXPECT_EQ(is_no_name_billing_address_valid,
             content::EvalJs(GetActiveWebContents(), "hasEnrolledInstrument()"));
   EXPECT_EQ(is_no_name_billing_address_valid,
             content::EvalJs(GetActiveWebContents(),
                             "hasEnrolledInstrument({requestPayerEmail:true})"));
-
-  // Shipping address requires recipient name on all platforms.
-  EXPECT_EQ(false,
-            content::EvalJs(GetActiveWebContents(),
-                            "hasEnrolledInstrument({requestShipping:true})"));
-  EXPECT_EQ(
-      not_supported_message(),
-      content::EvalJs(GetActiveWebContents(), "show({requestShipping:true})"));
+  if (!is_no_name_billing_address_valid) {
+    EXPECT_EQ(not_supported_message(),
+              content::EvalJs(GetActiveWebContents(), "show()"));
+    EXPECT_EQ(not_supported_message(),
+              content::EvalJs(GetActiveWebContents(),
+                              "show({requestPayerEmail:true})"));
+  }
 }
 
-IN_PROC_BROWSER_TEST_F(HasEnrolledInstrumentTest,
+IN_PROC_BROWSER_TEST_P(HasEnrolledInstrumentTest,
                        HaveNoStreetShippingAndBillingAddress) {
   autofill::AutofillProfile address = autofill::test::GetFullProfile();
   address.SetRawInfo(autofill::ServerFieldType::ADDRESS_HOME_STREET_ADDRESS,
@@ -434,48 +260,11 @@
   test::AddCreditCard(GetActiveWebContents()->GetBrowserContext(),
                       GetCardWithBillingAddress(address));
 
-  EXPECT_EQ(true,
-            content::EvalJs(GetActiveWebContents(), "hasEnrolledInstrument()"));
-  EXPECT_EQ(true,
-            content::EvalJs(GetActiveWebContents(),
-                            "hasEnrolledInstrument({requestShipping:true})"));
-  EXPECT_EQ(true,
-            content::EvalJs(GetActiveWebContents(),
-                            "hasEnrolledInstrument({requestPayerEmail:true})"));
+  ExpectHasEnrolledInstrumentIs(GetParam() != STRICT_HAS_ENROLLED_INSTRUMENT);
+  ExpectShowRejects();
 }
 
-IN_PROC_BROWSER_TEST_F(
-    HasEnrolledInstrumentTestWithStrictHasEnrolledAutofillInstrument,
-    HaveNoStreetShippingAndBillingAddress) {
-  autofill::AutofillProfile address = autofill::test::GetFullProfile();
-  address.SetRawInfo(autofill::ServerFieldType::ADDRESS_HOME_STREET_ADDRESS,
-                     base::string16());
-  test::AddAutofillProfile(GetActiveWebContents()->GetBrowserContext(),
-                           address);
-  test::AddCreditCard(GetActiveWebContents()->GetBrowserContext(),
-                      GetCardWithBillingAddress(address));
-
-  EXPECT_EQ(false,
-            content::EvalJs(GetActiveWebContents(), "hasEnrolledInstrument()"));
-
-  EXPECT_EQ(false,
-            content::EvalJs(GetActiveWebContents(),
-                            "hasEnrolledInstrument({requestShipping:true})"));
-  EXPECT_EQ(false,
-            content::EvalJs(GetActiveWebContents(),
-                            "hasEnrolledInstrument({requestPayerEmail:true})"));
-
-  EXPECT_EQ(not_supported_message(),
-            content::EvalJs(GetActiveWebContents(), "show()"));
-  EXPECT_EQ(
-      not_supported_message(),
-      content::EvalJs(GetActiveWebContents(), "show({requestShipping:true})"));
-  EXPECT_EQ(not_supported_message(),
-            content::EvalJs(GetActiveWebContents(),
-                            "show({requestPayerEmail:true})"));
-}
-
-IN_PROC_BROWSER_TEST_F(HasEnrolledInstrumentTest, NoEmailAddress) {
+IN_PROC_BROWSER_TEST_P(HasEnrolledInstrumentTest, NoEmailAddress) {
   autofill::AutofillProfile address = autofill::test::GetFullProfile();
   address.SetRawInfo(autofill::ServerFieldType::EMAIL_ADDRESS,
                      base::string16());
@@ -489,37 +278,19 @@
   EXPECT_EQ(true,
             content::EvalJs(GetActiveWebContents(),
                             "hasEnrolledInstrument({requestShipping:true})"));
-  EXPECT_EQ(true,
+  // StrictHasEnrolledAutofillInstrument considers a profile with missing email
+  // address as invalid.
+  EXPECT_EQ(GetParam() != STRICT_HAS_ENROLLED_INSTRUMENT,
             content::EvalJs(GetActiveWebContents(),
                             "hasEnrolledInstrument({requestPayerEmail:true})"));
+  if (GetParam() == STRICT_HAS_ENROLLED_INSTRUMENT) {
+    EXPECT_EQ(not_supported_message(),
+              content::EvalJs(GetActiveWebContents(),
+                              "show({requestPayerEmail:true})"));
+  }
 }
 
-IN_PROC_BROWSER_TEST_F(
-    HasEnrolledInstrumentTestWithStrictHasEnrolledAutofillInstrument,
-    NoEmailAddress) {
-  autofill::AutofillProfile address = autofill::test::GetFullProfile();
-  address.SetRawInfo(autofill::ServerFieldType::EMAIL_ADDRESS,
-                     base::string16());
-  test::AddAutofillProfile(GetActiveWebContents()->GetBrowserContext(),
-                           address);
-  test::AddCreditCard(GetActiveWebContents()->GetBrowserContext(),
-                      GetCardWithBillingAddress(address));
-
-  EXPECT_EQ(true,
-            content::EvalJs(GetActiveWebContents(), "hasEnrolledInstrument()"));
-  EXPECT_EQ(true,
-            content::EvalJs(GetActiveWebContents(),
-                            "hasEnrolledInstrument({requestShipping:true})"));
-  EXPECT_EQ(false,
-            content::EvalJs(GetActiveWebContents(),
-                            "hasEnrolledInstrument({requestPayerEmail:true})"));
-
-  EXPECT_EQ(not_supported_message(),
-            content::EvalJs(GetActiveWebContents(),
-                            "show({requestPayerEmail:true})"));
-}
-
-IN_PROC_BROWSER_TEST_F(HasEnrolledInstrumentTest, InvalidEmailAddress) {
+IN_PROC_BROWSER_TEST_P(HasEnrolledInstrumentTest, InvalidEmailAddress) {
   autofill::AutofillProfile address = autofill::test::GetFullProfile();
   address.SetRawInfo(autofill::ServerFieldType::EMAIL_ADDRESS,
                      base::ASCIIToUTF16("this-is-not-a-valid-email-address"));
@@ -533,35 +304,25 @@
   EXPECT_EQ(true,
             content::EvalJs(GetActiveWebContents(),
                             "hasEnrolledInstrument({requestShipping:true})"));
-  EXPECT_EQ(true,
+
+  // StrictHasEnrolledAutofillInstrument considers a profile with missing email
+  // address as invalid.
+  EXPECT_EQ(GetParam() != STRICT_HAS_ENROLLED_INSTRUMENT,
             content::EvalJs(GetActiveWebContents(),
                             "hasEnrolledInstrument({requestPayerEmail:true})"));
+  if (GetParam() == STRICT_HAS_ENROLLED_INSTRUMENT) {
+    EXPECT_EQ(not_supported_message(),
+              content::EvalJs(GetActiveWebContents(),
+                              "show({requestPayerEmail:true})"));
+  }
 }
 
-IN_PROC_BROWSER_TEST_F(
-    HasEnrolledInstrumentTestWithStrictHasEnrolledAutofillInstrument,
-    InvalidEmailAddress) {
-  autofill::AutofillProfile address = autofill::test::GetFullProfile();
-  address.SetRawInfo(autofill::ServerFieldType::EMAIL_ADDRESS,
-                     base::ASCIIToUTF16("this-is-not-a-valid-email-address"));
-  test::AddAutofillProfile(GetActiveWebContents()->GetBrowserContext(),
-                           address);
-  test::AddCreditCard(GetActiveWebContents()->GetBrowserContext(),
-                      GetCardWithBillingAddress(address));
-
-  EXPECT_EQ(true,
-            content::EvalJs(GetActiveWebContents(), "hasEnrolledInstrument()"));
-  EXPECT_EQ(true,
-            content::EvalJs(GetActiveWebContents(),
-                            "hasEnrolledInstrument({requestShipping:true})"));
-  EXPECT_EQ(false,
-            content::EvalJs(GetActiveWebContents(),
-                            "hasEnrolledInstrument({requestPayerEmail:true})"));
-
-  EXPECT_EQ(not_supported_message(),
-            content::EvalJs(GetActiveWebContents(),
-                            "show({requestPayerEmail:true})"));
-}
-
+// Run all tests with both values for
+// features::kStrictHasEnrolledAutofillInstrument.
+INSTANTIATE_TEST_SUITE_P(
+    /* no prefix */,
+    HasEnrolledInstrumentTest,
+    ::testing::Values(STRICT_HAS_ENROLLED_INSTRUMENT,
+                      LEGACY_HAS_ENROLLED_INSTRUMENT));
 }  // namespace
 }  // namespace payments
diff --git a/chrome/browser/payments/payment_request_factory.cc b/chrome/browser/payments/payment_request_factory.cc
index bdebbf0..890f7b4 100644
--- a/chrome/browser/payments/payment_request_factory.cc
+++ b/chrome/browser/payments/payment_request_factory.cc
@@ -11,6 +11,8 @@
 #include "base/no_destructor.h"
 #include "chrome/browser/payments/chrome_payment_request_delegate.h"
 #include "components/payments/content/payment_request_web_contents_manager.h"
+#include "mojo/public/cpp/bindings/message.h"
+#include "third_party/blink/public/mojom/feature_policy/feature_policy_feature.mojom-shared.h"
 
 namespace payments {
 
@@ -30,6 +32,12 @@
 void CreatePaymentRequest(
     content::RenderFrameHost* render_frame_host,
     mojo::PendingReceiver<mojom::PaymentRequest> receiver) {
+  if (!render_frame_host->IsFeatureEnabled(
+          blink::mojom::FeaturePolicyFeature::kPayment)) {
+    mojo::ReportBadMessage("Feature policy blocks Payment");
+    return;
+  }
+
   if (GetTestingFactoryCallback()) {
     return GetTestingFactoryCallback().Run(std::move(receiver),
                                            render_frame_host);
diff --git a/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java b/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java
index 9eb6c45..34ff240 100644
--- a/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java
+++ b/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java
@@ -110,6 +110,24 @@
     public static final String CONTEXTUAL_SEARCH_CURRENT_WEEK_NUMBER =
             "contextual_search_current_week_number";
 
+    public static final String CONTEXTUAL_SEARCH_OLDEST_WEEK = "contextual_search_oldest_week";
+    public static final String CONTEXTUAL_SEARCH_NEWEST_WEEK = "contextual_search_newest_week";
+    public static final String CONTEXTUAL_SEARCH_CLICKS_WEEK_0 = "contextual_search_clicks_week_0";
+    public static final String CONTEXTUAL_SEARCH_CLICKS_WEEK_1 = "contextual_search_clicks_week_1";
+    public static final String CONTEXTUAL_SEARCH_CLICKS_WEEK_2 = "contextual_search_clicks_week_2";
+    public static final String CONTEXTUAL_SEARCH_CLICKS_WEEK_3 = "contextual_search_clicks_week_3";
+    public static final String CONTEXTUAL_SEARCH_CLICKS_WEEK_4 = "contextual_search_clicks_week_4";
+    public static final String CONTEXTUAL_SEARCH_IMPRESSIONS_WEEK_0 =
+            "contextual_search_impressions_week_0";
+    public static final String CONTEXTUAL_SEARCH_IMPRESSIONS_WEEK_1 =
+            "contextual_search_impressions_week_1";
+    public static final String CONTEXTUAL_SEARCH_IMPRESSIONS_WEEK_2 =
+            "contextual_search_impressions_week_2";
+    public static final String CONTEXTUAL_SEARCH_IMPRESSIONS_WEEK_3 =
+            "contextual_search_impressions_week_3";
+    public static final String CONTEXTUAL_SEARCH_IMPRESSIONS_WEEK_4 =
+            "contextual_search_impressions_week_4";
+
     /**
      * Whether the promotion for data reduction has been skipped on first invocation.
      * Default value is false.
@@ -375,6 +393,18 @@
                 CONTEXTUAL_SEARCH_TAP_TRIGGERED_PROMO_COUNT,
                 CONTEXTUAL_SEARCH_LAST_ANIMATION_TIME,
                 CONTEXTUAL_SEARCH_CURRENT_WEEK_NUMBER,
+                CONTEXTUAL_SEARCH_OLDEST_WEEK,
+                CONTEXTUAL_SEARCH_NEWEST_WEEK,
+                CONTEXTUAL_SEARCH_CLICKS_WEEK_0,
+                CONTEXTUAL_SEARCH_CLICKS_WEEK_1,
+                CONTEXTUAL_SEARCH_CLICKS_WEEK_2,
+                CONTEXTUAL_SEARCH_CLICKS_WEEK_3,
+                CONTEXTUAL_SEARCH_CLICKS_WEEK_4,
+                CONTEXTUAL_SEARCH_IMPRESSIONS_WEEK_0,
+                CONTEXTUAL_SEARCH_IMPRESSIONS_WEEK_1,
+                CONTEXTUAL_SEARCH_IMPRESSIONS_WEEK_2,
+                CONTEXTUAL_SEARCH_IMPRESSIONS_WEEK_3,
+                CONTEXTUAL_SEARCH_IMPRESSIONS_WEEK_4,
                 PROMOS_SKIPPED_ON_FIRST_START,
                 SIGNIN_PROMO_LAST_SHOWN_MAJOR_VERSION,
                 SIGNIN_PROMO_LAST_SHOWN_ACCOUNT_NAMES,
@@ -491,6 +521,18 @@
                 CONTEXTUAL_SEARCH_TAP_TRIGGERED_PROMO_COUNT,
                 CONTEXTUAL_SEARCH_LAST_ANIMATION_TIME,
                 CONTEXTUAL_SEARCH_CURRENT_WEEK_NUMBER,
+                CONTEXTUAL_SEARCH_OLDEST_WEEK,
+                CONTEXTUAL_SEARCH_NEWEST_WEEK,
+                CONTEXTUAL_SEARCH_CLICKS_WEEK_0,
+                CONTEXTUAL_SEARCH_CLICKS_WEEK_1,
+                CONTEXTUAL_SEARCH_CLICKS_WEEK_2,
+                CONTEXTUAL_SEARCH_CLICKS_WEEK_3,
+                CONTEXTUAL_SEARCH_CLICKS_WEEK_4,
+                CONTEXTUAL_SEARCH_IMPRESSIONS_WEEK_0,
+                CONTEXTUAL_SEARCH_IMPRESSIONS_WEEK_1,
+                CONTEXTUAL_SEARCH_IMPRESSIONS_WEEK_2,
+                CONTEXTUAL_SEARCH_IMPRESSIONS_WEEK_3,
+                CONTEXTUAL_SEARCH_IMPRESSIONS_WEEK_4,
                 PROMOS_SKIPPED_ON_FIRST_START,
                 SIGNIN_PROMO_LAST_SHOWN_MAJOR_VERSION,
                 SIGNIN_PROMO_LAST_SHOWN_ACCOUNT_NAMES,
diff --git a/chrome/browser/resource_coordinator/decision_details.cc b/chrome/browser/resource_coordinator/decision_details.cc
index 449cd63d..3f03fa7 100644
--- a/chrome/browser/resource_coordinator/decision_details.cc
+++ b/chrome/browser/resource_coordinator/decision_details.cc
@@ -39,6 +39,7 @@
     "Tab is currently connected to a bluetooth device",
     "Tab is currently holding a WebLock",
     "Tab is currently holding an IndexedDB lock",
+    "Tab has notification permission ",
 };
 static_assert(base::size(kDecisionFailureReasonStrings) ==
                   static_cast<size_t>(DecisionFailureReason::MAX),
@@ -152,6 +153,9 @@
     case DecisionFailureReason::LIVE_STATE_USING_INDEXEDDB_LOCK:
       ukm->SetFailureLiveStateUsingIndexedDBLock(1);
       break;
+    case DecisionFailureReason::LIVE_STATE_HAS_NOTIFICATIONS_PERMISSION:
+      ukm->SetFailureLiveStateHasNotificationsPermission(1);
+      break;
     case DecisionFailureReason::MAX:
       NOTREACHED();
       break;
diff --git a/chrome/browser/resource_coordinator/decision_details.h b/chrome/browser/resource_coordinator/decision_details.h
index 73dfb5e..33e2b5a9 100644
--- a/chrome/browser/resource_coordinator/decision_details.h
+++ b/chrome/browser/resource_coordinator/decision_details.h
@@ -88,6 +88,9 @@
   // The tab is opted out of the intervention as it's currently holding at least
   // one IndexedDB lock.
   LIVE_STATE_USING_INDEXEDDB_LOCK,
+  // The tab is opted out of the intervention as it has the permission to use
+  // notifications.
+  LIVE_STATE_HAS_NOTIFICATIONS_PERMISSION,
   // This must remain last.
   MAX,
 };
diff --git a/chrome/browser/resource_coordinator/tab_lifecycle_unit.cc b/chrome/browser/resource_coordinator/tab_lifecycle_unit.cc
index 439e7588..f1ae841a 100644
--- a/chrome/browser/resource_coordinator/tab_lifecycle_unit.cc
+++ b/chrome/browser/resource_coordinator/tab_lifecycle_unit.cc
@@ -16,6 +16,8 @@
 #include "chrome/browser/devtools/devtools_window.h"
 #include "chrome/browser/media/webrtc/media_capture_devices_dispatcher.h"
 #include "chrome/browser/media/webrtc/media_stream_capture_indicator.h"
+#include "chrome/browser/permissions/permission_manager.h"
+#include "chrome/browser/permissions/permission_result.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/resource_coordinator/lifecycle_unit_state.mojom.h"
 #include "chrome/browser/resource_coordinator/local_site_characteristics_data_store_factory.h"
@@ -187,6 +189,7 @@
 
 void CheckFeatureUsage(const SiteCharacteristicsDataReader* reader,
                        DecisionDetails* details) {
+  // TODO(sebmarchand): Remove the notification heuristic from this list.
   const FeatureUsageEntry features[] = {
       {reader->UsesAudioInBackground(), DecisionFailureReason::HEURISTIC_AUDIO},
       {reader->UpdatesFaviconInBackground(),
@@ -228,9 +231,10 @@
   if (!URLShouldBeStoredInLocalDatabase(web_contents->GetLastCommittedURL()))
     return;
 
+  auto* profile =
+      Profile::FromBrowserContext(web_contents->GetBrowserContext());
   SiteCharacteristicsDataStore* data_store =
-      LocalSiteCharacteristicsDataStoreFactory::GetForProfile(
-          Profile::FromBrowserContext(web_contents->GetBrowserContext()));
+      LocalSiteCharacteristicsDataStoreFactory::GetForProfile(profile);
   if (!data_store)
     return;
 
@@ -240,6 +244,14 @@
   // TODO(sebmarchand): Add a failure reason for when the data isn't ready yet.
 
   CheckFeatureUsage(reader.get(), details);
+
+  auto notif_permission = PermissionManager::Get(profile)->GetPermissionStatus(
+      ContentSettingsType::NOTIFICATIONS, web_contents->GetLastCommittedURL(),
+      web_contents->GetLastCommittedURL());
+  if (notif_permission.content_setting == CONTENT_SETTING_ALLOW) {
+    details->AddReason(
+        DecisionFailureReason::LIVE_STATE_HAS_NOTIFICATIONS_PERMISSION);
+  }
 }
 
 }  // namespace
diff --git a/chrome/browser/resource_coordinator/tab_lifecycle_unit_unittest.cc b/chrome/browser/resource_coordinator/tab_lifecycle_unit_unittest.cc
index e739139..8181aa5 100644
--- a/chrome/browser/resource_coordinator/tab_lifecycle_unit_unittest.cc
+++ b/chrome/browser/resource_coordinator/tab_lifecycle_unit_unittest.cc
@@ -18,6 +18,8 @@
 #include "chrome/browser/media/webrtc/media_capture_devices_dispatcher.h"
 #include "chrome/browser/media/webrtc/media_stream_capture_indicator.h"
 #include "chrome/browser/metrics/desktop_session_duration/desktop_session_duration_tracker.h"
+#include "chrome/browser/notifications/notification_permission_context.h"
+#include "chrome/browser/permissions/permission_request_manager.h"
 #include "chrome/browser/resource_coordinator/lifecycle_unit_observer.h"
 #include "chrome/browser/resource_coordinator/local_site_characteristics_data_unittest_utils.h"
 #include "chrome/browser/resource_coordinator/local_site_characteristics_webcontents_observer.h"
@@ -956,4 +958,39 @@
             tab_lifecycle_unit.GetState());
 }
 
+TEST_F(TabLifecycleUnitTest,
+       CannotFreezeOrDiscardTabWithNotificationsPermission) {
+  TabLifecycleUnit tab_lifecycle_unit(GetTabLifecycleUnitSource(), &observers_,
+                                      usage_clock_.get(), web_contents_,
+                                      tab_strip_model_.get());
+  TabLoadTracker::Get()->TransitionStateForTesting(web_contents_,
+                                                   LoadingState::LOADED);
+  // Advance time enough that the tab is urgent discardable.
+  test_clock_.Advance(kBackgroundUrgentProtectionTime);
+  DecisionDetails decision_details;
+  ExpectCanDiscardTrueAllReasons(&tab_lifecycle_unit);
+  EXPECT_TRUE(tab_lifecycle_unit.CanFreeze(&decision_details));
+
+  NotificationPermissionContext::UpdatePermission(
+      profile(), web_contents_->GetLastCommittedURL().GetOrigin(),
+      CONTENT_SETTING_ALLOW);
+
+  decision_details.Clear();
+  EXPECT_FALSE(tab_lifecycle_unit.CanFreeze(&decision_details));
+  EXPECT_FALSE(decision_details.IsPositive());
+  EXPECT_EQ(DecisionFailureReason::LIVE_STATE_HAS_NOTIFICATIONS_PERMISSION,
+            decision_details.FailureReason());
+
+  decision_details.Clear();
+  EXPECT_FALSE(tab_lifecycle_unit.CanDiscard(
+      LifecycleUnitDiscardReason::PROACTIVE, &decision_details));
+  EXPECT_FALSE(decision_details.IsPositive());
+  EXPECT_EQ(DecisionFailureReason::LIVE_STATE_HAS_NOTIFICATIONS_PERMISSION,
+            decision_details.FailureReason());
+
+  NotificationPermissionContext::UpdatePermission(
+      profile(), web_contents_->GetLastCommittedURL().GetOrigin(),
+      CONTENT_SETTING_DEFAULT);
+}
+
 }  // namespace resource_coordinator
diff --git a/chrome/browser/resource_coordinator/tab_manager.cc b/chrome/browser/resource_coordinator/tab_manager.cc
index 2df06fb..5ec84da 100644
--- a/chrome/browser/resource_coordinator/tab_manager.cc
+++ b/chrome/browser/resource_coordinator/tab_manager.cc
@@ -32,6 +32,7 @@
 #include "chrome/browser/media/webrtc/media_capture_devices_dispatcher.h"
 #include "chrome/browser/media/webrtc/media_stream_capture_indicator.h"
 #include "chrome/browser/memory/oom_memory_details.h"
+#include "chrome/browser/performance_manager/performance_manager_features.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/resource_coordinator/background_tab_navigation_throttle.h"
 #include "chrome/browser/resource_coordinator/local_site_characteristics_webcontents_observer.h"
@@ -778,6 +779,11 @@
   if (!base::FeatureList::IsEnabled(features::kProactiveTabFreezeAndDiscard))
     return;
 
+  if (base::FeatureList::IsEnabled(
+          features::kPageFreezingFromPerformanceManager)) {
+    return;
+  }
+
   base::TimeTicks next_state_transition_time = base::TimeTicks::Max();
   const base::TimeTicks now = NowTicks();
   LifecycleUnit* oldest_discardable_lifecycle_unit = nullptr;
diff --git a/chrome/browser/resources/discards/graph_doc.js b/chrome/browser/resources/discards/graph_doc.js
index 8eabc87..0dc19ca 100644
--- a/chrome/browser/resources/discards/graph_doc.js
+++ b/chrome/browser/resources/discards/graph_doc.js
@@ -11,6 +11,10 @@
 // Range occupied by process nodes at the bottom of the graph view.
 const kProcessNodesYRange = 150;
 
+// Range occupied by worker nodes at the bottom of the graph view, above
+// process nodes.
+const kWorkerNodesYRange = 300;
+
 // Target y position for frame nodes.
 const kFrameNodesTargetY = kPageNodesYRange + 50;
 
@@ -54,22 +58,22 @@
   /**
    * Sets the initial x and y position of this node, also resets
    * vx and vy.
-   * @param {number} graph_width: Width of the graph view (svg).
-   * @param {number} graph_height: Height of the graph view (svg).
+   * @param {number} graphWidth: Width of the graph view (svg).
+   * @param {number} graphHeight: Height of the graph view (svg).
    */
-  setInitialPosition(graph_width, graph_height) {
-    this.x = graph_width / 2;
-    this.y = this.targetYPosition(graph_height);
+  setInitialPosition(graphWidth, graphHeight) {
+    this.x = graphWidth / 2;
+    this.y = this.targetYPosition(graphHeight);
     this.vx = 0;
     this.vy = 0;
   }
 
   /**
-   * @param {number} graph_height: Height of the graph view (svg).
+   * @param {number} graphHeight: Height of the graph view (svg).
    * @return {number}
    */
-  targetYPosition(graph_height) {
-    const bounds = this.allowedYRange(graph_height);
+  targetYPosition(graphHeight) {
+    const bounds = this.allowedYRange(graphHeight);
     return (bounds[0] + bounds[1]) / 2;
   }
 
@@ -82,12 +86,12 @@
   }
 
   /**
-   * @param {number} graph_height: Height of the graph view.
+   * @param {number} graphHeight: Height of the graph view.
    * @return {!Array<number>}
    */
-  allowedYRange(graph_height) {
+  allowedYRange(graphHeight) {
     // By default, nodes just need to be in bounds of the graph.
-    return [0, graph_height];
+    return [0, graphHeight];
   }
 
   /** @return {number}: The strength of the repulsion force with other nodes. */
@@ -131,7 +135,7 @@
   }
 
   /** override */
-  allowedYRange(graph_height) {
+  allowedYRange(graphHeight) {
     return [0, kPageNodesYRange];
   }
 
@@ -156,13 +160,13 @@
   }
 
   /** override */
-  targetYPosition(graph_height) {
+  targetYPosition(graphHeight) {
     return kFrameNodesTargetY;
   }
 
   /** override */
-  allowedYRange(graph_height) {
-    return [kFrameNodesTopMargin, graph_height - kFrameNodesBottomMargin];
+  allowedYRange(graphHeight) {
+    return [kFrameNodesTopMargin, graphHeight - kFrameNodesBottomMargin];
   }
 
   /** override */
@@ -195,8 +199,8 @@
   }
 
   /** override */
-  allowedYRange(graph_height) {
-    return [graph_height - kProcessNodesYRange, graph_height];
+  allowedYRange(graphHeight) {
+    return [graphHeight - kProcessNodesYRange, graphHeight];
   }
 
   /** override */
@@ -205,11 +209,53 @@
   }
 }
 
+class WorkerNode extends GraphNode {
+  /** @param {!discards.mojom.WorkerInfo} worker */
+  constructor(worker) {
+    super(worker.id);
+    /** @type {!discards.mojom.WorkerInfo} */
+    this.worker = worker;
+
+    this.color = this.selectColor(worker.processId);
+  }
+
+  /** override */
+  get title() {
+    return this.worker.url.url.length > 0 ? this.worker.url.url : 'Worker';
+  }
+
+  /** @return {number} */
+  targetYPositionStrength() {
+    return 10;
+  }
+
+  /** override */
+  allowedYRange(graphHeight) {
+    return [
+      graphHeight - kWorkerNodesYRange, graphHeight - kProcessNodesYRange
+    ];
+  }
+
+  /** override */
+  manyBodyStrength() {
+    return -600;
+  }
+
+  /** override */
+  linkTargets() {
+    // Link the process, in addition to all the client and child workers.
+    return [
+      this.worker.processId, ...this.worker.clientFrameIds,
+      ...this.worker.clientWorkerIds, ...this.worker.childWorkerIds
+    ];
+  }
+}
+
 /**
  * A force that bounds GraphNodes |allowedYRange| in Y.
- * @param {number} graph_height
+ * @param {number} graphHeight
  */
-function bounding_force(graph_height) {
+function boundingForce(graphHeight) {
   /** @type {!Array<!GraphNode>} */
   let nodes = [];
   /** @type {!Array<!Array>} */
@@ -234,7 +280,7 @@
   /** @param {!Array<!GraphNode>} n */
   force.initialize = function(n) {
     nodes = n;
-    bounds = nodes.map(node => node.allowedYRange(graph_height));
+    bounds = nodes.map(node => node.allowedYRange(graphHeight));
   };
 
   return force;
@@ -336,6 +382,11 @@
   }
 
   /** @override */
+  workerCreated(worker) {
+    this.addNode_(new WorkerNode(worker));
+  }
+
+  /** @override */
   frameChanged(frame) {
     const frameNode = /** @type {!FrameNode} */ (this.nodes_.get(frame.id));
     frameNode.frame = frame;
@@ -355,6 +406,17 @@
   }
 
   /** @override */
+  workerChanged(worker) {
+    const workerNode =
+        /** @type {!WorkerNode} */ (this.nodes_.get(worker.id));
+
+    // Worker node links may change dynamically, so account for that here.
+    this.removeNodeLinks_(workerNode);
+    workerNode.worker = worker;
+    this.addNodeLinks_(workerNode);
+  }
+
+  /** @override */
   favIconDataAvailable(iconInfo) {
     const graphNode = this.nodes_.get(iconInfo.nodeId);
     if (graphNode) {
@@ -366,12 +428,19 @@
   nodeDeleted(nodeId) {
     const node = this.nodes_.get(nodeId);
 
+    // Remove any links, and then the node itself.
+    this.removeNodeLinks_(node);
+    this.nodes_.delete(nodeId);
+  }
+
+  /**
+   * @param {!GraphNode} node
+   * @private
+   */
+  removeNodeLinks_(node) {
     // Filter away any links to or from the deleted node.
     this.links_ =
         this.links_.filter(link => link.source != node && link.target != node);
-
-    // And remove the node.
-    this.nodes_.delete(nodeId);
   }
 
   /**
@@ -394,6 +463,10 @@
         this.processCreated(
             /** @type {!discards.mojom.ProcessInfo} */ (data));
         break;
+      case 'workerCreated':
+        this.workerCreated(
+            /** @type {!discards.mojom.WorkerInfo} */ (data));
+        break;
       case 'frameChanged':
         this.frameChanged(
             /** @type {!discards.mojom.FrameInfo} */ (data));
@@ -410,6 +483,10 @@
         this.favIconDataAvailable(
             /** @type {!discards.mojom.FavIconInfo} */ (data));
         break;
+      case 'workerChanged':
+        this.workerChanged(
+            /** @type {!discards.mojom.WorkerInfo} */ (data));
+        break;
       case 'nodeDeleted':
         this.nodeDeleted(/** @type {number} */ (data));
         break;
@@ -511,18 +588,6 @@
   }
 
   /**
-   * @param {!GraphNode} source
-   * @param {number} dst_id
-   * @private
-   */
-  maybeAddLink_(source, dst_id) {
-    const target = this.nodes_.get(dst_id);
-    if (target) {
-      this.links_.push({source: source, target: target});
-    }
-  }
-
-  /**
    * Adds a new node to the graph, populates its links and gives it an initial
    * position.
    *
@@ -531,13 +596,24 @@
    */
   addNode_(node) {
     this.nodes_.set(node.id, node);
+    this.addNodeLinks_(node);
+    node.setInitialPosition(this.width_, this.height_);
+  }
 
+  /**
+   * Adds all the links for a node to the graph.
+   *
+   * @param {!GraphNode} node
+   * @private
+   */
+  addNodeLinks_(node) {
     const linkTargets = node.linkTargets();
     for (const linkTarget of linkTargets) {
-      this.maybeAddLink_(node, linkTarget);
+      const target = this.nodes_.get(linkTarget);
+      if (target) {
+        this.links_.push({source: node, target: target});
+      }
     }
-
-    node.setInitialPosition(this.width_, this.height_);
   }
 
   /**
@@ -618,7 +694,7 @@
                        .strength(this.getTargetYPositionStrength_.bind(this));
     this.simulation_.force('x_pos', xForce);
     this.simulation_.force('y_pos', yForce);
-    this.simulation_.force('y_bound', bounding_force(this.height_));
+    this.simulation_.force('y_bound', boundingForce(this.height_));
 
     if (!this.wasResized_) {
       this.wasResized_ = true;
diff --git a/chrome/browser/resources/discards/graph_tab_template.js b/chrome/browser/resources/discards/graph_tab_template.js
index dfc6425..d4ce2f9 100644
--- a/chrome/browser/resources/discards/graph_tab_template.js
+++ b/chrome/browser/resources/discards/graph_tab_template.js
@@ -38,6 +38,11 @@
   }
 
   /** @override */
+  workerCreated(worker) {
+    this.postMessage_('workerCreated', worker);
+  }
+
+  /** @override */
   frameChanged(frame) {
     this.postMessage_('frameChanged', frame);
   }
@@ -53,6 +58,11 @@
   }
 
   /** @override */
+  workerChanged(worker) {
+    this.postMessage_('workerChanged', worker);
+  }
+
+  /** @override */
   favIconDataAvailable(icon_info) {
     this.postMessage_('favIconDataAvailable', icon_info);
   }
diff --git a/chrome/browser/resources/safe_browsing/README.md b/chrome/browser/resources/safe_browsing/README.md
index 63b5ab4e..0f4ae81 100644
--- a/chrome/browser/resources/safe_browsing/README.md
+++ b/chrome/browser/resources/safe_browsing/README.md
@@ -90,7 +90,7 @@
 
   * `platform_settings`: (repeated) Zero or more settings to differentiate
      behavior by platform. Keep them sorted by platform. At build time,
-     this list will be filtered to contain exactly one setting by chosing
+     this list will be filtered to contain exactly one setting by choosing
      as follows before writing out the binary proto.
 
        1. If there's an entry matching the built platform,
@@ -101,6 +101,12 @@
 
        3. The `default_file_type`'s settings will be filled in.
 
+    **Warning**: When specifying a new `platform_settings` for a file type, be
+    sure to specify values for all necessary settings. The `platform_settings`
+    will override all of the `default_file_type`'s settings, and this may result
+    in a change in behavior for `platform_settings` left unspecified. For
+    example, see [crbug.com/946558](https://crbug.com/956558#c5).
+
   * `platform_settings.danger_level`: (required) Controls how files should be
     handled by the UI in the absence of a better signal from the Safe Browsing
     ping. This applies to all file types where `ping_setting` is either
@@ -154,6 +160,10 @@
       potentially dangerous changes in behavior for other programs. We
       allow automatically opening these file types, but always warn when
       they are downloaded.
+  * `platform_settings.max_file_size_to_analyze`: (optional).
+      Size in bytes of the largest file that the analyzer is willing to inspect;
+      for instance, a zip file larger than the threshold will not be unpacked
+      to allow scanning of the files within.
 
   * TODO(nparker): Support this: `platform_settings.unpacker`:
      optional. Specifies which archive unpacker internal to Chrome
diff --git a/chrome/browser/resources/safe_browsing/download_file_types.asciipb b/chrome/browser/resources/safe_browsing/download_file_types.asciipb
index fe226d8..9a7b1b3 100644
--- a/chrome/browser/resources/safe_browsing/download_file_types.asciipb
+++ b/chrome/browser/resources/safe_browsing/download_file_types.asciipb
@@ -8,7 +8,7 @@
 ##
 ## Top level settings
 ##
-version_id: 39
+version_id: 40
 sampled_ping_probability: 0.01
 max_archived_binaries_to_report: 10
 default_file_type {
@@ -562,6 +562,7 @@
   ping_setting: FULL_PING
   inspection_type: RAR
   platform_settings {
+    auto_open_hint: ALLOW_AUTO_OPEN
     max_file_size_to_analyze: 52428800 # 50MB
   }
 }
@@ -706,6 +707,7 @@
   ping_setting: FULL_PING
   inspection_type: ZIP
   platform_settings {
+    auto_open_hint: ALLOW_AUTO_OPEN
     max_file_size_to_analyze: 52428800 # 50MB
   }
 }
diff --git a/chrome/browser/resources/tab_strip/BUILD.gn b/chrome/browser/resources/tab_strip/BUILD.gn
index 68dba38..3c45638 100644
--- a/chrome/browser/resources/tab_strip/BUILD.gn
+++ b/chrome/browser/resources/tab_strip/BUILD.gn
@@ -44,6 +44,9 @@
 }
 
 js_library("tab_list") {
+  deps = [
+    "//ui/webui/resources/js/cr/ui:focus_outline_manager.m",
+  ]
 }
 
 js_library("tab_strip_embedder_proxy") {
diff --git a/chrome/browser/resources/tab_strip/tab.html b/chrome/browser/resources/tab_strip/tab.html
index 2e51afa..0be25aa 100644
--- a/chrome/browser/resources/tab_strip/tab.html
+++ b/chrome/browser/resources/tab_strip/tab.html
@@ -26,15 +26,18 @@
   }
 
   #tab:focus {
-    box-shadow: 0 0 0 2px var(--tabstrip-focus-outline-color);
     outline: none;
   }
 
+  :host-context(.focus-outline-visible) #tab:focus {
+    box-shadow: 0 0 0 2px var(--tabstrip-focus-outline-color);
+  }
+
   :host([active]) #tab {
     box-shadow: 0 0 0 2px var(--tabstrip-tab-active-border-color);
   }
 
-  :host([active]) #tab:focus {
+  :host-context(.focus-outline-visible):host([active]) #tab:focus {
     box-shadow: 0 0 0 4px var(--tabstrip-focus-outline-color),
                 0 0 0 2px var(--tabstrip-tab-active-border-color);
   }
@@ -221,7 +224,7 @@
     width: 18px;
   }
 
-  #close:focus #closeIconFocus {
+  :host-context(.focus-outline-visible) #close:focus #closeIconFocus {
     background: currentColor;
     border-radius: 50%;
     height: 24px;
diff --git a/chrome/browser/resources/tab_strip/tab_list.js b/chrome/browser/resources/tab_strip/tab_list.js
index c8a645b..ebf4480 100644
--- a/chrome/browser/resources/tab_strip/tab_list.js
+++ b/chrome/browser/resources/tab_strip/tab_list.js
@@ -7,6 +7,7 @@
 
 import {assert} from 'chrome://resources/js/assert.m.js';
 import {addWebUIListener} from 'chrome://resources/js/cr.m.js';
+import {FocusOutlineManager} from 'chrome://resources/js/cr/ui/focus_outline_manager.m.js';
 import {loadTimeData} from 'chrome://resources/js/load_time_data.m.js';
 
 import {CustomElement} from './custom_element.js';
@@ -58,6 +59,9 @@
      */
     this.draggedItem_;
 
+    /** @private @const {!FocusOutlineManager} */
+    this.focusOutlineManager_ = FocusOutlineManager.forDocument(document);
+
     /**
      * An intersection observer is needed to observe which TabElements are
      * currently in view or close to being in view, which will help determine
@@ -98,9 +102,6 @@
     /** @private {!Function} */
     this.windowBlurListener_ = () => this.onWindowBlur_();
 
-    /** @private {!Function} */
-    this.windowFocusListener_ = () => this.onWindowFocus_();
-
     addWebUIListener(
         'layout-changed', layout => this.applyCSSDictionary_(layout));
     addWebUIListener('theme-changed', () => this.fetchAndUpdateColors_());
@@ -118,8 +119,9 @@
 
     document.addEventListener(
         'visibilitychange', this.documentVisibilityChangeListener_);
+    addWebUIListener(
+        'received-keyboard-focus', () => this.onReceivedKeyboardFocus_());
     window.addEventListener('blur', this.windowBlurListener_);
-    window.addEventListener('focus', this.windowFocusListener_);
 
     if (loadTimeData.getBoolean('showDemoOptions')) {
       this.shadowRoot.querySelector('#demoOptions').style.display = 'block';
@@ -182,7 +184,6 @@
     document.removeEventListener(
         'visibilitychange', this.documentVisibilityChangeListener_);
     window.removeEventListener('blur', this.windowBlurListener_);
-    window.removeEventListener('focus', this.windowFocusListener_);
   }
 
   /**
@@ -341,6 +342,15 @@
         event.pageY - this.draggedItem_.offsetTop);
   }
 
+  /** @private */
+  onReceivedKeyboardFocus_() {
+    // FocusOutlineManager relies on the most recent event fired on the
+    // document. When the tab strip first gains keyboard focus, no such event
+    // exists yet, so the outline needs to be explicitly set to visible.
+    this.focusOutlineManager_.visible = true;
+    this.shadowRoot.querySelector('tabstrip-tab').focus();
+  }
+
   /**
    * @param {number} tabId
    * @private
@@ -465,11 +475,6 @@
     }
   }
 
-  /** @private */
-  onWindowFocus_() {
-    this.shadowRoot.querySelector('tabstrip-tab').focus();
-  }
-
   /**
    * @param {!TabElement} tabElement
    * @private
diff --git a/chrome/browser/safe_browsing/download_protection/binary_upload_service.cc b/chrome/browser/safe_browsing/download_protection/binary_upload_service.cc
index a8791e2..3a84621 100644
--- a/chrome/browser/safe_browsing/download_protection/binary_upload_service.cc
+++ b/chrome/browser/safe_browsing/download_protection/binary_upload_service.cc
@@ -83,7 +83,6 @@
 void BinaryUploadService::MaybeUploadForDeepScanning(
     std::unique_ptr<BinaryUploadService::Request> request) {
   DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
-  can_upload_data_ = true;
   if (!can_upload_data_.has_value()) {
     IsAuthorized(
         base::BindOnce(&BinaryUploadService::MaybeUploadForDeepScanningCallback,
@@ -457,6 +456,10 @@
   IsAuthorized(base::DoNothing());
 }
 
+void BinaryUploadService::SetAuthForTesting(bool authorized) {
+  can_upload_data_ = authorized;
+}
+
 // static
 bool BinaryUploadService::ShouldBlockFileSize(size_t file_size) {
   int block_large_file_transfer = g_browser_process->local_state()->GetInteger(
diff --git a/chrome/browser/safe_browsing/download_protection/binary_upload_service.h b/chrome/browser/safe_browsing/download_protection/binary_upload_service.h
index 733cc8f1..2722f89 100644
--- a/chrome/browser/safe_browsing/download_protection/binary_upload_service.h
+++ b/chrome/browser/safe_browsing/download_protection/binary_upload_service.h
@@ -137,6 +137,9 @@
   // Resets |can_upload_data_|. Called every 24 hour by |timer_|.
   void ResetAuthorizationData();
 
+  // Sets |can_upload_data_| for tests.
+  void SetAuthForTesting(bool authorized);
+
   // Returns whether a download should be blocked based on file size alone. It
   // checks the enterprise policy BlockLargeFileTransfer to decide this.
   static bool ShouldBlockFileSize(size_t file_size);
diff --git a/chrome/browser/safe_browsing/download_protection/binary_upload_service_unittest.cc b/chrome/browser/safe_browsing/download_protection/binary_upload_service_unittest.cc
index d459702..5e6868209 100644
--- a/chrome/browser/safe_browsing/download_protection/binary_upload_service_unittest.cc
+++ b/chrome/browser/safe_browsing/download_protection/binary_upload_service_unittest.cc
@@ -123,8 +123,8 @@
   void UploadForDeepScanning(
       std::unique_ptr<BinaryUploadService::Request> request,
       bool authorized = true) {
-    service_->MaybeUploadForDeepScanningCallback(std::move(request),
-                                                 authorized);
+    service_->SetAuthForTesting(authorized);
+    service_->MaybeUploadForDeepScanning(std::move(request));
   }
 
   void ReceiveMessageForRequest(BinaryUploadService::Request* request,
diff --git a/chrome/browser/sync/sync_ui_util.cc b/chrome/browser/sync/sync_ui_util.cc
index e0c441b..0648512c 100644
--- a/chrome/browser/sync/sync_ui_util.cc
+++ b/chrome/browser/sync/sync_ui_util.cc
@@ -25,24 +25,6 @@
 
 namespace {
 
-// Returns whether current encrypted datatypes can be interpreted by the user as
-// "passwords", allowing the caller to use for accurate strings in the UI.
-bool IsEncryptionEnabledForPasswordsOnly(
-    const syncer::SyncService* sync_service) {
-  DCHECK(sync_service);
-
-  const syncer::ModelTypeSet currently_encrypted_types =
-      sync_service->GetUserSettings()->GetEncryptedDataTypes();
-
-  // Sync datatypes that can be interpreted by the user as "passwords".
-  // TODO(crbug.com/1019687): Link this to SensitiveTypes().
-  syncer::ModelTypeSet password_like_types;
-  password_like_types.Put(syncer::PASSWORDS);
-  password_like_types.Put(syncer::WIFI_CONFIGURATIONS);
-
-  return password_like_types.HasAll(currently_encrypted_types);
-}
-
 StatusLabels GetStatusForUnrecoverableError(bool is_user_signout_allowed) {
 #if !defined(OS_CHROMEOS)
   int status_label_string_id =
@@ -137,7 +119,7 @@
     if (service->GetUserSettings()
             ->IsPassphraseRequiredForPreferredDataTypes()) {
       // TODO(mastiz): This should return PASSWORDS_ONLY_SYNC_ERROR if only
-      // passwords are encrypted as per IsEncryptionEnabledForPasswordsOnly().
+      // passwords are encrypted as per IsEncryptEverythingEnabled().
       return {SYNC_ERROR, IDS_SYNC_STATUS_NEEDS_PASSWORD,
               IDS_SYNC_STATUS_NEEDS_PASSWORD_LINK_LABEL, ENTER_PASSPHRASE};
     }
@@ -145,9 +127,9 @@
     if (service->IsSyncFeatureActive() &&
         service->GetUserSettings()
             ->IsTrustedVaultKeyRequiredForPreferredDataTypes()) {
-      return {IsEncryptionEnabledForPasswordsOnly(service)
-                  ? PASSWORDS_ONLY_SYNC_ERROR
-                  : SYNC_ERROR,
+      return {service->GetUserSettings()->IsEncryptEverythingEnabled()
+                  ? SYNC_ERROR
+                  : PASSWORDS_ONLY_SYNC_ERROR,
               IDS_SETTINGS_EMPTY_STRING, IDS_SYNC_STATUS_NEEDS_KEYS_LINK_LABEL,
               RETRIEVE_TRUSTED_VAULT_KEYS};
     }
diff --git a/chrome/browser/sync/test/integration/local_sync_test.cc b/chrome/browser/sync/test/integration/local_sync_test.cc
index d2c8a67..ec3b7532 100644
--- a/chrome/browser/sync/test/integration/local_sync_test.cc
+++ b/chrome/browser/sync/test/integration/local_sync_test.cc
@@ -7,6 +7,7 @@
 #include "base/command_line.h"
 #include "base/files/scoped_temp_dir.h"
 #include "base/macros.h"
+#include "build/branding_buildflags.h"
 #include "build/build_config.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/send_tab_to_self/send_tab_to_self_util.h"
@@ -66,7 +67,8 @@
 };
 
 // The local sync backend is currently only supported on Windows.
-#if defined(OS_WIN)
+// TODO(crbug.com/1028113) Fix in Chrome-branded builds.
+#if defined(OS_WIN) && !BUILDFLAG(GOOGLE_CHROME_BRANDING)
 IN_PROC_BROWSER_TEST_F(LocalSyncTest, ShouldStart) {
   ProfileSyncService* service =
       ProfileSyncServiceFactory::GetAsProfileSyncServiceForProfile(
@@ -84,6 +86,6 @@
             SharingServiceFactory::GetForBrowserContext(browser()->profile())
                 ->GetStateForTesting());
 }
-#endif  // defined(OS_WIN)
+#endif  // defined(OS_WIN) && !BUILDFLAG(GOOGLE_CHROME_BRANDING)
 
 }  // namespace
diff --git a/chrome/browser/ui/android/widget/java/src/org/chromium/chrome/browser/ui/widget/text/TextViewWithCompoundDrawables.java b/chrome/browser/ui/android/widget/java/src/org/chromium/chrome/browser/ui/widget/text/TextViewWithCompoundDrawables.java
index 8132ff99..a0cbd6f 100644
--- a/chrome/browser/ui/android/widget/java/src/org/chromium/chrome/browser/ui/widget/text/TextViewWithCompoundDrawables.java
+++ b/chrome/browser/ui/android/widget/java/src/org/chromium/chrome/browser/ui/widget/text/TextViewWithCompoundDrawables.java
@@ -80,10 +80,10 @@
             if (mDrawableWidth > 0 || mDrawableHeight > 0) {
                 Rect bounds = drawable.getBounds();
                 if (mDrawableWidth > 0) {
-                    bounds.right = bounds.left + Math.round(mDrawableWidth);
+                    bounds.right = bounds.left + mDrawableWidth;
                 }
                 if (mDrawableHeight > 0) {
-                    bounds.bottom = bounds.top + Math.round(mDrawableHeight);
+                    bounds.bottom = bounds.top + mDrawableHeight;
                 }
                 drawable.setBounds(bounds);
             }
diff --git a/chrome/browser/ui/app_list/arc/arc_app_unittest.cc b/chrome/browser/ui/app_list/arc/arc_app_unittest.cc
index e893b5a8..3de6c16 100644
--- a/chrome/browser/ui/app_list/arc/arc_app_unittest.cc
+++ b/chrome/browser/ui/app_list/arc/arc_app_unittest.cc
@@ -2967,24 +2967,24 @@
   }
 }
 
-INSTANTIATE_TEST_SUITE_P(,
+INSTANTIATE_TEST_SUITE_P(All,
                          ArcAppModelBuilderTest,
                          ::testing::ValuesIn(kUnmanagedArcStates));
-INSTANTIATE_TEST_SUITE_P(,
+INSTANTIATE_TEST_SUITE_P(All,
                          ArcDefaultAppTest,
                          ::testing::ValuesIn(kUnmanagedArcStates));
-INSTANTIATE_TEST_SUITE_P(,
+INSTANTIATE_TEST_SUITE_P(All,
                          ArcAppLauncherForDefaultAppTest,
                          ::testing::ValuesIn(kUnmanagedArcStates));
-INSTANTIATE_TEST_SUITE_P(,
+INSTANTIATE_TEST_SUITE_P(All,
                          ArcDefaultAppForManagedUserTest,
                          ::testing::ValuesIn(kManagedArcStates));
-INSTANTIATE_TEST_SUITE_P(,
+INSTANTIATE_TEST_SUITE_P(All,
                          ArcPlayStoreAppTest,
                          ::testing::ValuesIn(kUnmanagedArcStates));
-INSTANTIATE_TEST_SUITE_P(,
+INSTANTIATE_TEST_SUITE_P(All,
                          ArcAppModelBuilderRecreate,
                          ::testing::ValuesIn(kUnmanagedArcStates));
-INSTANTIATE_TEST_SUITE_P(,
+INSTANTIATE_TEST_SUITE_P(All,
                          ArcAppModelIconTest,
                          ::testing::ValuesIn(kUnmanagedArcStates));
diff --git a/chrome/browser/ui/app_list/search/arc/arc_app_shortcuts_search_provider_unittest.cc b/chrome/browser/ui/app_list/search/arc/arc_app_shortcuts_search_provider_unittest.cc
index 06c95693..e19747c 100644
--- a/chrome/browser/ui/app_list/search/arc/arc_app_shortcuts_search_provider_unittest.cc
+++ b/chrome/browser/ui/app_list/search/arc/arc_app_shortcuts_search_provider_unittest.cc
@@ -112,6 +112,8 @@
   }
 }
 
-INSTANTIATE_TEST_SUITE_P(, ArcAppShortcutsSearchProviderTest, testing::Bool());
+INSTANTIATE_TEST_SUITE_P(All,
+                         ArcAppShortcutsSearchProviderTest,
+                         testing::Bool());
 
 }  // namespace app_list
diff --git a/chrome/browser/ui/app_list/search/common/file_icon_util_unittest.cc b/chrome/browser/ui/app_list/search/common/file_icon_util_unittest.cc
index 08f60ef..c39a0abd 100644
--- a/chrome/browser/ui/app_list/search/common/file_icon_util_unittest.cc
+++ b/chrome/browser/ui/app_list/search/common/file_icon_util_unittest.cc
@@ -21,7 +21,7 @@
 class AppListFileIconUtilTest
     : public testing::TestWithParam<std::pair<std::string, int>> {};
 INSTANTIATE_TEST_SUITE_P(
-    ,
+    All,
     AppListFileIconUtilTest,
     testing::ValuesIn((std::pair<std::string, int>[]){
         {"/my/test/file.pdf", IDR_FILE_MANAGER_IMG_LAUNCHER_FILETYPE_2X_PDF},
diff --git a/chrome/browser/ui/app_list/search/tests/app_search_provider_unittest.cc b/chrome/browser/ui/app_list/search/tests/app_search_provider_unittest.cc
index 246b5cd..40a03250 100644
--- a/chrome/browser/ui/app_list/search/tests/app_search_provider_unittest.cc
+++ b/chrome/browser/ui/app_list/search/tests/app_search_provider_unittest.cc
@@ -936,7 +936,7 @@
 }
 
 INSTANTIATE_TEST_SUITE_P(
-    ,
+    All,
     AppSearchProviderWithExtensionInstallType,
     ::testing::ValuesIn({TestExtensionInstallType::CONTROLLED_BY_POLICY,
                          TestExtensionInstallType::CHROME_COMPONENT,
@@ -1027,7 +1027,7 @@
 }
 
 INSTANTIATE_TEST_SUITE_P(
-    ,
+    All,
     AppSearchProviderWithArcAppInstallType,
     ::testing::ValuesIn({TestArcAppInstallType::CONTROLLED_BY_POLICY,
                          TestArcAppInstallType::INSTALLED_BY_DEFAULT}));
diff --git a/chrome/browser/ui/color/chrome_color_id.h b/chrome/browser/ui/color/chrome_color_id.h
index be602591..07c5ffc 100644
--- a/chrome/browser/ui/color/chrome_color_id.h
+++ b/chrome/browser/ui/color/chrome_color_id.h
@@ -9,9 +9,10 @@
 
 // TODO(pkasting): Add the rest of the colors.
 
+// clang-format off
 #define CHROME_COLOR_IDS \
   /* Omnibox output colors. */ \
-  E(kColorOmniboxBackground, ui::kUiColorsEnd), \
+  E(kColorOmniboxBackground, kChromeColorsStart), \
   E(kColorOmniboxBackgroundHovered), \
   E(kColorOmniboxBubbleOutline), \
   E(kColorOmniboxBubbleOutlineExperimentalKeywordMode), \
@@ -31,11 +32,14 @@
   E(kColorOmniboxSelectedKeyword), \
   E(kColorOmniboxText), \
   E(kColorOmniboxTextDimmed), \
+  \
   E(kColorToolbar)
+// clang-format on
 
 #include "ui/color/color_id_macros.inc"
 
 enum ChromeColorIds : ui::ColorId {
+  kChromeColorsStart = ui::kUiColorsEnd,
 
   CHROME_COLOR_IDS,
 
diff --git a/chrome/browser/ui/color/tools/dump_colors.cc b/chrome/browser/ui/color/tools/dump_colors.cc
index b4e5e49..34e664e5 100644
--- a/chrome/browser/ui/color/tools/dump_colors.cc
+++ b/chrome/browser/ui/color/tools/dump_colors.cc
@@ -39,13 +39,29 @@
   add_mixers(&light_provider, false);
   add_mixers(&dark_provider, true);
 
+  size_t longest_name = 0;
+  for (const char* name : enum_names)
+    longest_name = std::max(longest_name, strlen(name));
+  ++longest_name;  // For trailing space.
+
+  std::cout << std::setfill(' ') << std::left;
+  std::cout << std::setw(longest_name) << "ID";
+  constexpr size_t kColorColumnWidth = 1 + 8 + 1;  // '#xxxxxxxx '/'#xxxxxxxx\n'
+  std::cout << std::setw(kColorColumnWidth) << "Light";
+  std::cout << "Dark\n";
+  std::cout << std::setfill('-') << std::right;
+  std::cout << std::setw(longest_name) << ' ';
+  std::cout << std::setw(kColorColumnWidth) << ' ';
+  std::cout << std::setw(kColorColumnWidth) << '\n';
+
   for (ui::ColorId id = ui::kUiColorsStart; id < kChromeColorsEnd; ++id) {
-    std::cout << "ID: " << std::setfill(' ') << std::setw(49) << enum_names[id]
-              << " Light: "<< std::hex << std::setfill('0') << std::setw(8)
-              << light_provider.GetColor(id)
-              << " Dark: " << std::setw(8) << dark_provider.GetColor(id)
-              << '\n';
+    std::cout << std::setfill(' ') << std::left;
+    std::cout << std::setw(longest_name) << enum_names[id];
+    std::cout << std::hex << std::setfill('0') << std::right;
+    std::cout << '#' << std::setw(8) << light_provider.GetColor(id) << ' ';
+    std::cout << '#' << std::setw(8) << dark_provider.GetColor(id) << '\n';
   }
+
   std::cout.flush();
 
   return 0;
diff --git a/chrome/browser/ui/search/local_ntp_browsertest.cc b/chrome/browser/ui/search/local_ntp_browsertest.cc
index 95d183a7f..171c411896 100644
--- a/chrome/browser/ui/search/local_ntp_browsertest.cc
+++ b/chrome/browser/ui/search/local_ntp_browsertest.cc
@@ -1039,7 +1039,7 @@
   EXPECT_EQ(kDarkModeEnabled, GetIsDarkModeApplied(cl_iframe));
 }
 
-INSTANTIATE_TEST_SUITE_P(, LocalNTPDarkModeStartupTest, testing::Bool());
+INSTANTIATE_TEST_SUITE_P(All, LocalNTPDarkModeStartupTest, testing::Bool());
 
 #endif
 
diff --git a/chrome/browser/ui/views/frame/browser_frame_header_ash.cc b/chrome/browser/ui/views/frame/browser_frame_header_ash.cc
index 5422842..91352b7 100644
--- a/chrome/browser/ui/views/frame/browser_frame_header_ash.cc
+++ b/chrome/browser/ui/views/frame/browser_frame_header_ash.cc
@@ -100,7 +100,7 @@
                              0};  // bottom-left
   SkPath frame_path;
   frame_path.addRoundRect(gfx::RectToSkRect(bounds), radii,
-                          SkPath::kCW_Direction);
+                          SkPathDirection::kCW);
   bool antialias = corner_radius > 0;
 
   gfx::ScopedCanvas scoped_save(canvas);
diff --git a/chrome/browser/ui/views/frame/webui_tab_strip_container_view.cc b/chrome/browser/ui/views/frame/webui_tab_strip_container_view.cc
index e1bc5b3..abb4f44c 100644
--- a/chrome/browser/ui/views/frame/webui_tab_strip_container_view.cc
+++ b/chrome/browser/ui/views/frame/webui_tab_strip_container_view.cc
@@ -298,7 +298,7 @@
     if (GetVisible() && sender->HasFocus()) {
       // Automatically move focus to the tab strip WebUI if the focus is
       // currently on the toggle button.
-      SetPaneFocus(web_view_);
+      SetPaneFocusAndFocusDefault();
     }
   } else if (sender->GetID() == VIEW_ID_WEBUI_TAB_STRIP_NEW_TAB_BUTTON) {
     chrome::ExecuteCommand(browser_, IDC_NEW_TAB);
@@ -330,3 +330,15 @@
   else if (observed_view == tab_counter_)
     tab_counter_ = nullptr;
 }
+
+bool WebUITabStripContainerView::SetPaneFocusAndFocusDefault() {
+  // Make sure the pane first receives focus, then send a WebUI event to the
+  // front-end so the correct HTML element receives focus.
+  bool received_focus = AccessiblePaneView::SetPaneFocusAndFocusDefault();
+  if (received_focus) {
+    TabStripUI* const tab_strip_ui = static_cast<TabStripUI*>(
+        web_view_->GetWebContents()->GetWebUI()->GetController());
+    tab_strip_ui->ReceivedKeyboardFocus();
+  }
+  return received_focus;
+}
diff --git a/chrome/browser/ui/views/frame/webui_tab_strip_container_view.h b/chrome/browser/ui/views/frame/webui_tab_strip_container_view.h
index 1929cba..ac4b9cd 100644
--- a/chrome/browser/ui/views/frame/webui_tab_strip_container_view.h
+++ b/chrome/browser/ui/views/frame/webui_tab_strip_container_view.h
@@ -86,6 +86,9 @@
   void OnViewBoundsChanged(View* observed_view) override;
   void OnViewIsDeleting(View* observed_view) override;
 
+  // views::AccessiblePaneView
+  bool SetPaneFocusAndFocusDefault() override;
+
   Browser* const browser_;
   views::WebView* const web_view_;
   views::View* const tab_contents_container_;
diff --git a/chrome/browser/ui/views/tabs/new_tab_button.cc b/chrome/browser/ui/views/tabs/new_tab_button.cc
index dd1c2a1..e5937bcc 100644
--- a/chrome/browser/ui/views/tabs/new_tab_button.cc
+++ b/chrome/browser/ui/views/tabs/new_tab_button.cc
@@ -323,8 +323,8 @@
     const float diameter = radius * 2;
     path.rLineTo(diameter, 0);
     path.rLineTo(0, scaled_origin.y() + radius);
-    path.rArcTo(radius, radius, 0, SkPath::kSmall_ArcSize,
-                SkPath::kCW_Direction, -diameter, 0);
+    path.rArcTo(radius, radius, 0, SkPath::kSmall_ArcSize, SkPathDirection::kCW,
+                -diameter, 0);
     path.close();
   } else {
     path.addCircle(scaled_origin.x() + radius, scaled_origin.y() + radius,
diff --git a/chrome/browser/ui/views/tabs/tab_group_underline.cc b/chrome/browser/ui/views/tabs/tab_group_underline.cc
index 24a9476..b252573 100644
--- a/chrome/browser/ui/views/tabs/tab_group_underline.cc
+++ b/chrome/browser/ui/views/tabs/tab_group_underline.cc
@@ -92,10 +92,10 @@
 
   path.moveTo(0, kStrokeThickness);
   path.arcTo(kStrokeThickness, kStrokeThickness, 0, SkPath::kSmall_ArcSize,
-             SkPath::kCW_Direction, kStrokeThickness, 0);
+             SkPathDirection::kCW, kStrokeThickness, 0);
   path.lineTo(width() - kStrokeThickness, 0);
   path.arcTo(kStrokeThickness, kStrokeThickness, 0, SkPath::kSmall_ArcSize,
-             SkPath::kCW_Direction, width(), kStrokeThickness);
+             SkPathDirection::kCW, width(), kStrokeThickness);
   path.close();
 
   return path;
diff --git a/chrome/browser/ui/views/tabs/tab_style_views.cc b/chrome/browser/ui/views/tabs/tab_style_views.cc
index fbe88956..b1787e1 100644
--- a/chrome/browser/ui/views/tabs/tab_style_views.cc
+++ b/chrome/browser/ui/views/tabs/tab_style_views.cc
@@ -327,8 +327,7 @@
       } else {
         path.lineTo(tab_left - bottom_radius, tab_bottom);
         path.arcTo(bottom_radius, bottom_radius, 0, SkPath::kSmall_ArcSize,
-                   SkPath::kCCW_Direction, tab_left,
-                   tab_bottom - bottom_radius);
+                   SkPathDirection::kCCW, tab_left, tab_bottom - bottom_radius);
       }
     }
 
@@ -344,7 +343,7 @@
       // ┌─╯         ╰─┐
       path.lineTo(tab_left, tab_top + top_radius);
       path.arcTo(top_radius, top_radius, 0, SkPath::kSmall_ArcSize,
-                 SkPath::kCW_Direction, tab_left + top_radius, tab_top);
+                 SkPathDirection::kCW, tab_left + top_radius, tab_top);
     }
 
     // Draw the top crossbar and top-right curve, if present.
@@ -359,7 +358,7 @@
       // ┌─╯         ╰─┐
       path.lineTo(tab_right - top_radius, tab_top);
       path.arcTo(top_radius, top_radius, 0, SkPath::kSmall_ArcSize,
-                 SkPath::kCW_Direction, tab_right, tab_top + top_radius);
+                 SkPathDirection::kCW, tab_right, tab_top + top_radius);
     }
 
     if (tab_right != right) {
@@ -372,7 +371,7 @@
       } else {
         path.lineTo(tab_right, tab_bottom - bottom_radius);
         path.arcTo(bottom_radius, bottom_radius, 0, SkPath::kSmall_ArcSize,
-                   SkPath::kCCW_Direction, tab_right + bottom_radius,
+                   SkPathDirection::kCCW, tab_right + bottom_radius,
                    tab_bottom);
       }
       if (tab_bottom != extended_bottom)
diff --git a/chrome/browser/ui/webui/discards/discards.mojom b/chrome/browser/ui/webui/discards/discards.mojom
index ca07b07..83b9f0c 100644
--- a/chrome/browser/ui/webui/discards/discards.mojom
+++ b/chrome/browser/ui/webui/discards/discards.mojom
@@ -180,7 +180,7 @@
   Discard(bool urgent) => ();
 };
 
-// Represents the momentary state of a Page CU.
+// Represents the momentary state of a Page node.
 struct PageInfo {
   int64 id;
 
@@ -189,7 +189,7 @@
   // TODO(siggi): Estimate data.
 };
 
-// Represents the momentary state of a Frame CU.
+// Represents the momentary state of a Frame node.
 struct FrameInfo {
   int64 id;
 
@@ -199,7 +199,7 @@
   int64 process_id;
 };
 
-// Represents the momentary state of a Process CU.
+// Represents the momentary state of a Process node.
 struct ProcessInfo {
   int64 id;
 
@@ -208,6 +208,18 @@
   uint64 private_footprint_kb;
 };
 
+// Represents the momentary state of a Worker node.
+struct WorkerInfo {
+  int64 id;
+
+  url.mojom.Url url;
+  int64 process_id;
+
+  array<int64> client_frame_ids;
+  array<int64> client_worker_ids;
+  array<int64> child_worker_ids;
+};
+
 // Used to transport favicon data.
 struct FavIconInfo {
   int64 node_id;
@@ -226,6 +238,8 @@
   PageCreated(PageInfo pages);
   // The |process| was created.
   ProcessCreated(ProcessInfo process);
+  // The |worker| was created.
+  WorkerCreated(WorkerInfo worker);
 
   // The |frame| changed.
   FrameChanged(FrameInfo frame);
@@ -233,6 +247,8 @@
   PageChanged(PageInfo page);
   // The |process| changed.
   ProcessChanged(ProcessInfo process);
+  // The |worker| was changed.
+  WorkerChanged(WorkerInfo worker);
 
   // A |favicon| became available, whether because the associated page changed
   // its favicon, or because an initial lookup completed.
diff --git a/chrome/browser/ui/webui/discards/graph_dump_impl.cc b/chrome/browser/ui/webui/discards/graph_dump_impl.cc
index 03b4ed2..c48f8739 100644
--- a/chrome/browser/ui/webui/discards/graph_dump_impl.cc
+++ b/chrome/browser/ui/webui/discards/graph_dump_impl.cc
@@ -182,10 +182,16 @@
     }
   }
 
+  for (const performance_manager::WorkerNode* worker_node :
+       graph_->GetAllWorkerNodes()) {
+    SendWorkerNotification(worker_node, true);
+  }
+
   // Subscribe to subsequent notifications.
   graph_->AddFrameNodeObserver(this);
   graph_->AddPageNodeObserver(this);
   graph_->AddProcessNodeObserver(this);
+  graph_->AddWorkerNodeObserver(this);
 }
 
 void DiscardsGraphDumpImpl::OnPassedToGraph(performance_manager::Graph* graph) {
@@ -201,6 +207,7 @@
     graph_->RemoveFrameNodeObserver(this);
     graph_->RemovePageNodeObserver(this);
     graph_->RemoveProcessNodeObserver(this);
+    graph_->RemoveWorkerNodeObserver(this);
   }
 
   change_subscriber_.reset();
@@ -270,6 +277,40 @@
   SendDeletionNotification(process_node);
 }
 
+void DiscardsGraphDumpImpl::OnWorkerNodeAdded(
+    const performance_manager::WorkerNode* worker_node) {
+  SendWorkerNotification(worker_node, true);
+}
+
+void DiscardsGraphDumpImpl::OnBeforeWorkerNodeRemoved(
+    const performance_manager::WorkerNode* worker_node) {
+  SendDeletionNotification(worker_node);
+}
+
+void DiscardsGraphDumpImpl::OnClientFrameAdded(
+    const performance_manager::WorkerNode* worker_node,
+    const performance_manager::FrameNode* client_frame_node) {
+  SendWorkerNotification(worker_node, false);
+}
+
+void DiscardsGraphDumpImpl::OnBeforeClientFrameRemoved(
+    const performance_manager::WorkerNode* worker_node,
+    const performance_manager::FrameNode* client_frame_node) {
+  SendWorkerNotification(worker_node, false);
+}
+
+void DiscardsGraphDumpImpl::OnClientWorkerAdded(
+    const performance_manager::WorkerNode* worker_node,
+    const performance_manager::WorkerNode* client_worker_node) {
+  SendWorkerNotification(worker_node, false);
+}
+
+void DiscardsGraphDumpImpl::OnBeforeClientWorkerRemoved(
+    const performance_manager::WorkerNode* worker_node,
+    const performance_manager::WorkerNode* client_worker_node) {
+  SendWorkerNotification(worker_node, false);
+}
+
 DiscardsGraphDumpImpl::FaviconRequestHelper*
 DiscardsGraphDumpImpl::EnsureFaviconRequestHelper() {
   if (!favicon_request_helper_) {
@@ -311,7 +352,7 @@
     const performance_manager::FrameNode* frame,
     bool created) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
-  // TODO(https://crbug.com/961785): Add more frame properties.
+  // TODO(https://crbug.com/1028117): Add more frame properties.
   discards::mojom::FrameInfoPtr frame_info = discards::mojom::FrameInfo::New();
 
   frame_info->id = GetSerializationId(frame);
@@ -337,7 +378,7 @@
     const performance_manager::PageNode* page_node,
     bool created) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
-  // TODO(https://crbug.com/961785): Add more page_node properties.
+  // TODO(https://crbug.com/1028117): Add more page_node properties.
   discards::mojom::PageInfoPtr page_info = discards::mojom::PageInfo::New();
 
   page_info->id = GetSerializationId(page_node);
@@ -351,7 +392,7 @@
 void DiscardsGraphDumpImpl::SendProcessNotification(
     const performance_manager::ProcessNode* process,
     bool created) {
-  // TODO(https://crbug.com/961785): Add more process properties.
+  // TODO(https://crbug.com/1028117): Add more process properties.
   discards::mojom::ProcessInfoPtr process_info =
       discards::mojom::ProcessInfo::New();
 
@@ -366,6 +407,36 @@
     change_subscriber_->ProcessChanged(std::move(process_info));
 }
 
+void DiscardsGraphDumpImpl::SendWorkerNotification(
+    const performance_manager::WorkerNode* worker,
+    bool created) {
+  // TODO(https://crbug.com/1028117): Add more process properties.
+  discards::mojom::WorkerInfoPtr worker_info =
+      discards::mojom::WorkerInfo::New();
+
+  worker_info->id = GetSerializationId(worker);
+  worker_info->url = worker->GetURL();
+  worker_info->process_id = GetSerializationId(worker->GetProcessNode());
+
+  for (const performance_manager::FrameNode* client_frame :
+       worker->GetClientFrames()) {
+    worker_info->client_frame_ids.push_back(GetSerializationId(client_frame));
+  }
+  for (const performance_manager::WorkerNode* client_worker :
+       worker->GetClientWorkers()) {
+    worker_info->client_worker_ids.push_back(GetSerializationId(client_worker));
+  }
+  for (const performance_manager::WorkerNode* child_worker :
+       worker->GetChildWorkers()) {
+    worker_info->child_worker_ids.push_back(GetSerializationId(child_worker));
+  }
+
+  if (created)
+    change_subscriber_->WorkerCreated(std::move(worker_info));
+  else
+    change_subscriber_->WorkerChanged(std::move(worker_info));
+}
+
 void DiscardsGraphDumpImpl::SendDeletionNotification(
     const performance_manager::Node* node) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
diff --git a/chrome/browser/ui/webui/discards/graph_dump_impl.h b/chrome/browser/ui/webui/discards/graph_dump_impl.h
index a0ce103..f52c963 100644
--- a/chrome/browser/ui/webui/discards/graph_dump_impl.h
+++ b/chrome/browser/ui/webui/discards/graph_dump_impl.h
@@ -15,6 +15,7 @@
 #include "components/performance_manager/public/graph/graph.h"
 #include "components/performance_manager/public/graph/page_node.h"
 #include "components/performance_manager/public/graph/process_node.h"
+#include "components/performance_manager/public/graph/worker_node.h"
 #include "mojo/public/cpp/bindings/pending_receiver.h"
 #include "mojo/public/cpp/bindings/pending_remote.h"
 #include "mojo/public/cpp/bindings/receiver.h"
@@ -25,7 +26,8 @@
                               public performance_manager::GraphOwned,
                               public performance_manager::FrameNodeObserver,
                               public performance_manager::PageNodeObserver,
-                              public performance_manager::ProcessNodeObserver {
+                              public performance_manager::ProcessNodeObserver,
+                              public performance_manager::WorkerNodeObserver {
  public:
   DiscardsGraphDumpImpl();
   ~DiscardsGraphDumpImpl() override;
@@ -143,6 +145,24 @@
   void OnPriorityChanged(const performance_manager::ProcessNode* process_node,
                          base::TaskPriority previous_value) override {}
 
+  // performance_manager::WorkerNodeObserver implementation:
+  void OnWorkerNodeAdded(
+      const performance_manager::WorkerNode* worker_node) override;
+  void OnBeforeWorkerNodeRemoved(
+      const performance_manager::WorkerNode* worker_node) override;
+  void OnClientFrameAdded(
+      const performance_manager::WorkerNode* worker_node,
+      const performance_manager::FrameNode* client_frame_node) override;
+  void OnBeforeClientFrameRemoved(
+      const performance_manager::WorkerNode* worker_node,
+      const performance_manager::FrameNode* client_frame_node) override;
+  void OnClientWorkerAdded(
+      const performance_manager::WorkerNode* worker_node,
+      const performance_manager::WorkerNode* client_worker_node) override;
+  void OnBeforeClientWorkerRemoved(
+      const performance_manager::WorkerNode* worker_node,
+      const performance_manager::WorkerNode* client_worker_node) override;
+
  private:
   // The favicon requests happen on the UI thread. This helper class
   // maintains the state required to do that.
@@ -160,6 +180,8 @@
                             bool created);
   void SendProcessNotification(const performance_manager::ProcessNode* process,
                                bool created);
+  void SendWorkerNotification(const performance_manager::WorkerNode* worker,
+                              bool created);
   void SendDeletionNotification(const performance_manager::Node* node);
   void SendFaviconNotification(
       int64_t serialization_id,
diff --git a/chrome/browser/ui/webui/discards/graph_dump_impl_unittest.cc b/chrome/browser/ui/webui/discards/graph_dump_impl_unittest.cc
index 8cdbbdd..572f7f9 100644
--- a/chrome/browser/ui/webui/discards/graph_dump_impl_unittest.cc
+++ b/chrome/browser/ui/webui/discards/graph_dump_impl_unittest.cc
@@ -31,6 +31,7 @@
   using FrameMap = std::map<int64_t, discards::mojom::FrameInfoPtr>;
   using PageMap = std::map<int64_t, discards::mojom::PageInfoPtr>;
   using ProcessMap = std::map<int64_t, discards::mojom::ProcessInfoPtr>;
+  using WorkerMap = std::map<int64_t, discards::mojom::WorkerInfoPtr>;
   using IdSet = std::set<int64_t>;
 
   TestChangeStream() {}
@@ -67,6 +68,12 @@
     process_map_.insert(std::make_pair(process->id, std::move(process)));
   }
 
+  void WorkerCreated(discards::mojom::WorkerInfoPtr worker) override {
+    EXPECT_FALSE(HasId(worker->id));
+    id_set_.insert(worker->id);
+    worker_map_.insert(std::make_pair(worker->id, std::move(worker)));
+  }
+
   void FrameChanged(discards::mojom::FrameInfoPtr frame) override {
     EXPECT_TRUE(HasId(frame->id));
     frame_map_[frame->id] = std::move(frame);
@@ -85,6 +92,12 @@
     ++num_changes_;
   }
 
+  void WorkerChanged(discards::mojom::WorkerInfoPtr worker) override {
+    EXPECT_TRUE(HasId(worker->id));
+    worker_map_[worker->id] = std::move(worker);
+    ++num_changes_;
+  }
+
   void FavIconDataAvailable(discards::mojom::FavIconInfoPtr favicon) override {}
 
   void NodeDeleted(int64_t node_id) override {
@@ -98,6 +111,7 @@
   const FrameMap& frame_map() const { return frame_map_; }
   const PageMap& page_map() const { return page_map_; }
   const ProcessMap& process_map() const { return process_map_; }
+  const WorkerMap& worker_map() const { return worker_map_; }
   const IdSet& id_set() const { return id_set_; }
   size_t num_changes() const { return num_changes_; }
 
@@ -108,6 +122,7 @@
   FrameMap frame_map_;
   PageMap page_map_;
   ProcessMap process_map_;
+  WorkerMap worker_map_;
   IdSet id_set_;
   size_t num_changes_ = 0;
 
@@ -125,10 +140,18 @@
 }  // namespace
 
 TEST_F(DiscardsGraphDumpImplTest, ChangeStream) {
+  using performance_manager::TestNodeWrapper;
+  using performance_manager::WorkerNodeImpl;
   content::BrowserTaskEnvironment task_environment;
 
   performance_manager::MockMultiplePagesWithMultipleProcessesGraph mock_graph(
       &graph_);
+  TestNodeWrapper<WorkerNodeImpl> worker(
+      TestNodeWrapper<WorkerNodeImpl>::Create(
+          &graph_, performance_manager::WorkerNode::WorkerType::kDedicated,
+          mock_graph.process.get()));
+
+  worker->AddClientFrame(mock_graph.frame.get());
 
   base::TimeTicks now = base::TimeTicks::Now();
 
@@ -157,7 +180,7 @@
 
   // Validate that the initial graph state dump is complete.
   EXPECT_EQ(0u, change_stream.num_changes());
-  EXPECT_EQ(7u, change_stream.id_set().size());
+  EXPECT_EQ(8u, change_stream.id_set().size());
 
   EXPECT_EQ(2u, change_stream.process_map().size());
   for (const auto& kv : change_stream.process_map()) {
@@ -165,6 +188,7 @@
   }
 
   EXPECT_EQ(3u, change_stream.frame_map().size());
+  EXPECT_EQ(1u, change_stream.worker_map().size());
 
   // Count the top-level frames as we go.
   size_t top_level_frames = 0;
@@ -221,4 +245,6 @@
   task_environment.RunUntilIdle();
 
   EXPECT_EQ(nullptr, graph_.TakeFromGraph(impl_raw));
+
+  worker->RemoveClientFrame(mock_graph.frame.get());
 }
diff --git a/chrome/browser/ui/webui/tab_strip/tab_strip_ui.cc b/chrome/browser/ui/webui/tab_strip/tab_strip_ui.cc
index f6a149c..5a2be249 100644
--- a/chrome/browser/ui/webui/tab_strip/tab_strip_ui.cc
+++ b/chrome/browser/ui/webui/tab_strip/tab_strip_ui.cc
@@ -197,6 +197,12 @@
     FireWebUIListener("layout-changed", embedder_->GetLayout().AsDictionary());
   }
 
+  void NotifyReceivedKeyboardFocus() {
+    if (!IsJavascriptAllowed())
+      return;
+    FireWebUIListener("received-keyboard-focus");
+  }
+
   // TabStripModelObserver:
   void OnTabStripModelChanged(
       TabStripModel* tab_strip_model,
@@ -575,3 +581,7 @@
 void TabStripUI::LayoutChanged() {
   handler_->NotifyLayoutChanged();
 }
+
+void TabStripUI::ReceivedKeyboardFocus() {
+  handler_->NotifyReceivedKeyboardFocus();
+}
diff --git a/chrome/browser/ui/webui/tab_strip/tab_strip_ui.h b/chrome/browser/ui/webui/tab_strip/tab_strip_ui.h
index b1255fb..f153e1091 100644
--- a/chrome/browser/ui/webui/tab_strip/tab_strip_ui.h
+++ b/chrome/browser/ui/webui/tab_strip/tab_strip_ui.h
@@ -58,6 +58,9 @@
   // Embedder::GetLayout() changes.
   void LayoutChanged();
 
+  // The embedder should call this whenever the tab strip gains keyboard focus.
+  void ReceivedKeyboardFocus();
+
  private:
   void HandleThumbnailUpdate(int extension_tab_id,
                              ThumbnailTracker::CompressedThumbnailData image);
diff --git a/chrome/chrome_cleaner/engines/broker/cleaner_sandbox_interface_unittest.cc b/chrome/chrome_cleaner/engines/broker/cleaner_sandbox_interface_unittest.cc
index 494d513..0ce9593 100644
--- a/chrome/chrome_cleaner/engines/broker/cleaner_sandbox_interface_unittest.cc
+++ b/chrome/chrome_cleaner/engines/broker/cleaner_sandbox_interface_unittest.cc
@@ -801,8 +801,7 @@
   EXPECT_FALSE(chrome_cleaner::DoesServiceExist(service_handle.service_name()));
 }
 
-// Disabled: https://crbug.com/956016
-TEST(CleanerSandboxInterface, DISABLED_DeleteService_HandleHeld) {
+TEST(CleanerSandboxInterface, DeleteService_HandleHeld) {
   ASSERT_TRUE(chrome_cleaner::EnsureNoTestServicesRunning());
 
   chrome_cleaner::TestScopedServiceHandle service_handle;
diff --git a/chrome/installer/setup/setup_main.cc b/chrome/installer/setup/setup_main.cc
index f282194..0336b3a3 100644
--- a/chrome/installer/setup/setup_main.cc
+++ b/chrome/installer/setup/setup_main.cc
@@ -23,6 +23,7 @@
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
 #include "base/files/scoped_temp_dir.h"
+#include "base/metrics/histogram_functions.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/metrics/persistent_histogram_storage.h"
 #include "base/numerics/safe_conversions.h"
@@ -31,6 +32,7 @@
 #include "base/process/launch.h"
 #include "base/process/memory.h"
 #include "base/process/process.h"
+#include "base/process/process_metrics.h"
 #include "base/stl_util.h"
 #include "base/strings/string16.h"
 #include "base/strings/string_number_conversions.h"
@@ -1451,6 +1453,12 @@
                             base::saturated_cast<base::HistogramBase::Sample>(
                                 pmc.PeakWorkingSetSize / 1024));
   }
+  auto process_metrics = base::ProcessMetrics::CreateCurrentProcessMetrics();
+  auto disk_usage = process_metrics->GetCumulativeDiskUsageInBytes();
+  base::UmaHistogramMemoryMB(
+      "Setup.Install.CumulativeDiskUsage",
+      base::saturated_cast<int>(base::ClampAdd(disk_usage, 1024 * 1024 / 2) /
+                                1024 * 1024));
 
   int return_code = 0;
   // MSI demands that custom actions always return 0 (ERROR_SUCCESS) or it will
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn
index 8f9cadc..39537312 100644
--- a/chrome/test/BUILD.gn
+++ b/chrome/test/BUILD.gn
@@ -4381,6 +4381,7 @@
       "../browser/extensions/extension_api_unittest.h",
       "../browser/extensions/extension_context_menu_model_unittest.cc",
       "../browser/extensions/extension_error_controller_unittest.cc",
+      "../browser/extensions/extension_error_ui_default_unittest.cc",
       "../browser/extensions/extension_function_test_utils.cc",
       "../browser/extensions/extension_function_test_utils.h",
       "../browser/extensions/extension_garbage_collector_chromeos_unittest.cc",
diff --git a/chrome/test/android/BUILD.gn b/chrome/test/android/BUILD.gn
index da99512..6b5a7eaf 100644
--- a/chrome/test/android/BUILD.gn
+++ b/chrome/test/android/BUILD.gn
@@ -110,6 +110,9 @@
 android_library("chrome_java_test_support") {
   testonly = true
   java_files = [
+    "javatests/src/org/chromium/chrome/browser/history/HistoryTestUtils.java",
+    "javatests/src/org/chromium/chrome/browser/history/StubbedHistoryProvider.java",
+    "javatests/src/org/chromium/chrome/browser/history/TestBrowsingHistoryObserver.java",
     "javatests/src/org/chromium/chrome/browser/omnibox/suggestions/AutocompleteCoordinatorTestUtils.java",
     "javatests/src/org/chromium/chrome/browser/tab/MockTab.java",
     "javatests/src/org/chromium/chrome/browser/tab/TabTestUtils.java",
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/history/HistoryTestUtils.java b/chrome/test/android/javatests/src/org/chromium/chrome/browser/history/HistoryTestUtils.java
similarity index 100%
rename from chrome/android/javatests/src/org/chromium/chrome/browser/history/HistoryTestUtils.java
rename to chrome/test/android/javatests/src/org/chromium/chrome/browser/history/HistoryTestUtils.java
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/history/StubbedHistoryProvider.java b/chrome/test/android/javatests/src/org/chromium/chrome/browser/history/StubbedHistoryProvider.java
similarity index 99%
rename from chrome/android/javatests/src/org/chromium/chrome/browser/history/StubbedHistoryProvider.java
rename to chrome/test/android/javatests/src/org/chromium/chrome/browser/history/StubbedHistoryProvider.java
index 0b027f7..537a5e2b 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/history/StubbedHistoryProvider.java
+++ b/chrome/test/android/javatests/src/org/chromium/chrome/browser/history/StubbedHistoryProvider.java
@@ -131,5 +131,4 @@
             return null;
         }
     }
-
 }
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/history/TestBrowsingHistoryObserver.java b/chrome/test/android/javatests/src/org/chromium/chrome/browser/history/TestBrowsingHistoryObserver.java
similarity index 100%
rename from chrome/android/javatests/src/org/chromium/chrome/browser/history/TestBrowsingHistoryObserver.java
rename to chrome/test/android/javatests/src/org/chromium/chrome/browser/history/TestBrowsingHistoryObserver.java
diff --git a/chrome/test/data/webui/history/history_browsertest.js b/chrome/test/data/webui/history/history_browsertest.js
index b30bedc..9a544d32 100644
--- a/chrome/test/data/webui/history/history_browsertest.js
+++ b/chrome/test/data/webui/history/history_browsertest.js
@@ -210,7 +210,13 @@
   ]),
 };
 
-TEST_F('HistorySupervisedUserTest', 'All', function() {
+GEN('#if defined(OS_MACOSX)');
+GEN('#define MAYBE_AllTest DISABLED_AllTest');
+GEN('#else');
+GEN('#define MAYBE_AllTest AllTest');
+GEN('#endif');
+
+TEST_F('HistorySupervisedUserTest', 'MAYBE_AllTest', function() {
   mocha.run();
 });
 
diff --git a/chrome/test/data/webui/tab_strip/tab_list_test.js b/chrome/test/data/webui/tab_strip/tab_list_test.js
index ddc3abf..3e914501 100644
--- a/chrome/test/data/webui/tab_strip/tab_list_test.js
+++ b/chrome/test/data/webui/tab_strip/tab_list_test.js
@@ -5,6 +5,7 @@
 import 'chrome://tab-strip/tab_list.js';
 
 import {webUIListenerCallback} from 'chrome://resources/js/cr.m.js';
+import {FocusOutlineManager} from 'chrome://resources/js/cr/ui/focus_outline_manager.m.js';
 import {TabStripEmbedderProxy} from 'chrome://tab-strip/tab_strip_embedder_proxy.js';
 import {TabsApiProxy} from 'chrome://tab-strip/tabs_api_proxy.js';
 
@@ -513,16 +514,23 @@
   });
 
   test(
-      'focusing and blurring the window focuses and blurs the first tab',
+      'focusing on tab strip with the keyboard adds a class and focuses ' +
+          'the first tab',
       () => {
-        window.dispatchEvent(new Event('focus'));
+        webUIListenerCallback('received-keyboard-focus');
         assertEquals(document.activeElement, tabList);
         assertEquals(tabList.shadowRoot.activeElement, getUnpinnedTabs()[0]);
-
-        window.dispatchEvent(new Event('blur'));
-        assertEquals(tabList.shadowRoot.activeElement, null);
+        assertTrue(FocusOutlineManager.forDocument(document).visible);
       });
 
+  test('blurring the tab strip blurs the active element', () => {
+    // First, make sure tab strip has keyboard focus.
+    webUIListenerCallback('received-keyboard-focus');
+
+    window.dispatchEvent(new Event('blur'));
+    assertEquals(tabList.shadowRoot.activeElement, null);
+  });
+
   test('should update the ID when a tab is replaced', () => {
     assertEquals(getUnpinnedTabs()[0].tab.id, 0);
     webUIListenerCallback('tab-replaced', tabs[0].id, 1000);
diff --git a/chromecast/media/cma/backend/mixer/mixer_input_connection.cc b/chromecast/media/cma/backend/mixer/mixer_input_connection.cc
index 5752f3e..9d81af6 100644
--- a/chromecast/media/cma/backend/mixer/mixer_input_connection.cc
+++ b/chromecast/media/cma/backend/mixer/mixer_input_connection.cc
@@ -203,6 +203,8 @@
   pcm_completion_task_ =
       base::BindRepeating(&MixerInputConnection::PostPcmCompletion, weak_this_);
   eos_task_ = base::BindRepeating(&MixerInputConnection::PostEos, weak_this_);
+  ready_for_playback_task_ = base::BindRepeating(
+      &MixerInputConnection::PostAudioReadyForPlayback, weak_this_);
 
   CreateBufferPool(fill_size_);
   mixer_->AddInput(this);
@@ -523,7 +525,9 @@
   if (frames == 0) {
     LOG(INFO) << "End of stream for " << this;
     state_ = State::kGotEos;
-    ready_for_playback_ = true;
+    if (!started_) {
+      io_task_runner_->PostTask(FROM_HERE, ready_for_playback_task_);
+    }
   } else if (started_ ||
              GetTimestamp(data.get()) +
                      SamplesToMicroseconds(frames, input_samples_per_second_) >=
@@ -531,9 +535,9 @@
     queued_frames_ += frames;
     queue_.push_back(std::move(data));
 
-    if (!ready_for_playback_ && queued_frames_ >= start_threshold_frames_ &&
+    if (!started_ && queued_frames_ >= start_threshold_frames_ &&
         mixer_rendering_delay_.timestamp_microseconds != INT64_MIN) {
-      ready_for_playback_ = true;
+      io_task_runner_->PostTask(FROM_HERE, ready_for_playback_task_);
     }
   }
   // Otherwise, drop |data| since it is before the start PTS.
@@ -907,25 +911,12 @@
 
 void MixerInputConnection::PostPcmCompletion() {
   DCHECK(io_task_runner_->RunsTasksInCurrentSequence());
-  bool send_ready_for_playback = false;
-  int64_t mixer_delay = 0;
 
   mixer_service::Generic message;
   auto* push_result = message.mutable_push_result();
   {
     base::AutoLock lock(lock_);
     push_result->set_next_playback_timestamp(next_playback_timestamp_);
-    if (!audio_ready_for_playback_fired_ && ready_for_playback_) {
-      send_ready_for_playback = true;
-      mixer_delay = mixer_rendering_delay_.delay_microseconds;
-    }
-  }
-
-  if (send_ready_for_playback) {
-    LOG(INFO) << this << " ready for playback";
-    audio_ready_for_playback_fired_ = true;
-    auto* ready_for_playback = message.mutable_ready_for_playback();
-    ready_for_playback->set_delay_microseconds(mixer_delay);
   }
   socket_->SendProto(message);
 }
@@ -937,6 +928,25 @@
   socket_->SendProto(message);
 }
 
+void MixerInputConnection::PostAudioReadyForPlayback() {
+  DCHECK(io_task_runner_->RunsTasksInCurrentSequence());
+
+  if (audio_ready_for_playback_fired_) {
+    return;
+  }
+  LOG(INFO) << this << " ready for playback";
+
+  mixer_service::Generic message;
+  auto* ready_for_playback = message.mutable_ready_for_playback();
+  {
+    base::AutoLock lock(lock_);
+    ready_for_playback->set_delay_microseconds(
+        mixer_rendering_delay_.delay_microseconds);
+  }
+  socket_->SendProto(message);
+  audio_ready_for_playback_fired_ = true;
+}
+
 void MixerInputConnection::OnAudioPlaybackError(MixerError error) {
   if (error == MixerError::kInputIgnored) {
     LOG(INFO) << "Mixer input " << this
diff --git a/chromecast/media/cma/backend/mixer/mixer_input_connection.h b/chromecast/media/cma/backend/mixer/mixer_input_connection.h
index 483c5bb..6867725 100644
--- a/chromecast/media/cma/backend/mixer/mixer_input_connection.h
+++ b/chromecast/media/cma/backend/mixer/mixer_input_connection.h
@@ -125,6 +125,7 @@
   void PostPcmCompletion();
   void PostEos();
   void PostError(MixerError error);
+  void PostAudioReadyForPlayback();
   void DropAudio(int64_t frames) EXCLUSIVE_LOCKS_REQUIRED(lock_);
   void CheckAndStartPlaybackIfNecessary(int num_frames,
                                         int64_t playback_absolute_timestamp)
@@ -172,7 +173,6 @@
   AudioFader fader_ GUARDED_BY(lock_);
   bool zero_fader_frames_ GUARDED_BY(lock_) = false;
   bool started_ GUARDED_BY(lock_) = false;
-  bool ready_for_playback_ GUARDED_BY(lock_) = false;
   double playback_rate_ GUARDED_BY(lock_) = 1.0;
   bool use_start_timestamp_ GUARDED_BY(lock_) = false;
   // The absolute timestamp relative to clock monotonic (raw) at which the
@@ -196,6 +196,7 @@
 
   base::RepeatingClosure pcm_completion_task_;
   base::RepeatingClosure eos_task_;
+  base::RepeatingClosure ready_for_playback_task_;
 
   base::WeakPtr<MixerInputConnection> weak_this_;
   base::WeakPtrFactory<MixerInputConnection> weak_factory_;
diff --git a/chromeos/components/proximity_auth/BUILD.gn b/chromeos/components/proximity_auth/BUILD.gn
index 01f7efd..b60ec24 100644
--- a/chromeos/components/proximity_auth/BUILD.gn
+++ b/chromeos/components/proximity_auth/BUILD.gn
@@ -14,7 +14,6 @@
     "messenger_observer.h",
     "metrics.cc",
     "metrics.h",
-    "notification_controller.h",
     "proximity_auth_client.h",
     "proximity_auth_local_state_pref_manager.cc",
     "proximity_auth_local_state_pref_manager.h",
@@ -42,8 +41,6 @@
     "screenlock_state.h",
     "smart_lock_metrics_recorder.cc",
     "smart_lock_metrics_recorder.h",
-    "switches.cc",
-    "switches.h",
     "unlock_manager.h",
     "unlock_manager_impl.cc",
     "unlock_manager_impl.h",
diff --git a/chromeos/components/proximity_auth/notification_controller.h b/chromeos/components/proximity_auth/notification_controller.h
deleted file mode 100644
index 60a014ce..0000000
--- a/chromeos/components/proximity_auth/notification_controller.h
+++ /dev/null
@@ -1,33 +0,0 @@
-// Copyright 2017 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROMEOS_COMPONENTS_PROXIMITY_AUTH_NOTIFICATION_CONTROLLER_H_
-#define CHROMEOS_COMPONENTS_PROXIMITY_AUTH_NOTIFICATION_CONTROLLER_H_
-
-#include <string>
-
-namespace proximity_auth {
-
-// Responsible for displaying all notifications for EasyUnlock.
-class NotificationController {
- public:
-  NotificationController() {}
-  virtual ~NotificationController() {}
-
-  // Shows the notification when EasyUnlock is synced to a new Chromebook.
-  virtual void ShowChromebookAddedNotification() = 0;
-
-  // Shows the notification when EasyUnlock is already enabled on a Chromebook,
-  // but a different phone is synced as the unlock key.
-  virtual void ShowPairingChangeNotification() = 0;
-
-  // Shows the notification after password reauth confirming that the new phone
-  // should be used for EasyUnlock from now on.
-  virtual void ShowPairingChangeAppliedNotification(
-      const std::string& phone_name) = 0;
-};
-
-}  // namespace proximity_auth
-
-#endif  // CHROMEOS_COMPONENTS_PROXIMITY_AUTH_NOTIFICATION_CONTROLLER_H_
diff --git a/chromeos/components/proximity_auth/proximity_auth_system.cc b/chromeos/components/proximity_auth/proximity_auth_system.cc
index f13d75e1..515c6ac4 100644
--- a/chromeos/components/proximity_auth/proximity_auth_system.cc
+++ b/chromeos/components/proximity_auth/proximity_auth_system.cc
@@ -83,8 +83,7 @@
   return remote_devices_map_.at(account_id);
 }
 
-void ProximityAuthSystem::OnAuthAttempted(const AccountId& /* account_id */) {
-  // TODO(tengs): There is no reason to pass the |account_id| argument anymore.
+void ProximityAuthSystem::OnAuthAttempted() {
   unlock_manager_->OnAuthAttempted(mojom::AuthType::USER_CLICK);
 }
 
diff --git a/chromeos/components/proximity_auth/proximity_auth_system.h b/chromeos/components/proximity_auth/proximity_auth_system.h
index 0ea39c65..a67b0ded 100644
--- a/chromeos/components/proximity_auth/proximity_auth_system.h
+++ b/chromeos/components/proximity_auth/proximity_auth_system.h
@@ -63,7 +63,7 @@
       const AccountId& account_id) const;
 
   // Called when the user clicks the user pod and attempts to unlock/sign-in.
-  void OnAuthAttempted(const AccountId& account_id);
+  void OnAuthAttempted();
 
   // Called when the system suspends.
   void OnSuspend();
diff --git a/chromeos/components/proximity_auth/proximity_auth_system_unittest.cc b/chromeos/components/proximity_auth/proximity_auth_system_unittest.cc
index 2792bc2..ba62eb0 100644
--- a/chromeos/components/proximity_auth/proximity_auth_system_unittest.cc
+++ b/chromeos/components/proximity_auth/proximity_auth_system_unittest.cc
@@ -16,7 +16,6 @@
 #include "chromeos/components/proximity_auth/fake_remote_device_life_cycle.h"
 #include "chromeos/components/proximity_auth/mock_proximity_auth_client.h"
 #include "chromeos/components/proximity_auth/proximity_auth_profile_pref_manager.h"
-#include "chromeos/components/proximity_auth/switches.h"
 #include "chromeos/components/proximity_auth/unlock_manager.h"
 #include "chromeos/constants/chromeos_features.h"
 #include "chromeos/services/multidevice_setup/public/cpp/fake_multidevice_setup_client.h"
@@ -397,7 +396,7 @@
 TEST_F(ProximityAuthSystemTest, OnAuthAttempted) {
   FocusUser(kUser1);
   EXPECT_CALL(*unlock_manager_, OnAuthAttempted(_));
-  proximity_auth_system_->OnAuthAttempted(AccountId::FromUserEmail(kUser1));
+  proximity_auth_system_->OnAuthAttempted();
 }
 
 TEST_F(ProximityAuthSystemTest, Suspend_ScreenUnlocked) {
diff --git a/chromeos/components/proximity_auth/switches.cc b/chromeos/components/proximity_auth/switches.cc
deleted file mode 100644
index 681bcd5..0000000
--- a/chromeos/components/proximity_auth/switches.cc
+++ /dev/null
@@ -1,16 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chromeos/components/proximity_auth/switches.h"
-
-namespace proximity_auth {
-namespace switches {
-
-// Force easy unlock app loading in test.
-// TODO(xiyuan): Remove this when app could be bundled with Chrome.
-const char kForceLoadEasyUnlockAppInTests[] =
-    "force-load-easy-unlock-app-in-tests";
-
-}  // namespace switches
-}  // namespace proximity_auth
diff --git a/chromeos/components/proximity_auth/switches.h b/chromeos/components/proximity_auth/switches.h
deleted file mode 100644
index 7c68842..0000000
--- a/chromeos/components/proximity_auth/switches.h
+++ /dev/null
@@ -1,16 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CHROMEOS_COMPONENTS_PROXIMITY_AUTH_SWITCHES_H_
-#define CHROMEOS_COMPONENTS_PROXIMITY_AUTH_SWITCHES_H_
-
-namespace proximity_auth {
-namespace switches {
-
-extern const char kForceLoadEasyUnlockAppInTests[];
-
-}  // namespace switches
-}  // namespace proximity_auth
-
-#endif  // CHROMEOS_COMPONENTS_PROXIMITY_AUTH_SWITCHES_H_
diff --git a/components/arc/BUILD.gn b/components/arc/BUILD.gn
index bfe53e2..77c91be 100644
--- a/components/arc/BUILD.gn
+++ b/components/arc/BUILD.gn
@@ -222,6 +222,8 @@
     "session/arc_vm_client_adapter.h",
     "session/arc_vm_client_adapter_util.cc",
     "session/arc_vm_client_adapter_util.h",
+    "session/file_system_status.cc",
+    "session/file_system_status.h",
   ]
 
   deps = [
@@ -370,6 +372,7 @@
     "session/arc_session_runner_unittest.cc",
     "session/arc_vm_client_adapter_unittest.cc",
     "session/arc_vm_client_adapter_util_unittest.cc",
+    "session/file_system_status_unittest.cc",
     "timer/arc_timer_bridge_unittest.cc",
     "wake_lock/arc_wake_lock_bridge_unittest.cc",
   ]
diff --git a/components/arc/session/arc_vm_client_adapter.cc b/components/arc/session/arc_vm_client_adapter.cc
index a1959c7..c80712c 100644
--- a/components/arc/session/arc_vm_client_adapter.cc
+++ b/components/arc/session/arc_vm_client_adapter.cc
@@ -4,8 +4,6 @@
 
 #include "components/arc/session/arc_vm_client_adapter.h"
 
-#include <linux/magic.h>
-#include <sys/statvfs.h>
 #include <time.h>
 
 #include <set>
@@ -14,11 +12,9 @@
 #include <vector>
 
 #include "base/bind.h"
-#include "base/containers/span.h"
 #include "base/feature_list.h"
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
-#include "base/json/json_reader.h"
 #include "base/logging.h"
 #include "base/macros.h"
 #include "base/memory/weak_ptr.h"
@@ -31,10 +27,7 @@
 #include "base/system/sys_info.h"
 #include "base/task/post_task.h"
 #include "base/task/task_traits.h"
-#include "base/threading/scoped_blocking_call.h"
 #include "base/time/time.h"
-#include "base/values.h"
-#include "build/build_config.h"
 #include "chromeos/dbus/concierge_client.h"
 #include "chromeos/dbus/dbus_method_call_status.h"
 #include "chromeos/dbus/dbus_thread_manager.h"
@@ -44,185 +37,18 @@
 #include "components/arc/arc_features.h"
 #include "components/arc/arc_util.h"
 #include "components/arc/session/arc_session.h"
-#include "components/arc/session/arc_vm_client_adapter_util.h"
+#include "components/arc/session/file_system_status.h"
 #include "components/version_info/version_info.h"
 
 namespace arc {
 namespace {
 
-constexpr const char kArcVmConfigJsonPath[] = "/usr/share/arcvm/config.json";
 constexpr const char kArcVmServerProxyJobName[] = "arcvm_2dserver_2dproxy";
-constexpr const char kBuiltinPath[] = "/opt/google/vms/android";
 constexpr const char kCrosSystemPath[] = "/usr/bin/crossystem";
-constexpr const char kDlcPath[] = "/run/imageloader/arcvm-dlc/package/root";
-constexpr const char kFstab[] = "fstab";
-constexpr const char kGeneratedPropertyFilesPath[] =
-    "/run/arcvm/host_generated";
 constexpr const char kHomeDirectory[] = "/home";
-constexpr const char kKernel[] = "vmlinux";
-constexpr const char kPropertyFilesPath[] = "/usr/share/arcvm/properties";
-constexpr const char kRootFs[] = "system.raw.img";
-constexpr const char kVendorImage[] = "vendor.raw.img";
 
 constexpr int64_t kInvalidCid = -1;
 
-// A move-only class to hold status of the host file system.
-class FileSystemStatus {
- public:
-  FileSystemStatus(FileSystemStatus&& rhs) = default;
-  ~FileSystemStatus() = default;
-  FileSystemStatus& operator=(FileSystemStatus&& rhs) = default;
-
-  bool is_android_debuggable() const { return is_android_debuggable_; }
-  bool is_host_rootfs_writable() const { return is_host_rootfs_writable_; }
-  bool is_system_image_ext_format() const {
-    return is_system_image_ext_format_;
-  }
-  const base::FilePath& system_image_path() const { return system_image_path_; }
-  const base::FilePath& vendor_image_path() const { return vendor_image_path_; }
-  const base::FilePath& guest_kernel_path() const { return guest_kernel_path_; }
-  const base::FilePath& fstab_path() const { return fstab_path_; }
-  bool property_files_expanded() const { return property_files_expanded_; }
-
-  static FileSystemStatus GetFileSystemStatusBlocking() {
-    return FileSystemStatus();
-  }
-  static bool IsAndroidDebuggableForTesting(const base::FilePath& json_path) {
-    return IsAndroidDebuggable(json_path);
-  }
-  static bool ExpandPropertyFilesForTesting(const base::FilePath& source_path,
-                                            const base::FilePath& dest_path) {
-    return ExpandPropertyFiles(source_path, dest_path);
-  }
-  static bool IsSystemImageExtFormatForTesting(const base::FilePath& path) {
-    return IsSystemImageExtFormat(path);
-  }
-
- private:
-  FileSystemStatus()
-      : is_android_debuggable_(
-            IsAndroidDebuggable(base::FilePath(kArcVmConfigJsonPath))),
-        is_host_rootfs_writable_(IsHostRootfsWritable()),
-        system_image_path_(SelectDlcOrBuiltin(base::FilePath(kRootFs))),
-        vendor_image_path_(SelectDlcOrBuiltin(base::FilePath(kVendorImage))),
-        guest_kernel_path_(SelectDlcOrBuiltin(base::FilePath(kKernel))),
-        fstab_path_(SelectDlcOrBuiltin(base::FilePath(kFstab))),
-        property_files_expanded_(
-            ExpandPropertyFiles(base::FilePath(kPropertyFilesPath),
-                                base::FilePath(kGeneratedPropertyFilesPath))),
-        is_system_image_ext_format_(
-            IsSystemImageExtFormat(system_image_path_)) {}
-
-  // Parse a JSON file which is like the following and returns a result:
-  //   {
-  //     "ANDROID_DEBUGGABLE": false
-  //   }
-  static bool IsAndroidDebuggable(const base::FilePath& json_path) {
-    if (!base::PathExists(json_path))
-      return false;
-
-    std::string content;
-    if (!base::ReadFileToString(json_path, &content))
-      return false;
-
-    base::JSONReader::ValueWithError result(
-        base::JSONReader::ReadAndReturnValueWithError(content,
-                                                      base::JSON_PARSE_RFC));
-    if (!result.value) {
-      LOG(ERROR) << "Error parsing " << json_path
-                 << ": code=" << result.error_code
-                 << ", message=" << result.error_message << ": " << content;
-      return false;
-    }
-    if (!result.value->is_dict()) {
-      LOG(ERROR) << "Error parsing " << json_path << ": " << *(result.value);
-      return false;
-    }
-
-    const base::Value* debuggable = result.value->FindKeyOfType(
-        "ANDROID_DEBUGGABLE", base::Value::Type::BOOLEAN);
-    if (!debuggable) {
-      LOG(ERROR) << "ANDROID_DEBUGGABLE is not found in " << json_path;
-      return false;
-    }
-
-    return debuggable->GetBool();
-  }
-
-  static bool IsHostRootfsWritable() {
-    base::ScopedBlockingCall scoped_blocking_call(
-        FROM_HERE, base::BlockingType::MAY_BLOCK);
-    struct statvfs buf;
-    if (statvfs("/", &buf) < 0) {
-      PLOG(ERROR) << "statvfs() failed";
-      return false;
-    }
-    const bool rw = !(buf.f_flag & ST_RDONLY);
-    VLOG(1) << "Host's rootfs is " << (rw ? "rw" : "ro");
-    return rw;
-  }
-
-  static base::FilePath SelectDlcOrBuiltin(const base::FilePath& file) {
-    const base::FilePath dlc_path = base::FilePath(kDlcPath).Append(file);
-    if (base::PathExists(dlc_path)) {
-      VLOG(1) << "arcvm-dlc will be used for " << file.value();
-      return dlc_path;
-    }
-    return base::FilePath(kBuiltinPath).Append(file);
-  }
-
-  // Copies two prop files in /usr/share/arcvm to /run/arcvm/host_generated with
-  // or without modifications (depending on whether the board is unibuild).
-  // Returns true if the copy is successful.
-  static bool ExpandPropertyFiles(const base::FilePath& source_path,
-                                  const base::FilePath& dest_path) {
-    CrosConfig config;
-    for (const char* file : {"default.prop", "build.prop"}) {
-      if (!ExpandPropertyFile(source_path.Append(file), dest_path.Append(file),
-                              &config)) {
-        LOG(ERROR) << "Failed to expand " << source_path.Append(file);
-        return false;
-      }
-    }
-    return true;
-  }
-
-  // https://ext4.wiki.kernel.org/index.php/Ext4_Disk_Layout
-  // Super block starts from block 0, offset 0x400.
-  // 0x38: Magic signature (Len=16, value=0xEF53) in little-endian order.
-  static bool IsSystemImageExtFormat(const base::FilePath& path) {
-    base::File file(path, base::File::FLAG_OPEN | base::File::FLAG_READ);
-    if (!file.IsValid()) {
-      PLOG(ERROR) << "Cannot open system image file: " << path.value();
-      return false;
-    }
-
-    uint8_t buf[2];
-    if (!file.ReadAndCheck(0x400 + 0x38, base::make_span(buf, sizeof(buf)))) {
-      PLOG(ERROR) << "File read error on system image file: " << path.value();
-      return false;
-    }
-
-    uint16_t magic_le = *reinterpret_cast<uint16_t*>(buf);
-#if defined(ARCH_CPU_LITTLE_ENDIAN)
-    return magic_le == EXT4_SUPER_MAGIC;
-#else
-#error Unsupported platform
-#endif
-  }
-
-  bool is_android_debuggable_;
-  bool is_host_rootfs_writable_;
-  base::FilePath system_image_path_;
-  base::FilePath vendor_image_path_;
-  base::FilePath guest_kernel_path_;
-  base::FilePath fstab_path_;
-  bool property_files_expanded_;
-  bool is_system_image_ext_format_;
-
-  DISALLOW_COPY_AND_ASSIGN(FileSystemStatus);
-};
-
 chromeos::ConciergeClient* GetConciergeClient() {
   return chromeos::DBusThreadManager::Get()->GetConciergeClient();
 }
@@ -736,18 +562,4 @@
   return std::make_unique<ArcVmClientAdapter>(channel);
 }
 
-bool IsAndroidDebuggableForTesting(const base::FilePath& json_path) {
-  return FileSystemStatus::IsAndroidDebuggableForTesting(json_path);
-}
-
-bool ExpandPropertyFilesForTesting(const base::FilePath& source_path,
-                                   const base::FilePath& dest_path) {
-  return FileSystemStatus::ExpandPropertyFilesForTesting(source_path,
-                                                         dest_path);
-}
-
-bool IsSystemImageExtFormatForTesting(const base::FilePath& path) {
-  return FileSystemStatus::IsSystemImageExtFormatForTesting(path);
-}
-
 }  // namespace arc
diff --git a/components/arc/session/arc_vm_client_adapter.h b/components/arc/session/arc_vm_client_adapter.h
index 738a2c89..c8bf869c8 100644
--- a/components/arc/session/arc_vm_client_adapter.h
+++ b/components/arc/session/arc_vm_client_adapter.h
@@ -10,22 +10,12 @@
 #include "components/arc/session/arc_client_adapter.h"
 #include "components/version_info/channel.h"
 
-namespace base {
-class FilePath;
-}  // namespace base
-
 namespace arc {
 
 // Returns an adapter for arcvm.
 std::unique_ptr<ArcClientAdapter> CreateArcVmClientAdapter(
     version_info::Channel channel);
 
-// Function(s) below are for testing.
-bool IsAndroidDebuggableForTesting(const base::FilePath& json_path);
-bool ExpandPropertyFilesForTesting(const base::FilePath& source_path,
-                                   const base::FilePath& dest_path);
-bool IsSystemImageExtFormatForTesting(const base::FilePath& path);
-
 }  // namespace arc
 
 #endif  // COMPONENTS_ARC_SESSION_ARC_VM_CLIENT_ADAPTER_H_
diff --git a/components/arc/session/arc_vm_client_adapter_unittest.cc b/components/arc/session/arc_vm_client_adapter_unittest.cc
index 8519fb6c..15fb5ec 100644
--- a/components/arc/session/arc_vm_client_adapter_unittest.cc
+++ b/components/arc/session/arc_vm_client_adapter_unittest.cc
@@ -622,147 +622,5 @@
   run_loop()->RunUntilIdle();
 }
 
-// Tests if androidboot.debuggable is set properly.
-TEST_F(ArcVmClientAdapterTest, IsAndroidDebuggable) {
-  constexpr const char kAndroidDebuggableTrueJson[] = R"json({
-    "ANDROID_DEBUGGABLE": true
-  })json";
-  constexpr const char kAndroidDebuggableFalseJson[] = R"json({
-    "ANDROID_DEBUGGABLE": false
-  })json";
-  constexpr const char kInvalidTypeJson[] = R"json([
-    42
-  ])json";
-  constexpr const char kInvalidJson[] = R"json({
-    "ANDROID_DEBUGGABLE": true,
-  })json";
-  constexpr const char kKeyNotFoundJson[] = R"json({
-    "BADKEY": "a"
-  })json";
-  constexpr const char kNonBooleanValue[] = R"json({
-    "ANDROID_DEBUGGABLE": "a"
-  })json";
-  constexpr const char kBadKeyType[] = R"json({
-    42: true
-  })json";
-
-  auto test = [](const base::FilePath& dir, const std::string& str) {
-    base::FilePath path;
-    if (!CreateTemporaryFileInDir(dir, &path))
-      return false;
-    base::WriteFile(path, str.data(), str.size());
-    return IsAndroidDebuggableForTesting(path);
-  };
-
-  EXPECT_TRUE(test(GetTempDir(), kAndroidDebuggableTrueJson));
-  EXPECT_FALSE(test(GetTempDir(), kAndroidDebuggableFalseJson));
-  EXPECT_FALSE(test(GetTempDir(), kInvalidTypeJson));
-  EXPECT_FALSE(test(GetTempDir(), kInvalidJson));
-  EXPECT_FALSE(test(GetTempDir(), kKeyNotFoundJson));
-  EXPECT_FALSE(test(GetTempDir(), kNonBooleanValue));
-  EXPECT_FALSE(test(GetTempDir(), kBadKeyType));
-}
-
-// Tests the case where the json file doesn't exist.
-TEST_F(ArcVmClientAdapterTest, IsAndroidDebuggable_NonExistent) {
-  EXPECT_FALSE(
-      IsAndroidDebuggableForTesting(base::FilePath("/nonexistent-path")));
-}
-
-// Tests the case where the json file is not readable.
-TEST_F(ArcVmClientAdapterTest, IsAndroidDebuggable_CannotRead) {
-  constexpr const char kValidJson[] = R"json({
-    "ANDROID_DEBUGGABLE": true
-  })json";
-  base::FilePath path;
-  ASSERT_TRUE(CreateTemporaryFileInDir(GetTempDir(), &path));
-  base::WriteFile(path, kValidJson, strlen(kValidJson));
-  base::SetPosixFilePermissions(path, 0300);  // not readable
-  EXPECT_FALSE(IsAndroidDebuggableForTesting(path));
-}
-
-TEST_F(ArcVmClientAdapterTest, ExpandPropertyFilesForTesting_NoSource) {
-  // Both source and dest are not found.
-  EXPECT_FALSE(ExpandPropertyFilesForTesting(base::FilePath("/nonexistent1"),
-                                             base::FilePath("/nonexistent2")));
-
-  // Both source and dest exist, but the source directory is empty.
-  base::FilePath source_dir;
-  ASSERT_TRUE(base::CreateTemporaryDirInDir(GetTempDir(), "test", &source_dir));
-  base::FilePath dest_dir;
-  ASSERT_TRUE(base::CreateTemporaryDirInDir(GetTempDir(), "test", &dest_dir));
-  EXPECT_FALSE(ExpandPropertyFilesForTesting(source_dir, dest_dir));
-
-  // Add default.prop to the source, but not build.prop.
-  base::FilePath default_prop = source_dir.Append("default.prop");
-  constexpr const char kDefaultProp[] = "ro.foo=bar\n";
-  base::WriteFile(default_prop, kDefaultProp, strlen(kDefaultProp));
-  EXPECT_FALSE(ExpandPropertyFilesForTesting(source_dir, dest_dir));
-
-  // Add build.prop too. Then the call should succeed.
-  base::FilePath build_prop = source_dir.Append("build.prop");
-  constexpr const char kBuildProp[] = "ro.baz=boo\n";
-  base::WriteFile(build_prop, kBuildProp, strlen(kBuildProp));
-  EXPECT_TRUE(ExpandPropertyFilesForTesting(source_dir, dest_dir));
-
-  // Verify two dest files are there.
-  EXPECT_TRUE(base::PathExists(dest_dir.Append("default.prop")));
-  EXPECT_TRUE(base::PathExists(dest_dir.Append("build.prop")));
-
-  // Verify their content.
-  // Note: ExpandPropertyFile() adds a trailing LF.
-  std::string content;
-  EXPECT_TRUE(
-      base::ReadFileToString(dest_dir.Append("default.prop"), &content));
-  EXPECT_EQ(std::string(kDefaultProp) + "\n", content);
-  EXPECT_TRUE(base::ReadFileToString(dest_dir.Append("build.prop"), &content));
-  EXPECT_EQ(std::string(kBuildProp) + "\n", content);
-
-  // Finally, test the case where source is valid but the dest is not.
-  EXPECT_FALSE(ExpandPropertyFilesForTesting(source_dir,
-                                             base::FilePath("/nonexistent")));
-}
-
-TEST_F(ArcVmClientAdapterTest, IsSystemImageExtFormatForTesting_FileMissing) {
-  EXPECT_FALSE(
-      IsSystemImageExtFormatForTesting(base::FilePath("/nonexistent")));
-}
-
-TEST_F(ArcVmClientAdapterTest,
-       IsSystemImageExtFormatForTesting_FileSizeTooSmall) {
-  base::FilePath file;
-  ASSERT_TRUE(base::CreateTemporaryFile(&file));
-  char data[100];
-  memset(data, 0, sizeof(data));
-  base::WriteFile(file, data, sizeof(data));
-
-  EXPECT_FALSE(IsSystemImageExtFormatForTesting(file));
-}
-
-TEST_F(ArcVmClientAdapterTest,
-       IsSystemImageExtFormatForTesting_MagicNumberDoesNotMatch) {
-  base::FilePath file;
-  ASSERT_TRUE(base::CreateTemporaryFile(&file));
-  char data[2048];
-  memset(data, 0, sizeof(data));
-  base::WriteFile(file, data, sizeof(data));
-
-  EXPECT_FALSE(IsSystemImageExtFormatForTesting(file));
-}
-
-TEST_F(ArcVmClientAdapterTest,
-       IsSystemImageExtFormatForTesting_MagicNumberMatches) {
-  base::FilePath file;
-  ASSERT_TRUE(base::CreateTemporaryFile(&file));
-  char data[2048];
-  memset(data, 0, sizeof(data));
-  // Magic signature (0xEF53) is in little-endian order.
-  data[0x400 + 0x38] = 0x53;
-  data[0x400 + 0x39] = 0xEF;
-  base::WriteFile(file, data, sizeof(data));
-
-  EXPECT_TRUE(IsSystemImageExtFormatForTesting(file));
-}
-
 }  // namespace
 }  // namespace arc
diff --git a/components/arc/session/file_system_status.cc b/components/arc/session/file_system_status.cc
new file mode 100644
index 0000000..dcfcc29
--- /dev/null
+++ b/components/arc/session/file_system_status.cc
@@ -0,0 +1,149 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "components/arc/session/file_system_status.h"
+
+#include <linux/magic.h>
+#include <sys/statvfs.h>
+
+#include <string>
+
+#include "base/containers/span.h"
+#include "base/files/file_util.h"
+#include "base/json/json_reader.h"
+#include "base/logging.h"
+#include "base/threading/scoped_blocking_call.h"
+#include "base/values.h"
+#include "build/build_config.h"
+#include "components/arc/session/arc_vm_client_adapter_util.h"
+
+namespace arc {
+namespace {
+
+constexpr const char kArcVmConfigJsonPath[] = "/usr/share/arcvm/config.json";
+constexpr const char kBuiltinPath[] = "/opt/google/vms/android";
+constexpr const char kDlcPath[] = "/run/imageloader/arcvm-dlc/package/root";
+constexpr const char kFstab[] = "fstab";
+constexpr const char kGeneratedPropertyFilesPath[] =
+    "/run/arcvm/host_generated";
+constexpr const char kKernel[] = "vmlinux";
+constexpr const char kPropertyFilesPath[] = "/usr/share/arcvm/properties";
+constexpr const char kRootFs[] = "system.raw.img";
+constexpr const char kVendorImage[] = "vendor.raw.img";
+
+}  // namespace
+
+FileSystemStatus::FileSystemStatus(FileSystemStatus&& other) = default;
+FileSystemStatus::~FileSystemStatus() = default;
+FileSystemStatus& FileSystemStatus::operator=(FileSystemStatus&& other) =
+    default;
+
+FileSystemStatus::FileSystemStatus()
+    : is_android_debuggable_(
+          IsAndroidDebuggable(base::FilePath(kArcVmConfigJsonPath))),
+      is_host_rootfs_writable_(IsHostRootfsWritable()),
+      system_image_path_(SelectDlcOrBuiltin(base::FilePath(kRootFs))),
+      vendor_image_path_(SelectDlcOrBuiltin(base::FilePath(kVendorImage))),
+      guest_kernel_path_(SelectDlcOrBuiltin(base::FilePath(kKernel))),
+      fstab_path_(SelectDlcOrBuiltin(base::FilePath(kFstab))),
+      property_files_expanded_(
+          ExpandPropertyFiles(base::FilePath(kPropertyFilesPath),
+                              base::FilePath(kGeneratedPropertyFilesPath))),
+      is_system_image_ext_format_(IsSystemImageExtFormat(system_image_path_)) {}
+
+// static
+bool FileSystemStatus::IsAndroidDebuggable(const base::FilePath& json_path) {
+  if (!base::PathExists(json_path))
+    return false;
+
+  std::string content;
+  if (!base::ReadFileToString(json_path, &content))
+    return false;
+
+  base::JSONReader::ValueWithError result(
+      base::JSONReader::ReadAndReturnValueWithError(content,
+                                                    base::JSON_PARSE_RFC));
+  if (!result.value) {
+    LOG(ERROR) << "Error parsing " << json_path
+               << ": code=" << result.error_code
+               << ", message=" << result.error_message << ": " << content;
+    return false;
+  }
+  if (!result.value->is_dict()) {
+    LOG(ERROR) << "Error parsing " << json_path << ": " << *(result.value);
+    return false;
+  }
+
+  const base::Value* debuggable = result.value->FindKeyOfType(
+      "ANDROID_DEBUGGABLE", base::Value::Type::BOOLEAN);
+  if (!debuggable) {
+    LOG(ERROR) << "ANDROID_DEBUGGABLE is not found in " << json_path;
+    return false;
+  }
+
+  return debuggable->GetBool();
+}
+
+// static
+bool FileSystemStatus::IsHostRootfsWritable() {
+  base::ScopedBlockingCall scoped_blocking_call(FROM_HERE,
+                                                base::BlockingType::MAY_BLOCK);
+  struct statvfs buf;
+  if (statvfs("/", &buf) < 0) {
+    PLOG(ERROR) << "statvfs() failed";
+    return false;
+  }
+  const bool rw = !(buf.f_flag & ST_RDONLY);
+  VLOG(1) << "Host's rootfs is " << (rw ? "rw" : "ro");
+  return rw;
+}
+
+// static
+base::FilePath FileSystemStatus::SelectDlcOrBuiltin(
+    const base::FilePath& file) {
+  const base::FilePath dlc_path = base::FilePath(kDlcPath).Append(file);
+  if (base::PathExists(dlc_path)) {
+    VLOG(1) << "arcvm-dlc will be used for " << file.value();
+    return dlc_path;
+  }
+  return base::FilePath(kBuiltinPath).Append(file);
+}
+
+// static
+bool FileSystemStatus::ExpandPropertyFiles(const base::FilePath& source_path,
+                                           const base::FilePath& dest_path) {
+  CrosConfig config;
+  for (const char* file : {"default.prop", "build.prop"}) {
+    if (!ExpandPropertyFile(source_path.Append(file), dest_path.Append(file),
+                            &config)) {
+      LOG(ERROR) << "Failed to expand " << source_path.Append(file);
+      return false;
+    }
+  }
+  return true;
+}
+
+// static
+bool FileSystemStatus::IsSystemImageExtFormat(const base::FilePath& path) {
+  base::File file(path, base::File::FLAG_OPEN | base::File::FLAG_READ);
+  if (!file.IsValid()) {
+    PLOG(ERROR) << "Cannot open system image file: " << path.value();
+    return false;
+  }
+
+  uint8_t buf[2];
+  if (!file.ReadAndCheck(0x400 + 0x38, base::make_span(buf, sizeof(buf)))) {
+    PLOG(ERROR) << "File read error on system image file: " << path.value();
+    return false;
+  }
+
+  uint16_t magic_le = *reinterpret_cast<uint16_t*>(buf);
+#if defined(ARCH_CPU_LITTLE_ENDIAN)
+  return magic_le == EXT4_SUPER_MAGIC;
+#else
+#error Unsupported platform
+#endif
+}
+
+}  // namespace arc
diff --git a/components/arc/session/file_system_status.h b/components/arc/session/file_system_status.h
new file mode 100644
index 0000000..c42ce0d
--- /dev/null
+++ b/components/arc/session/file_system_status.h
@@ -0,0 +1,85 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef COMPONENTS_ARC_SESSION_FILE_SYSTEM_STATUS_H_
+#define COMPONENTS_ARC_SESSION_FILE_SYSTEM_STATUS_H_
+
+#include "base/files/file_path.h"
+
+namespace arc {
+
+// A move-only class to hold status of the host file system. This class is for
+// ArcVmClientAdapter's internal use and visible for only testing purposes. Do
+// not use directly.
+class FileSystemStatus {
+ public:
+  FileSystemStatus(FileSystemStatus&& other);
+  ~FileSystemStatus();
+  FileSystemStatus& operator=(FileSystemStatus&& other);
+
+  FileSystemStatus(const FileSystemStatus&) = delete;
+  FileSystemStatus& operator=(const FileSystemStatus&) = delete;
+
+  static FileSystemStatus GetFileSystemStatusBlocking() {
+    return FileSystemStatus();
+  }
+
+  bool is_android_debuggable() const { return is_android_debuggable_; }
+  bool is_host_rootfs_writable() const { return is_host_rootfs_writable_; }
+  bool is_system_image_ext_format() const {
+    return is_system_image_ext_format_;
+  }
+  const base::FilePath& system_image_path() const { return system_image_path_; }
+  const base::FilePath& vendor_image_path() const { return vendor_image_path_; }
+  const base::FilePath& guest_kernel_path() const { return guest_kernel_path_; }
+  const base::FilePath& fstab_path() const { return fstab_path_; }
+  bool property_files_expanded() const { return property_files_expanded_; }
+
+  static bool IsAndroidDebuggableForTesting(const base::FilePath& json_path) {
+    return IsAndroidDebuggable(json_path);
+  }
+  static bool ExpandPropertyFilesForTesting(const base::FilePath& source_path,
+                                            const base::FilePath& dest_path) {
+    return ExpandPropertyFiles(source_path, dest_path);
+  }
+  static bool IsSystemImageExtFormatForTesting(const base::FilePath& path) {
+    return IsSystemImageExtFormat(path);
+  }
+
+ private:
+  FileSystemStatus();
+
+  // Parse a JSON file which is like the following and returns a result:
+  //   {
+  //     "ANDROID_DEBUGGABLE": false
+  //   }
+  static bool IsAndroidDebuggable(const base::FilePath& json_path);
+
+  static bool IsHostRootfsWritable();
+  static base::FilePath SelectDlcOrBuiltin(const base::FilePath& file);
+
+  // Copies two prop files in /usr/share/arcvm to /run/arcvm/host_generated with
+  // or without modifications (depending on whether the board is unibuild).
+  // Returns true if the copy is successful.
+  static bool ExpandPropertyFiles(const base::FilePath& source_path,
+                                  const base::FilePath& dest_path);
+
+  // https://ext4.wiki.kernel.org/index.php/Ext4_Disk_Layout
+  // Super block starts from block 0, offset 0x400.
+  // 0x38: Magic signature (Len=16, value=0xEF53) in little-endian order.
+  static bool IsSystemImageExtFormat(const base::FilePath& path);
+
+  bool is_android_debuggable_;
+  bool is_host_rootfs_writable_;
+  base::FilePath system_image_path_;
+  base::FilePath vendor_image_path_;
+  base::FilePath guest_kernel_path_;
+  base::FilePath fstab_path_;
+  bool property_files_expanded_;
+  bool is_system_image_ext_format_;
+};
+
+}  // namespace arc
+
+#endif  // COMPONENTS_ARC_SESSION_FILE_SYSTEM_STATUS_H_
diff --git a/components/arc/session/file_system_status_unittest.cc b/components/arc/session/file_system_status_unittest.cc
new file mode 100644
index 0000000..c166692
--- /dev/null
+++ b/components/arc/session/file_system_status_unittest.cc
@@ -0,0 +1,184 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "components/arc/session/file_system_status.h"
+
+#include <string.h>
+
+#include <string>
+
+#include "base/files/file_util.h"
+#include "base/files/scoped_temp_dir.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace arc {
+namespace {
+
+class FileSystemStatusTest : public testing::Test {
+ public:
+  FileSystemStatusTest() = default;
+  ~FileSystemStatusTest() override = default;
+
+  FileSystemStatusTest(const FileSystemStatusTest&) = delete;
+  FileSystemStatusTest& operator=(const FileSystemStatusTest&) = delete;
+
+  void SetUp() override { ASSERT_TRUE(dir_.CreateUniqueTempDir()); }
+
+ protected:
+  static bool IsAndroidDebuggable(const base::FilePath& json_path) {
+    return FileSystemStatus::IsAndroidDebuggableForTesting(json_path);
+  }
+  static bool ExpandPropertyFiles(const base::FilePath& source_path,
+                                  const base::FilePath& dest_path) {
+    return FileSystemStatus::ExpandPropertyFilesForTesting(source_path,
+                                                           dest_path);
+  }
+  static bool IsSystemImageExtFormat(const base::FilePath& path) {
+    return FileSystemStatus::IsSystemImageExtFormatForTesting(path);
+  }
+
+  const base::FilePath& GetTempDir() const { return dir_.GetPath(); }
+
+ private:
+  base::ScopedTempDir dir_;
+};
+
+// Tests if androidboot.debuggable is set properly.
+TEST_F(FileSystemStatusTest, IsAndroidDebuggable) {
+  constexpr const char kAndroidDebuggableTrueJson[] = R"json({
+    "ANDROID_DEBUGGABLE": true
+  })json";
+  constexpr const char kAndroidDebuggableFalseJson[] = R"json({
+    "ANDROID_DEBUGGABLE": false
+  })json";
+  constexpr const char kInvalidTypeJson[] = R"json([
+    42
+  ])json";
+  constexpr const char kInvalidJson[] = R"json({
+    "ANDROID_DEBUGGABLE": true,
+  })json";
+  constexpr const char kKeyNotFoundJson[] = R"json({
+    "BADKEY": "a"
+  })json";
+  constexpr const char kNonBooleanValue[] = R"json({
+    "ANDROID_DEBUGGABLE": "a"
+  })json";
+  constexpr const char kBadKeyType[] = R"json({
+    42: true
+  })json";
+
+  auto test = [](const base::FilePath& dir, const std::string& str) {
+    base::FilePath path;
+    if (!CreateTemporaryFileInDir(dir, &path))
+      return false;
+    base::WriteFile(path, str.data(), str.size());
+    return IsAndroidDebuggable(path);
+  };
+
+  EXPECT_TRUE(test(GetTempDir(), kAndroidDebuggableTrueJson));
+  EXPECT_FALSE(test(GetTempDir(), kAndroidDebuggableFalseJson));
+  EXPECT_FALSE(test(GetTempDir(), kInvalidTypeJson));
+  EXPECT_FALSE(test(GetTempDir(), kInvalidJson));
+  EXPECT_FALSE(test(GetTempDir(), kKeyNotFoundJson));
+  EXPECT_FALSE(test(GetTempDir(), kNonBooleanValue));
+  EXPECT_FALSE(test(GetTempDir(), kBadKeyType));
+}
+
+// Tests the case where the json file doesn't exist.
+TEST_F(FileSystemStatusTest, IsAndroidDebuggable_NonExistent) {
+  EXPECT_FALSE(IsAndroidDebuggable(base::FilePath("/nonexistent-path")));
+}
+
+// Tests the case where the json file is not readable.
+TEST_F(FileSystemStatusTest, IsAndroidDebuggable_CannotRead) {
+  constexpr const char kValidJson[] = R"json({
+    "ANDROID_DEBUGGABLE": true
+  })json";
+  base::FilePath path;
+  ASSERT_TRUE(CreateTemporaryFileInDir(GetTempDir(), &path));
+  base::WriteFile(path, kValidJson, strlen(kValidJson));
+  base::SetPosixFilePermissions(path, 0300);  // not readable
+  EXPECT_FALSE(IsAndroidDebuggable(path));
+}
+
+TEST_F(FileSystemStatusTest, ExpandPropertyFiles_NoSource) {
+  // Both source and dest are not found.
+  EXPECT_FALSE(ExpandPropertyFiles(base::FilePath("/nonexistent1"),
+                                   base::FilePath("/nonexistent2")));
+
+  // Both source and dest exist, but the source directory is empty.
+  base::FilePath source_dir;
+  ASSERT_TRUE(base::CreateTemporaryDirInDir(GetTempDir(), "test", &source_dir));
+  base::FilePath dest_dir;
+  ASSERT_TRUE(base::CreateTemporaryDirInDir(GetTempDir(), "test", &dest_dir));
+  EXPECT_FALSE(ExpandPropertyFiles(source_dir, dest_dir));
+
+  // Add default.prop to the source, but not build.prop.
+  base::FilePath default_prop = source_dir.Append("default.prop");
+  constexpr const char kDefaultProp[] = "ro.foo=bar\n";
+  base::WriteFile(default_prop, kDefaultProp, strlen(kDefaultProp));
+  EXPECT_FALSE(ExpandPropertyFiles(source_dir, dest_dir));
+
+  // Add build.prop too. Then the call should succeed.
+  base::FilePath build_prop = source_dir.Append("build.prop");
+  constexpr const char kBuildProp[] = "ro.baz=boo\n";
+  base::WriteFile(build_prop, kBuildProp, strlen(kBuildProp));
+  EXPECT_TRUE(ExpandPropertyFiles(source_dir, dest_dir));
+
+  // Verify two dest files are there.
+  EXPECT_TRUE(base::PathExists(dest_dir.Append("default.prop")));
+  EXPECT_TRUE(base::PathExists(dest_dir.Append("build.prop")));
+
+  // Verify their content.
+  // Note: ExpandPropertyFile() adds a trailing LF.
+  std::string content;
+  EXPECT_TRUE(
+      base::ReadFileToString(dest_dir.Append("default.prop"), &content));
+  EXPECT_EQ(std::string(kDefaultProp) + "\n", content);
+  EXPECT_TRUE(base::ReadFileToString(dest_dir.Append("build.prop"), &content));
+  EXPECT_EQ(std::string(kBuildProp) + "\n", content);
+
+  // Finally, test the case where source is valid but the dest is not.
+  EXPECT_FALSE(ExpandPropertyFiles(source_dir, base::FilePath("/nonexistent")));
+}
+
+TEST_F(FileSystemStatusTest, IsSystemImageExtFormat_FileMissing) {
+  EXPECT_FALSE(IsSystemImageExtFormat(base::FilePath("/nonexistent")));
+}
+
+TEST_F(FileSystemStatusTest, IsSystemImageExtFormat_FileSizeTooSmall) {
+  base::FilePath file;
+  ASSERT_TRUE(base::CreateTemporaryFile(&file));
+  char data[100];
+  memset(data, 0, sizeof(data));
+  base::WriteFile(file, data, sizeof(data));
+
+  EXPECT_FALSE(IsSystemImageExtFormat(file));
+}
+
+TEST_F(FileSystemStatusTest, IsSystemImageExtFormat_MagicNumberDoesNotMatch) {
+  base::FilePath file;
+  ASSERT_TRUE(base::CreateTemporaryFile(&file));
+  char data[2048];
+  memset(data, 0, sizeof(data));
+  base::WriteFile(file, data, sizeof(data));
+
+  EXPECT_FALSE(IsSystemImageExtFormat(file));
+}
+
+TEST_F(FileSystemStatusTest, IsSystemImageExtFormat_MagicNumberMatches) {
+  base::FilePath file;
+  ASSERT_TRUE(base::CreateTemporaryFile(&file));
+  char data[2048];
+  memset(data, 0, sizeof(data));
+  // Magic signature (0xEF53) is in little-endian order.
+  data[0x400 + 0x38] = 0x53;
+  data[0x400 + 0x39] = 0xEF;
+  base::WriteFile(file, data, sizeof(data));
+
+  EXPECT_TRUE(IsSystemImageExtFormat(file));
+}
+
+}  // namespace
+}  // namespace arc
diff --git a/components/background_task_scheduler/android/javatests/src/org/chromium/components/background_task_scheduler/BackgroundTaskSchedulerJobServiceTest.java b/components/background_task_scheduler/android/javatests/src/org/chromium/components/background_task_scheduler/BackgroundTaskSchedulerJobServiceTest.java
index 60b2772d..14ac68c8 100644
--- a/components/background_task_scheduler/android/javatests/src/org/chromium/components/background_task_scheduler/BackgroundTaskSchedulerJobServiceTest.java
+++ b/components/background_task_scheduler/android/javatests/src/org/chromium/components/background_task_scheduler/BackgroundTaskSchedulerJobServiceTest.java
@@ -6,7 +6,6 @@
 
 import android.annotation.TargetApi;
 import android.app.job.JobInfo;
-import android.content.Context;
 import android.os.Build;
 import android.os.Bundle;
 import android.os.PersistableBundle;
@@ -30,22 +29,6 @@
 @TargetApi(Build.VERSION_CODES.LOLLIPOP_MR1)
 @MinAndroidSdkLevel(Build.VERSION_CODES.LOLLIPOP_MR1)
 public class BackgroundTaskSchedulerJobServiceTest {
-    private static class TestBackgroundTask implements BackgroundTask {
-        @Override
-        public boolean onStartTask(
-                Context context, TaskParameters taskParameters, TaskFinishedCallback callback) {
-            return false;
-        }
-
-        @Override
-        public boolean onStopTask(Context context, TaskParameters taskParameters) {
-            return false;
-        }
-
-        @Override
-        public void reschedule(Context context) {}
-    }
-
     private static final long CLOCK_TIME_MS = 1415926535000L;
     private static final long TIME_50_MIN_TO_MS = TimeUnit.MINUTES.toMillis(50);
     private static final long TIME_100_MIN_TO_MS = TimeUnit.MINUTES.toMillis(100);
diff --git a/components/component_updater/component_installer.cc b/components/component_updater/component_installer.cc
index 7a2bc4a..8925c26e 100644
--- a/components/component_updater/component_installer.cc
+++ b/components/component_updater/component_installer.cc
@@ -43,7 +43,7 @@
 
 }  // namespace
 
-ComponentInstallerPolicy::~ComponentInstallerPolicy() {}
+ComponentInstallerPolicy::~ComponentInstallerPolicy() = default;
 
 ComponentInstaller::RegistrationInfo::RegistrationInfo()
     : version(kNullVersion) {}
@@ -51,13 +51,14 @@
 ComponentInstaller::RegistrationInfo::~RegistrationInfo() = default;
 
 ComponentInstaller::ComponentInstaller(
-    std::unique_ptr<ComponentInstallerPolicy> installer_policy)
+    std::unique_ptr<ComponentInstallerPolicy> installer_policy,
+    scoped_refptr<update_client::ActionHandler> action_handler)
     : current_version_(kNullVersion),
-      main_task_runner_(base::ThreadTaskRunnerHandle::Get()) {
-  installer_policy_ = std::move(installer_policy);
-}
+      installer_policy_(std::move(installer_policy)),
+      action_handler_(action_handler),
+      main_task_runner_(base::ThreadTaskRunnerHandle::Get()) {}
 
-ComponentInstaller::~ComponentInstaller() {}
+ComponentInstaller::~ComponentInstaller() = default;
 
 void ComponentInstaller::Register(ComponentUpdateService* cus,
                                   base::OnceClosure callback) {
@@ -400,6 +401,7 @@
   installer_policy_->GetHash(&crx.pk_hash);
   crx.app_id = update_client::GetCrxIdFromPublicKeyHash(crx.pk_hash);
   crx.installer = this;
+  crx.action_handler = action_handler_;
   crx.version = current_version_;
   crx.fingerprint = current_fingerprint_;
   crx.name = installer_policy_->GetName();
diff --git a/components/component_updater/component_installer.h b/components/component_updater/component_installer.h
index 1588693..9a15008c0 100644
--- a/components/component_updater/component_installer.h
+++ b/components/component_updater/component_installer.h
@@ -111,8 +111,9 @@
 // controlled by an instance of ComponentInstallerPolicy, at construction time.
 class ComponentInstaller final : public update_client::CrxInstaller {
  public:
-  explicit ComponentInstaller(
-      std::unique_ptr<ComponentInstallerPolicy> installer_policy);
+  ComponentInstaller(
+      std::unique_ptr<ComponentInstallerPolicy> installer_policy,
+      scoped_refptr<update_client::ActionHandler> action_handler = nullptr);
 
   // Registers the component for update checks and installs.
   // The passed |callback| will be called once the initial check for installed
@@ -168,18 +169,19 @@
   void ComponentReady(std::unique_ptr<base::DictionaryValue> manifest);
   void UninstallOnTaskRunner();
 
+  THREAD_CHECKER(thread_checker_);
+
   base::FilePath current_install_dir_;
   base::Version current_version_;
   std::string current_fingerprint_;
 
   std::unique_ptr<ComponentInstallerPolicy> installer_policy_;
+  scoped_refptr<update_client::ActionHandler> action_handler_;
   scoped_refptr<base::SequencedTaskRunner> task_runner_;
 
   // Posts responses back to the main thread.
   scoped_refptr<base::SingleThreadTaskRunner> main_task_runner_;
 
-  THREAD_CHECKER(thread_checker_);
-
   DISALLOW_COPY_AND_ASSIGN(ComponentInstaller);
 };
 
diff --git a/components/download/internal/common/download_file_impl.cc b/components/download/internal/common/download_file_impl.cc
index e880a59..de0b5bf25 100644
--- a/components/download/internal/common/download_file_impl.cc
+++ b/components/download/internal/common/download_file_impl.cc
@@ -119,6 +119,7 @@
 }
 
 void DownloadFileImpl::SourceStream::ClearDataReadyCallback() {
+  read_stream_callback_.Cancel();
   input_stream_->ClearDataReadyCallback();
 }
 
@@ -632,10 +633,11 @@
   // If we're stopping to yield the thread, post a task so we come back.
   if (state == InputStream::HAS_DATA && now - start > delta &&
       !should_terminate) {
-    task_runner_->PostTask(
-        FROM_HERE, base::BindOnce(&DownloadFileImpl::StreamActive,
-                                  weak_factory_.GetWeakPtr(), source_stream,
-                                  MOJO_RESULT_OK));
+    source_stream->read_stream_callback()->Reset(base::BindOnce(
+        &DownloadFileImpl::StreamActive, weak_factory_.GetWeakPtr(),
+        source_stream, MOJO_RESULT_OK));
+    task_runner_->PostTask(FROM_HERE,
+                           source_stream->read_stream_callback()->callback());
   } else if (state == InputStream::EMPTY && !should_terminate) {
     source_stream->RegisterDataReadyCallback(
         base::Bind(&DownloadFileImpl::StreamActive, weak_factory_.GetWeakPtr(),
diff --git a/components/download/public/common/download_file_impl.h b/components/download/public/common/download_file_impl.h
index 8dbf19e..215ed52 100644
--- a/components/download/public/common/download_file_impl.h
+++ b/components/download/public/common/download_file_impl.h
@@ -15,6 +15,7 @@
 #include <unordered_map>
 #include <vector>
 
+#include "base/cancelable_callback.h"
 #include "base/files/file.h"
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
@@ -154,6 +155,9 @@
     void set_finished(bool finish) { finished_ = finish; }
     size_t index() { return index_; }
     void set_index(size_t index) { index_ = index; }
+    base::CancelableOnceClosure* read_stream_callback() {
+      return &read_stream_callback_;
+    }
 
    private:
     // Starting position of the stream, this is from the network response.
@@ -187,6 +191,9 @@
     // The stream through which data comes.
     std::unique_ptr<InputStream> input_stream_;
 
+    // Cancelable callback to read from the |input_stream_|.
+    base::CancelableOnceClosure read_stream_callback_;
+
     DISALLOW_COPY_AND_ASSIGN(SourceStream);
   };
 
diff --git a/components/language/content/browser/ulp_language_code_locator/ulp_language_code_locator.cc b/components/language/content/browser/ulp_language_code_locator/ulp_language_code_locator.cc
index b8e88b5..4fe63a61 100644
--- a/components/language/content/browser/ulp_language_code_locator/ulp_language_code_locator.cc
+++ b/components/language/content/browser/ulp_language_code_locator/ulp_language_code_locator.cc
@@ -63,13 +63,17 @@
     const bool is_cached =
         celllangs_cached->GetDictionary(index, &celllang_cached);
 
-    const S2CellId cell_cached =
-        is_cached ? S2CellId::FromToken(
-                        *celllang_cached->FindStringKey(kCellTokenKey))
-                  : S2CellId::None();
+    const std::string* token_cached =
+        is_cached ? celllang_cached->FindStringKey(kCellTokenKey) : nullptr;
+    const S2CellId cell_cached = token_cached != nullptr
+                                     ? S2CellId::FromToken(*token_cached)
+                                     : S2CellId::None();
 
-    if (cell_cached.is_valid() && cell_cached.contains(cell)) {
-      language = *celllang_cached->FindStringKey(kLanguageKey);
+    const std::string* lang_cached =
+        is_cached ? celllang_cached->FindStringKey(kLanguageKey) : nullptr;
+    if (cell_cached.is_valid() && cell_cached.contains(cell) &&
+        lang_cached != nullptr) {
+      language = *lang_cached;
     } else {
       const S2LangQuadTreeNode& root =
           S2LangQuadTreeNode::Deserialize(serialized_langtrees_[index].get());
diff --git a/components/media_message_center/media_notification_background.cc b/components/media_message_center/media_notification_background.cc
index 00127a6..66f6bb5 100644
--- a/components/media_message_center/media_notification_background.cc
+++ b/components/media_message_center/media_notification_background.cc
@@ -260,7 +260,7 @@
                                bottom_radius, bottom_radius};
 
     SkPath path;
-    path.addRoundRect(gfx::RectToSkRect(bounds), radii, SkPath::kCW_Direction);
+    path.addRoundRect(gfx::RectToSkRect(bounds), radii, SkPathDirection::kCW);
     canvas->ClipPath(path, true);
   }
 
diff --git a/components/password_manager/core/browser/leak_detection_dialog_utils.cc b/components/password_manager/core/browser/leak_detection_dialog_utils.cc
index e2ed0d92..069035f9 100644
--- a/components/password_manager/core/browser/leak_detection_dialog_utils.cc
+++ b/components/password_manager/core/browser/leak_detection_dialog_utils.cc
@@ -90,7 +90,9 @@
 }
 
 base::string16 GetTitle(CredentialLeakType leak_type) {
-  return l10n_util::GetStringUTF16(IDS_CREDENTIAL_LEAK_TITLE);
+  return l10n_util::GetStringUTF16(ShouldCheckPasswords(leak_type)
+                                       ? IDS_CREDENTIAL_LEAK_TITLE_CHECK
+                                       : IDS_CREDENTIAL_LEAK_TITLE_CHANGE);
 }
 
 bool ShouldCheckPasswords(CredentialLeakType leak_type) {
diff --git a/components/password_manager/core/browser/leak_detection_dialog_utils_unittest.cc b/components/password_manager/core/browser/leak_detection_dialog_utils_unittest.cc
index c84cb51..5b8cc0d 100644
--- a/components/password_manager/core/browser/leak_detection_dialog_utils_unittest.cc
+++ b/components/password_manager/core/browser/leak_detection_dialog_utils_unittest.cc
@@ -37,21 +37,21 @@
 } kLeakTypesTestCases[] = {
     {CreateLeakType(IsSaved(false), IsReused(false), IsSyncing(false)), IDS_OK,
      IDS_CLOSE, IDS_CREDENTIAL_LEAK_CHANGE_PASSWORD_MESSAGE,
-     IDS_CREDENTIAL_LEAK_TITLE, false, false},
+     IDS_CREDENTIAL_LEAK_TITLE_CHANGE, false, false},
     {CreateLeakType(IsSaved(false), IsReused(false), IsSyncing(true)), IDS_OK,
      IDS_CLOSE, IDS_CREDENTIAL_LEAK_CHANGE_PASSWORD_MESSAGE,
-     IDS_CREDENTIAL_LEAK_TITLE, false, false},
+     IDS_CREDENTIAL_LEAK_TITLE_CHANGE, false, false},
     {CreateLeakType(IsSaved(false), IsReused(true), IsSyncing(true)),
      IDS_LEAK_CHECK_CREDENTIALS, IDS_CLOSE,
      IDS_CREDENTIAL_LEAK_CHANGE_AND_CHECK_PASSWORDS_MESSAGE,
-     IDS_CREDENTIAL_LEAK_TITLE, true, true},
+     IDS_CREDENTIAL_LEAK_TITLE_CHECK, true, true},
     {CreateLeakType(IsSaved(true), IsReused(false), IsSyncing(true)), IDS_OK,
      IDS_CLOSE, IDS_CREDENTIAL_LEAK_CHANGE_PASSWORD_MESSAGE,
-     IDS_CREDENTIAL_LEAK_TITLE, false, false},
+     IDS_CREDENTIAL_LEAK_TITLE_CHANGE, false, false},
     {CreateLeakType(IsSaved(true), IsReused(true), IsSyncing(true)),
      IDS_LEAK_CHECK_CREDENTIALS, IDS_CLOSE,
-     IDS_CREDENTIAL_LEAK_CHECK_PASSWORDS_MESSAGE, IDS_CREDENTIAL_LEAK_TITLE,
-     true, true}};
+     IDS_CREDENTIAL_LEAK_CHECK_PASSWORDS_MESSAGE,
+     IDS_CREDENTIAL_LEAK_TITLE_CHECK, true, true}};
 }  // namespace
 
 TEST(CredentialLeakDialogUtilsTest, GetAcceptButtonLabel) {
diff --git a/components/password_manager_strings.grdp b/components/password_manager_strings.grdp
index ce0e970..59883248 100644
--- a/components/password_manager_strings.grdp
+++ b/components/password_manager_strings.grdp
@@ -10,17 +10,20 @@
       Check passwords
     </message>
   </if>
-  <message name="IDS_CREDENTIAL_LEAK_TITLE" desc="The title of the credential leak dialog.">
-    Your password was compromised
+  <message name="IDS_CREDENTIAL_LEAK_TITLE_CHANGE" desc="The title of the credential leak dialog when the user should change the password now.">
+    Change your password
+  </message>
+  <message name="IDS_CREDENTIAL_LEAK_TITLE_CHECK" desc="The title of the credential leak dialog when the user should check all passwords on passwords.google.com.">
+    Check your passwords
   </message>
   <message name="IDS_CREDENTIAL_LEAK_CHECK_PASSWORDS_MESSAGE" desc="The text that is used in credential leak detection dialog when saved credentials were used on multiple sites.">
-    A data breach occurred on a site or app you use. Chrome recommends checking your saved passwords now.
+    A data breach on a site or app exposed your password. Chrome recommends checking your saved passwords now.
   </message>
   <message name="IDS_CREDENTIAL_LEAK_CHANGE_PASSWORD_MESSAGE" desc="The text that is used in credential leak detection dialog when credentials were leaked on current site only.">
-    A data breach occurred on a site or app you use. Chrome recommends changing your password on <ph name="ORIGIN">$1<ex>example.com</ex></ph> now.
+    A data breach on a site or app exposed your password. Chrome recommends changing your password on <ph name="ORIGIN">$1<ex>example.com</ex></ph> now.
   </message>
   <message name="IDS_CREDENTIAL_LEAK_CHANGE_AND_CHECK_PASSWORDS_MESSAGE" desc="The text that is used in credential leak detection dialog when credentials were not saved in chrome, but used on multiple sites.">
-    A data breach occurred on a site or app you use. Chrome recommends checking your saved passwords and changing your password on <ph name="ORIGIN">$1<ex>example.com</ex></ph> now.
+    A data breach on a site or app exposed your password. Chrome recommends checking your saved passwords and changing your password on <ph name="ORIGIN">$1<ex>example.com</ex></ph> now.
   </message>
   <message name="IDS_MANAGE_PASSWORDS_AUTO_SIGNIN_TITLE" desc="The title of the auto-signin toast.">
     Signing in as <ph name="username">$1<ex>chef@google.com</ex></ph>
diff --git a/components/password_manager_strings_grdp/IDS_CREDENTIAL_LEAK_CHANGE_AND_CHECK_PASSWORDS_MESSAGE.png.sha1 b/components/password_manager_strings_grdp/IDS_CREDENTIAL_LEAK_CHANGE_AND_CHECK_PASSWORDS_MESSAGE.png.sha1
index 446c553..aad74b0 100644
--- a/components/password_manager_strings_grdp/IDS_CREDENTIAL_LEAK_CHANGE_AND_CHECK_PASSWORDS_MESSAGE.png.sha1
+++ b/components/password_manager_strings_grdp/IDS_CREDENTIAL_LEAK_CHANGE_AND_CHECK_PASSWORDS_MESSAGE.png.sha1
@@ -1 +1 @@
-7ada1c75e5629f59eedbb27d6dc04f25e083a3ac
\ No newline at end of file
+fb93627d42519dde6bb2c1262bc39f86a542c611
\ No newline at end of file
diff --git a/components/password_manager_strings_grdp/IDS_CREDENTIAL_LEAK_CHANGE_PASSWORD_MESSAGE.png.sha1 b/components/password_manager_strings_grdp/IDS_CREDENTIAL_LEAK_CHANGE_PASSWORD_MESSAGE.png.sha1
index 64d3bdd..069c083 100644
--- a/components/password_manager_strings_grdp/IDS_CREDENTIAL_LEAK_CHANGE_PASSWORD_MESSAGE.png.sha1
+++ b/components/password_manager_strings_grdp/IDS_CREDENTIAL_LEAK_CHANGE_PASSWORD_MESSAGE.png.sha1
@@ -1 +1 @@
-321fb6213aeaed94126445db61ab5430d8475db7
\ No newline at end of file
+b17b7a4f6988f2a941ef16877264e4dc5ad21da6
\ No newline at end of file
diff --git a/components/password_manager_strings_grdp/IDS_CREDENTIAL_LEAK_CHECK_PASSWORDS_MESSAGE.png.sha1 b/components/password_manager_strings_grdp/IDS_CREDENTIAL_LEAK_CHECK_PASSWORDS_MESSAGE.png.sha1
index 45f37c0f..2cbc058 100644
--- a/components/password_manager_strings_grdp/IDS_CREDENTIAL_LEAK_CHECK_PASSWORDS_MESSAGE.png.sha1
+++ b/components/password_manager_strings_grdp/IDS_CREDENTIAL_LEAK_CHECK_PASSWORDS_MESSAGE.png.sha1
@@ -1 +1 @@
-9837c6abca70ef86a15e71586b165ab83984d7c6
\ No newline at end of file
+86fc4221f059bc471372f6c917914ca10bd15500
\ No newline at end of file
diff --git a/components/password_manager_strings_grdp/IDS_CREDENTIAL_LEAK_TITLE_CHANGE.png.sha1 b/components/password_manager_strings_grdp/IDS_CREDENTIAL_LEAK_TITLE_CHANGE.png.sha1
new file mode 100644
index 0000000..069c083
--- /dev/null
+++ b/components/password_manager_strings_grdp/IDS_CREDENTIAL_LEAK_TITLE_CHANGE.png.sha1
@@ -0,0 +1 @@
+b17b7a4f6988f2a941ef16877264e4dc5ad21da6
\ No newline at end of file
diff --git a/components/password_manager_strings_grdp/IDS_CREDENTIAL_LEAK_TITLE_CHECK.png.sha1 b/components/password_manager_strings_grdp/IDS_CREDENTIAL_LEAK_TITLE_CHECK.png.sha1
new file mode 100644
index 0000000..2cbc058
--- /dev/null
+++ b/components/password_manager_strings_grdp/IDS_CREDENTIAL_LEAK_TITLE_CHECK.png.sha1
@@ -0,0 +1 @@
+86fc4221f059bc471372f6c917914ca10bd15500
\ No newline at end of file
diff --git a/components/payments/OWNERS b/components/payments/OWNERS
index c578a32d..35f24cd 100644
--- a/components/payments/OWNERS
+++ b/components/payments/OWNERS
@@ -2,5 +2,6 @@
 rouslan@chromium.org
 danyao@chromium.org
 maxlg@chromium.org
+sahel@chromium.org
 
 # COMPONENT: UI>Browser>Payments
diff --git a/components/policy/android/junit/src/org/chromium/policy/AbstractAppRestrictionsProviderTest.java b/components/policy/android/junit/src/org/chromium/policy/AbstractAppRestrictionsProviderTest.java
index 3836f4a..90ccb81 100644
--- a/components/policy/android/junit/src/org/chromium/policy/AbstractAppRestrictionsProviderTest.java
+++ b/components/policy/android/junit/src/org/chromium/policy/AbstractAppRestrictionsProviderTest.java
@@ -27,26 +27,12 @@
 import org.chromium.base.ContextUtils;
 import org.chromium.base.test.BaseRobolectricTestRunner;
 
-import java.util.concurrent.Executor;
-
 /**
  * Robolectric test for AbstractAppRestrictionsProvider.
  */
 @RunWith(BaseRobolectricTestRunner.class)
 @Config(manifest = Config.NONE)
 public class AbstractAppRestrictionsProviderTest {
-    /*
-     * Robolectric's AsyncTasks don't do anything to override the underlying executor,
-     * which means that the don't reliably run within {@link Robolectric.RunBackgroundTasks()}.
-     * Create a special task executor that is guarenteed to run when expected.
-     */
-    private class TestExecutor implements Executor {
-        @Override
-        public void execute(Runnable command) {
-            Robolectric.getBackgroundThreadScheduler().post(command);
-        }
-    }
-
     /**
      * Minimal concrete class implementing AbstractAppRestrictionsProvider.
      */
diff --git a/components/policy/proto/device_management_backend.proto b/components/policy/proto/device_management_backend.proto
index 5223c1d..933db38 100644
--- a/components/policy/proto/device_management_backend.proto
+++ b/components/policy/proto/device_management_backend.proto
@@ -1176,6 +1176,8 @@
   optional string id = 1;
 
   // When the user commits to requesting the extension.
+  // [request_timestamp] is milliseconds since Epoch in UTC timezone
+  // (Java time).
   optional int64 request_timestamp = 2;
 }
 
diff --git a/components/signin/internal/identity_manager/BUILD.gn b/components/signin/internal/identity_manager/BUILD.gn
index b6a50c3..fa402c9b 100644
--- a/components/signin/internal/identity_manager/BUILD.gn
+++ b/components/signin/internal/identity_manager/BUILD.gn
@@ -2,6 +2,8 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
+import("//components/signin/features.gni")
+
 # This target forms the core of the IdentityManager implementation
 # (//components/signin/public/identity_manager/identity_manager.*).
 source_set("identity_manager") {
@@ -75,7 +77,9 @@
       "//components/signin/core/browser/android:jni_headers",
       "//components/signin/internal/base",
     ]
-  } else {
+  }
+
+  if (enable_dice_support) {
     sources += [
       "mutable_profile_oauth2_token_service_delegate.cc",
       "mutable_profile_oauth2_token_service_delegate.h",
@@ -176,7 +180,7 @@
     deps += [ "//components/signin/public/identity_manager/ios:test_support" ]
   }
 
-  if (!is_android) {
+  if (enable_dice_support) {
     sources += [ "mutable_profile_oauth2_token_service_delegate_unittest.cc" ]
   }
 }
diff --git a/components/signin/internal/identity_manager/mutable_profile_oauth2_token_service_delegate.cc b/components/signin/internal/identity_manager/mutable_profile_oauth2_token_service_delegate.cc
index f8373a1..55501e6f 100644
--- a/components/signin/internal/identity_manager/mutable_profile_oauth2_token_service_delegate.cc
+++ b/components/signin/internal/identity_manager/mutable_profile_oauth2_token_service_delegate.cc
@@ -13,7 +13,6 @@
 #include "base/macros.h"
 #include "base/memory/weak_ptr.h"
 #include "base/metrics/histogram_macros.h"
-#include "build/build_config.h"
 #include "components/prefs/pref_registry_simple.h"
 #include "components/prefs/pref_service.h"
 #include "components/signin/public/base/signin_client.h"
@@ -254,6 +253,7 @@
   DCHECK(client);
   DCHECK(account_tracker_service_);
   DCHECK(network_connection_tracker_);
+  DCHECK_NE(signin::AccountConsistencyMethod::kMirror, account_consistency_);
   // It's okay to fill the backoff policy after being used in construction.
   backoff_policy_.num_errors_to_ignore = 0;
   backoff_policy_.initial_delay_ms = 1000;
@@ -408,18 +408,6 @@
   set_load_credentials_state(
       signin::LoadCredentialsState::LOAD_CREDENTIALS_IN_PROGRESS);
 
-#if defined(OS_CHROMEOS)
-  // TODO(sinhak): Remove this ifdef block after Account Manager is switched on.
-  // ChromeOS OOBE loads credentials without a primary account and expects this
-  // to be a no-op. See http://crbug.com/891818
-  if (primary_account_id.empty()) {
-    set_load_credentials_state(
-        signin::LoadCredentialsState::LOAD_CREDENTIALS_FINISHED_WITH_SUCCESS);
-    FinishLoadingCredentials();
-    return;
-  }
-#endif
-
   if (!primary_account_id.empty())
     ValidateAccountId(primary_account_id);
   DCHECK(loading_primary_account_id_.empty());
@@ -586,7 +574,6 @@
         // Only load secondary accounts when account consistency is enabled.
         bool load_account =
             account_id == loading_primary_account_id_ ||
-            account_consistency_ == signin::AccountConsistencyMethod::kMirror ||
             account_consistency_ == signin::AccountConsistencyMethod::kDice;
         LoadTokenFromDBStatus load_token_status =
             load_account
@@ -840,10 +827,8 @@
 }
 
 void MutableProfileOAuth2TokenServiceDelegate::FinishLoadingCredentials() {
-#if !defined(OS_CHROMEOS)
   if (account_consistency_ == signin::AccountConsistencyMethod::kDice)
     DCHECK(client_->GetPrefs()->GetBoolean(prefs::kTokenServiceDiceCompatible));
-#endif
   FireRefreshTokensLoaded();
 }
 
diff --git a/components/signin/internal/identity_manager/mutable_profile_oauth2_token_service_delegate_unittest.cc b/components/signin/internal/identity_manager/mutable_profile_oauth2_token_service_delegate_unittest.cc
index 1ebf8a3..1c7a8e1e 100644
--- a/components/signin/internal/identity_manager/mutable_profile_oauth2_token_service_delegate_unittest.cc
+++ b/components/signin/internal/identity_manager/mutable_profile_oauth2_token_service_delegate_unittest.cc
@@ -16,8 +16,6 @@
 #include "base/test/task_environment.h"
 #include "base/threading/thread_task_runner_handle.h"
 #include "base/time/time.h"
-#include "build/build_config.h"
-#include "build/buildflag.h"
 #include "components/os_crypt/os_crypt_mocker.h"
 #include "components/prefs/scoped_user_pref_update.h"
 #include "components/signin/internal/identity_manager/fake_profile_oauth2_token_service_delegate.h"
@@ -25,7 +23,6 @@
 #include "components/signin/internal/identity_manager/profile_oauth2_token_service.h"
 #include "components/signin/public/base/account_consistency_method.h"
 #include "components/signin/public/base/device_id_helper.h"
-#include "components/signin/public/base/signin_buildflags.h"
 #include "components/signin/public/base/signin_pref_names.h"
 #include "components/signin/public/base/test_signin_client.h"
 #include "components/signin/public/identity_manager/account_info.h"
@@ -52,7 +49,6 @@
 
 namespace {
 
-#if BUILDFLAG(ENABLE_DICE_SUPPORT)
 // Create test account info.
 AccountInfo CreateTestAccountInfo(const std::string& name,
                                   bool is_hosted_domain,
@@ -73,7 +69,6 @@
   EXPECT_EQ(is_valid, account_info.IsValid());
   return account_info;
 }
-#endif
 
 }  // namespace
 
@@ -270,7 +265,7 @@
 };
 
 TEST_F(MutableProfileOAuth2TokenServiceDelegateTest, PersistenceDBUpgrade) {
-  InitializeOAuth2ServiceDelegate(signin::AccountConsistencyMethod::kMirror);
+  InitializeOAuth2ServiceDelegate(signin::AccountConsistencyMethod::kDice);
   CoreAccountId main_account_id("account_id");
   std::string main_refresh_token("old_refresh_token");
 
@@ -386,7 +381,7 @@
 
 TEST_F(MutableProfileOAuth2TokenServiceDelegateTest,
        PersistenceLoadCredentials) {
-  InitializeOAuth2ServiceDelegate(signin::AccountConsistencyMethod::kMirror);
+  InitializeOAuth2ServiceDelegate(signin::AccountConsistencyMethod::kDice);
   const CoreAccountId account_id("account_id");
   const CoreAccountId account_id2("account_id_2");
 
@@ -463,8 +458,6 @@
   ResetObserverCounts();
 }
 
-#if BUILDFLAG(ENABLE_DICE_SUPPORT)
-
 TEST_F(MutableProfileOAuth2TokenServiceDelegateTest,
        PersistenceLoadCredentialsEmptyPrimaryAccountId_DiceEnabled) {
   InitializeOAuth2ServiceDelegate(signin::AccountConsistencyMethod::kDice);
@@ -571,9 +564,7 @@
 
   ASSERT_TRUE(pref_service_.GetBoolean(prefs::kTokenServiceDiceCompatible));
 }
-#endif  // BUILDFLAG(ENABLE_DICE_SUPPORT)
 
-#if !defined(OS_CHROMEOS)
 TEST_F(MutableProfileOAuth2TokenServiceDelegateTest,
        LoadCredentialsClearsTokenDBWhenNoPrimaryAccount_DiceDisabled) {
   // Populate DB with 2 valid tokens.
@@ -598,7 +589,6 @@
   ASSERT_TRUE(token_web_data_result_.get());
   ASSERT_EQ(0u, token_web_data_result_->GetValue().tokens.size());
 }
-#endif  // !defined(OS_CHROMEOS)
 
 // Tests that calling UpdateCredentials revokes the old token, without sending
 // the notification.
@@ -988,7 +978,8 @@
 TEST_F(MutableProfileOAuth2TokenServiceDelegateTest, CanonicalizeAccountId) {
   pref_service_.SetInteger(prefs::kAccountIdMigrationState,
                            AccountTrackerService::MIGRATION_NOT_STARTED);
-  InitializeOAuth2ServiceDelegate(signin::AccountConsistencyMethod::kMirror);
+  pref_service_.SetBoolean(prefs::kTokenServiceDiceCompatible, true);
+  InitializeOAuth2ServiceDelegate(signin::AccountConsistencyMethod::kDice);
   std::map<std::string, std::string> tokens;
   tokens["AccountId-user@gmail.com"] = "refresh_token";
   tokens["AccountId-Foo.Bar@gmail.com"] = "refresh_token";
@@ -1006,9 +997,10 @@
 
 TEST_F(MutableProfileOAuth2TokenServiceDelegateTest,
        CanonAndNonCanonAccountId) {
+  pref_service_.SetBoolean(prefs::kTokenServiceDiceCompatible, true);
   pref_service_.SetInteger(prefs::kAccountIdMigrationState,
                            AccountTrackerService::MIGRATION_NOT_STARTED);
-  InitializeOAuth2ServiceDelegate(signin::AccountConsistencyMethod::kMirror);
+  InitializeOAuth2ServiceDelegate(signin::AccountConsistencyMethod::kDice);
   std::map<std::string, std::string> tokens;
   tokens["AccountId-Foo.Bar@gmail.com"] = "bad_token";
   tokens["AccountId-foobar@gmail.com"] = "good_token";
@@ -1025,7 +1017,7 @@
 }
 
 TEST_F(MutableProfileOAuth2TokenServiceDelegateTest, ShutdownService) {
-  InitializeOAuth2ServiceDelegate(signin::AccountConsistencyMethod::kMirror);
+  InitializeOAuth2ServiceDelegate(signin::AccountConsistencyMethod::kDice);
   EXPECT_TRUE(oauth2_service_delegate_->GetAccounts().empty());
   const CoreAccountId account_id1("account_id1");
   const CoreAccountId account_id2("account_id2");
@@ -1045,7 +1037,7 @@
 }
 
 TEST_F(MutableProfileOAuth2TokenServiceDelegateTest, GaiaIdMigration) {
-  InitializeOAuth2ServiceDelegate(signin::AccountConsistencyMethod::kMirror);
+  InitializeOAuth2ServiceDelegate(signin::AccountConsistencyMethod::kDice);
   if (account_tracker_service_.GetMigrationState() !=
       AccountTrackerService::MIGRATION_NOT_STARTED) {
     std::string email = "foo@gmail.com";
@@ -1105,7 +1097,7 @@
 
 TEST_F(MutableProfileOAuth2TokenServiceDelegateTest,
        GaiaIdMigrationCrashInTheMiddle) {
-  InitializeOAuth2ServiceDelegate(signin::AccountConsistencyMethod::kMirror);
+  InitializeOAuth2ServiceDelegate(signin::AccountConsistencyMethod::kDice);
   if (account_tracker_service_.GetMigrationState() !=
       AccountTrackerService::MIGRATION_NOT_STARTED) {
     std::string email1 = "foo@gmail.com";
@@ -1197,29 +1189,6 @@
       oauth2_service_delegate_->RefreshTokenIsAvailable(secondary_account));
 }
 
-TEST_F(MutableProfileOAuth2TokenServiceDelegateTest,
-       LoadSecondaryAccountsWhenMirrorEnabled) {
-  InitializeOAuth2ServiceDelegate(signin::AccountConsistencyMethod::kMirror);
-  CoreAccountId primary_account("primaryaccount");
-  CoreAccountId secondary_account("secondaryaccount");
-
-  oauth2_service_delegate_->RevokeAllCredentials();
-  ResetObserverCounts();
-  AddAuthTokenManually("AccountId-" + primary_account.id, "refresh_token");
-  AddAuthTokenManually("AccountId-" + secondary_account.id, "refresh_token");
-  oauth2_service_delegate_->LoadCredentials(primary_account);
-  base::RunLoop().RunUntilIdle();
-
-  EXPECT_EQ(1, tokens_loaded_count_);
-  EXPECT_EQ(2, token_available_count_);
-  EXPECT_EQ(0, token_revoked_count_);
-  EXPECT_EQ(1, end_batch_changes_);
-  EXPECT_TRUE(
-      oauth2_service_delegate_->RefreshTokenIsAvailable(primary_account));
-  EXPECT_TRUE(
-      oauth2_service_delegate_->RefreshTokenIsAvailable(secondary_account));
-}
-
 // Regression test for https://crbug.com/823707
 // Checks that OnAuthErrorChanged() is called during UpdateCredentials(), and
 // that RefreshTokenIsAvailable() can be used at this time.
diff --git a/components/signin/internal/identity_manager/profile_oauth2_token_service_builder.cc b/components/signin/internal/identity_manager/profile_oauth2_token_service_builder.cc
index 9613765f..cb0cbf83 100644
--- a/components/signin/internal/identity_manager/profile_oauth2_token_service_builder.cc
+++ b/components/signin/internal/identity_manager/profile_oauth2_token_service_builder.cc
@@ -7,10 +7,12 @@
 #include <string>
 #include <utility>
 
+#include "build/buildflag.h"
 #include "components/prefs/pref_service.h"
 #include "components/signin/internal/identity_manager/profile_oauth2_token_service.h"
 #include "components/signin/public/base/account_consistency_method.h"
 #include "components/signin/public/base/device_id_helper.h"
+#include "components/signin/public/base/signin_buildflags.h"
 #include "components/signin/public/base/signin_client.h"
 
 #if defined(OS_ANDROID)
@@ -68,7 +70,7 @@
       account_tracker_service, network_connection_tracker, account_manager,
       is_regular_profile);
 }
-#else
+#elif BUILDFLAG(ENABLE_DICE_SUPPORT)
 std::unique_ptr<MutableProfileOAuth2TokenServiceDelegate>
 CreateMutableProfileOAuthDelegate(
     AccountTrackerService* account_tracker_service,
@@ -130,7 +132,7 @@
   return CreateCrOsOAuthDelegate(account_tracker_service,
                                  network_connection_tracker, account_manager,
                                  is_regular_profile);
-#else
+#elif BUILDFLAG(ENABLE_DICE_SUPPORT)
   // Fall back to |MutableProfileOAuth2TokenServiceDelegate| on all platforms
   // other than Android, iOS, and Chrome OS.
   return CreateMutableProfileOAuthDelegate(
@@ -140,7 +142,9 @@
       reauth_callback,
 #endif  // defined(OS_WIN)
       network_connection_tracker);
-
+#else
+  NOTREACHED();
+  return nullptr;
 #endif  // defined(OS_ANDROID)
 }
 
diff --git a/components/signin/public/identity_manager/identity_manager.cc b/components/signin/public/identity_manager/identity_manager.cc
index 088a162..5447ed0 100644
--- a/components/signin/public/identity_manager/identity_manager.cc
+++ b/components/signin/public/identity_manager/identity_manager.cc
@@ -12,6 +12,7 @@
 #include "components/signin/internal/identity_manager/account_tracker_service.h"
 #include "components/signin/internal/identity_manager/gaia_cookie_manager_service.h"
 #include "components/signin/internal/identity_manager/ubertoken_fetcher_impl.h"
+#include "components/signin/public/base/signin_buildflags.h"
 #include "components/signin/public/identity_manager/accounts_cookie_mutator.h"
 #include "components/signin/public/identity_manager/accounts_in_cookie_jar_info.h"
 #include "components/signin/public/identity_manager/accounts_mutator.h"
@@ -24,7 +25,9 @@
 #include "base/android/jni_string.h"
 #include "components/signin/internal/identity_manager/android/jni_headers/IdentityManager_jni.h"
 #include "components/signin/internal/identity_manager/profile_oauth2_token_service_delegate.h"
-#elif !defined(OS_IOS)
+#endif
+
+#if BUILDFLAG(ENABLE_DICE_SUPPORT)
 #include "components/signin/internal/identity_manager/mutable_profile_oauth2_token_service_delegate.h"
 #endif
 
@@ -365,7 +368,7 @@
   AccountFetcherService::RegisterPrefs(registry);
   AccountTrackerService::RegisterPrefs(registry);
   GaiaCookieManagerService::RegisterPrefs(registry);
-#if !defined(OS_ANDROID) && !defined(OS_IOS)
+#if BUILDFLAG(ENABLE_DICE_SUPPORT)
   MutableProfileOAuth2TokenServiceDelegate::RegisterProfilePrefs(registry);
 #endif
 }
diff --git a/components/subresource_filter/content/browser/activation_state_computing_navigation_throttle_unittest.cc b/components/subresource_filter/content/browser/activation_state_computing_navigation_throttle_unittest.cc
index eeb44643..e7a53be6 100644
--- a/components/subresource_filter/content/browser/activation_state_computing_navigation_throttle_unittest.cc
+++ b/components/subresource_filter/content/browser/activation_state_computing_navigation_throttle_unittest.cc
@@ -603,10 +603,10 @@
   sub_histogram_tester.ExpectTotalCount(kActivationCPU, ExpectThreadTimers(2));
 }
 
-INSTANTIATE_TEST_SUITE_P(,
+INSTANTIATE_TEST_SUITE_P(All,
                          ActivationStateComputingNavigationThrottleTest,
                          ::testing::Values(true, false));
-INSTANTIATE_TEST_SUITE_P(,
+INSTANTIATE_TEST_SUITE_P(All,
                          ActivationStateComputingThrottleSubFrameTest,
                          ::testing::Values(true, false));
 
diff --git a/components/subresource_filter/content/browser/content_subresource_filter_throttle_manager_unittest.cc b/components/subresource_filter/content/browser/content_subresource_filter_throttle_manager_unittest.cc
index d4eff130..df355033 100644
--- a/components/subresource_filter/content/browser/content_subresource_filter_throttle_manager_unittest.cc
+++ b/components/subresource_filter/content/browser/content_subresource_filter_throttle_manager_unittest.cc
@@ -334,7 +334,7 @@
   DISALLOW_COPY_AND_ASSIGN(ContentSubresourceFilterThrottleManagerTest);
 };
 
-INSTANTIATE_TEST_SUITE_P(,
+INSTANTIATE_TEST_SUITE_P(All,
                          ContentSubresourceFilterThrottleManagerTest,
                          ::testing::Values(WILL_START_REQUEST,
                                            WILL_PROCESS_RESPONSE));
diff --git a/components/sync/BUILD.gn b/components/sync/BUILD.gn
index e68c5295..9bed749 100644
--- a/components/sync/BUILD.gn
+++ b/components/sync/BUILD.gn
@@ -88,7 +88,6 @@
     "engine/sync_backend_registrar.h",
     "engine/sync_credentials.cc",
     "engine/sync_credentials.h",
-    "engine/sync_encryption_handler.cc",
     "engine/sync_encryption_handler.h",
     "engine/sync_engine.cc",
     "engine/sync_engine.h",
diff --git a/components/sync/base/model_type.h b/components/sync/base/model_type.h
index 6e777ce..1c7104ec 100644
--- a/components/sync/base/model_type.h
+++ b/components/sync/base/model_type.h
@@ -274,6 +274,14 @@
                       SUPERVISED_USER_SETTINGS, SUPERVISED_USER_WHITELISTS);
 }
 
+// User types which are always encrypted.
+constexpr ModelTypeSet AlwaysEncryptedUserTypes() {
+  // If you add a new model type here that is conceptually different from a
+  // password, make sure you audit UI code that refers to these types as
+  // passwords, e.g. consumers of IsEncryptEverythingEnabled().
+  return ModelTypeSet(PASSWORDS, WIFI_CONFIGURATIONS);
+}
+
 // This is the subset of UserTypes() that have priority over other types.  These
 // types are synced before other user types and are never encrypted.
 constexpr ModelTypeSet PriorityUserTypes() {
@@ -315,7 +323,8 @@
   return ModelTypeSet(USER_EVENTS, USER_CONSENTS, SECURITY_EVENTS);
 }
 
-// This is the subset of UserTypes() that can be encrypted.
+// User types that can be encrypted, which is a subset of UserTypes() and a
+// superset of AlwaysEncryptedUserTypes();
 ModelTypeSet EncryptableUserTypes();
 
 // Determine a model type from the field number of its associated
diff --git a/components/sync/base/pref_names.cc b/components/sync/base/pref_names.cc
index 05547a0..8968a2e 100644
--- a/components/sync/base/pref_names.cc
+++ b/components/sync/base/pref_names.cc
@@ -38,54 +38,25 @@
 const char kSyncAllOsTypes[] = "sync.all_os_types";
 
 // Booleans specifying whether the user has selected to sync the following
-// OS datatypes.
+// OS user selectable types.
 const char kSyncOsApps[] = "sync.os_apps";
 const char kSyncOsPreferences[] = "sync.os_preferences";
 const char kSyncOsPrinters[] = "sync.os_printers";
 #endif
 
 // Booleans specifying whether the user has selected to sync the following
-// datatypes.
-const char kSyncAppList[] = "sync.app_list";
-const char kSyncAppNotifications[] = "sync.app_notifications";
-const char kSyncAppSettings[] = "sync.app_settings";
+// user selectable types.
 const char kSyncApps[] = "sync.apps";
-const char kSyncArcPackage[] = "sync.arc_package";
-const char kSyncArticles[] = "sync.articles";
-const char kSyncAutofillProfile[] = "sync.autofill_profile";
-const char kSyncAutofillWallet[] = "sync.autofill_wallet";
-const char kSyncAutofillWalletMetadata[] = "sync.autofill_wallet_metadata";
 const char kSyncAutofill[] = "sync.autofill";
 const char kSyncBookmarks[] = "sync.bookmarks";
-const char kSyncDeviceInfo[] = "sync.device_info";
-const char kSyncDictionary[] = "sync.dictionary";
-const char kSyncExtensionSettings[] = "sync.extension_settings";
 const char kSyncExtensions[] = "sync.extensions";
-const char kSyncFaviconImages[] = "sync.favicon_images";
-const char kSyncFaviconTracking[] = "sync.favicon_tracking";
-const char kSyncHistoryDeleteDirectives[] = "sync.history_delete_directives";
-const char kSyncMountainShares[] = "sync.mountain_shares";
 const char kSyncPasswords[] = "sync.passwords";
 const char kSyncPreferences[] = "sync.preferences";
-const char kSyncPriorityPreferences[] = "sync.priority_preferences";
 const char kSyncReadingList[] = "sync.reading_list";
-const char kSyncSearchEngines[] = "sync.search_engines";
-const char kSyncSessions[] = "sync.sessions";
-const char kSyncSupervisedUserSettings[] = "sync.managed_user_settings";
-const char kSyncSupervisedUserSharedSettings[] =
-    "sync.managed_user_shared_settings";
-const char kSyncSupervisedUserWhitelists[] = "sync.managed_user_whitelists";
-const char kSyncSupervisedUsers[] = "sync.managed_users";
-const char kSyncSyncedNotificationAppInfo[] =
-    "sync.synced_notification_app_info";
-const char kSyncSyncedNotifications[] = "sync.synced_notifications";
 const char kSyncTabs[] = "sync.tabs";
 const char kSyncThemes[] = "sync.themes";
 const char kSyncTypedUrls[] = "sync.typed_urls";
-const char kSyncUserConsents[] = "sync.user_consents";
-const char kSyncUserEvents[] = "sync.user_events";
 const char kSyncWifiConfigurations[] = "sync.wifi_configurations";
-const char kSyncWifiCredentials[] = "sync.wifi_credentials";
 
 // Boolean used by enterprise configuration management in order to lock down
 // sync.
diff --git a/components/sync/base/pref_names.h b/components/sync/base/pref_names.h
index b0eb391..3142b87 100644
--- a/components/sync/base/pref_names.h
+++ b/components/sync/base/pref_names.h
@@ -25,44 +25,17 @@
 extern const char kSyncOsPrinters[];
 #endif
 
-extern const char kSyncAppList[];
-extern const char kSyncAppNotifications[];
-extern const char kSyncAppSettings[];
 extern const char kSyncApps[];
-extern const char kSyncArcPackage[];
-extern const char kSyncArticles[];
-extern const char kSyncAutofillProfile[];
-extern const char kSyncAutofillWallet[];
-extern const char kSyncAutofillWalletMetadata[];
 extern const char kSyncAutofill[];
 extern const char kSyncBookmarks[];
-extern const char kSyncDeviceInfo[];
-extern const char kSyncDictionary[];
-extern const char kSyncExtensionSettings[];
 extern const char kSyncExtensions[];
-extern const char kSyncFaviconImages[];
-extern const char kSyncFaviconTracking[];
-extern const char kSyncHistoryDeleteDirectives[];
-extern const char kSyncMountainShares[];
 extern const char kSyncPasswords[];
 extern const char kSyncPreferences[];
-extern const char kSyncPriorityPreferences[];
 extern const char kSyncReadingList[];
-extern const char kSyncSearchEngines[];
-extern const char kSyncSessions[];
-extern const char kSyncSupervisedUserSettings[];
-extern const char kSyncSupervisedUserSharedSettings[];
-extern const char kSyncSupervisedUserWhitelists[];
-extern const char kSyncSupervisedUsers[];
-extern const char kSyncSyncedNotificationAppInfo[];
-extern const char kSyncSyncedNotifications[];
 extern const char kSyncTabs[];
 extern const char kSyncThemes[];
 extern const char kSyncTypedUrls[];
-extern const char kSyncUserConsents[];
-extern const char kSyncUserEvents[];
 extern const char kSyncWifiConfigurations[];
-extern const char kSyncWifiCredentials[];
 
 extern const char kSyncManaged[];
 extern const char kSyncRequested[];
diff --git a/components/sync/base/sync_prefs.cc b/components/sync/base/sync_prefs.cc
index 3276417b..fadd2ae 100644
--- a/components/sync/base/sync_prefs.cc
+++ b/components/sync/base/sync_prefs.cc
@@ -56,34 +56,67 @@
 // Obsolete pref that stored if sync shutdown cleanly.
 const char kSyncShutdownCleanly[] = "sync.shutdown_cleanly";
 
+// Obsolete prefs for data types. Can be deleted after 2020-01-30.
+const char kSyncAppList[] = "sync.app_list";
+const char kSyncAppNotifications[] = "sync.app_notifications";
+const char kSyncAppSettings[] = "sync.app_settings";
+const char kSyncArcPackage[] = "sync.arc_package";
+const char kSyncArticles[] = "sync.articles";
+const char kSyncAutofillProfile[] = "sync.autofill_profile";
+const char kSyncAutofillWallet[] = "sync.autofill_wallet";
+const char kSyncAutofillWalletMetadata[] = "sync.autofill_wallet_metadata";
+const char kSyncDeviceInfo[] = "sync.device_info";
+const char kSyncDictionary[] = "sync.dictionary";
+const char kSyncExtensionSettings[] = "sync.extension_settings";
+const char kSyncFaviconImages[] = "sync.favicon_images";
+const char kSyncFaviconTracking[] = "sync.favicon_tracking";
+const char kSyncHistoryDeleteDirectives[] = "sync.history_delete_directives";
+const char kSyncMountainShares[] = "sync.mountain_shares";
+const char kSyncPriorityPreferences[] = "sync.priority_preferences";
+const char kSyncSearchEngines[] = "sync.search_engines";
+const char kSyncSessions[] = "sync.sessions";
+const char kSyncSupervisedUsers[] = "sync.managed_users";
+const char kSyncSupervisedUserSettings[] = "sync.managed_user_settings";
+const char kSyncSupervisedUserSharedSettings[] =
+    "sync.managed_user_shared_settings";
+const char kSyncSupervisedUserWhitelists[] = "sync.managed_user_whitelists";
+const char kSyncSyncedNotificationAppInfo[] =
+    "sync.synced_notification_app_info";
+const char kSyncSyncedNotifications[] = "sync.synced_notifications";
+const char kSyncUserEvents[] = "sync.user_events";
+const char kSyncWifiCredentials[] = "sync.wifi_credentials";
+
+// Obsolete pref. Can be deleted after 2020-09-09.
+const char kSyncUserConsents[] = "sync.user_consents";
+
 std::vector<std::string> GetObsoleteUserTypePrefs() {
-  return {prefs::kSyncAutofillProfile,
-          prefs::kSyncAutofillWallet,
-          prefs::kSyncAutofillWalletMetadata,
-          prefs::kSyncSearchEngines,
-          prefs::kSyncSessions,
-          prefs::kSyncAppSettings,
-          prefs::kSyncExtensionSettings,
-          prefs::kSyncAppNotifications,
-          prefs::kSyncHistoryDeleteDirectives,
-          prefs::kSyncSyncedNotifications,
-          prefs::kSyncSyncedNotificationAppInfo,
-          prefs::kSyncDictionary,
-          prefs::kSyncFaviconImages,
-          prefs::kSyncFaviconTracking,
-          prefs::kSyncDeviceInfo,
-          prefs::kSyncPriorityPreferences,
-          prefs::kSyncSupervisedUserSettings,
-          prefs::kSyncSupervisedUsers,
-          prefs::kSyncSupervisedUserSharedSettings,
-          prefs::kSyncArticles,
-          prefs::kSyncAppList,
-          prefs::kSyncWifiCredentials,
-          prefs::kSyncSupervisedUserWhitelists,
-          prefs::kSyncArcPackage,
-          prefs::kSyncUserEvents,
-          prefs::kSyncMountainShares,
-          prefs::kSyncUserConsents};
+  return {kSyncAutofillProfile,
+          kSyncAutofillWallet,
+          kSyncAutofillWalletMetadata,
+          kSyncSearchEngines,
+          kSyncSessions,
+          kSyncAppSettings,
+          kSyncExtensionSettings,
+          kSyncAppNotifications,
+          kSyncHistoryDeleteDirectives,
+          kSyncSyncedNotifications,
+          kSyncSyncedNotificationAppInfo,
+          kSyncDictionary,
+          kSyncFaviconImages,
+          kSyncFaviconTracking,
+          kSyncDeviceInfo,
+          kSyncPriorityPreferences,
+          kSyncSupervisedUserSettings,
+          kSyncSupervisedUsers,
+          kSyncSupervisedUserSharedSettings,
+          kSyncArticles,
+          kSyncAppList,
+          kSyncWifiCredentials,
+          kSyncSupervisedUserWhitelists,
+          kSyncArcPackage,
+          kSyncUserEvents,
+          kSyncMountainShares,
+          kSyncUserConsents};
 }
 
 void RegisterObsoleteUserTypePrefs(user_prefs::PrefRegistrySyncable* registry) {
@@ -731,11 +764,11 @@
 
 void MigrateSessionsToProxyTabsPrefs(PrefService* pref_service) {
   if (pref_service->GetUserPrefValue(prefs::kSyncTabs) == nullptr &&
-      pref_service->GetUserPrefValue(prefs::kSyncSessions) != nullptr &&
+      pref_service->GetUserPrefValue(kSyncSessions) != nullptr &&
       pref_service->IsUserModifiablePreference(prefs::kSyncTabs)) {
     // If there is no tab sync preference yet (i.e. newly enabled type),
     // default to the session sync preference value.
-    bool sessions_pref_value = pref_service->GetBoolean(prefs::kSyncSessions);
+    bool sessions_pref_value = pref_service->GetBoolean(kSyncSessions);
     pref_service->SetBoolean(prefs::kSyncTabs, sessions_pref_value);
   }
 }
diff --git a/components/sync/driver/sync_service_crypto.h b/components/sync/driver/sync_service_crypto.h
index 1af4d2ee..f129127 100644
--- a/components/sync/driver/sync_service_crypto.h
+++ b/components/sync/driver/sync_service_crypto.h
@@ -137,8 +137,8 @@
     RequiredUserAction required_user_action = RequiredUserAction::kNone;
 
     // The current set of encrypted types. Always a superset of
-    // Cryptographer::SensitiveTypes().
-    ModelTypeSet encrypted_types = SyncEncryptionHandler::SensitiveTypes();
+    // AlwaysEncryptedUserTypes().
+    ModelTypeSet encrypted_types = AlwaysEncryptedUserTypes();
 
     // Whether we want to encrypt everything.
     bool encrypt_everything = false;
diff --git a/components/sync/driver/sync_user_settings_unittest.cc b/components/sync/driver/sync_user_settings_unittest.cc
index dc8313cd..021876f 100644
--- a/components/sync/driver/sync_user_settings_unittest.cc
+++ b/components/sync/driver/sync_user_settings_unittest.cc
@@ -26,6 +26,9 @@
 
 namespace {
 
+// Declared here because the pref is obsolete in production code.
+const char kSyncSessions[] = "sync.sessions";
+
 ModelTypeSet GetUserTypes() {
   ModelTypeSet user_types = UserTypes();
 #if defined(OS_CHROMEOS)
@@ -116,7 +119,7 @@
   // in proxy tabs also being enabled. Also, manually disable typed urls, which
   // should mean that history delete directives are not enabled.
   pref_service_.SetBoolean(prefs::kSyncTypedUrls, false);
-  pref_service_.SetBoolean(prefs::kSyncSessions, true);
+  pref_service_.SetBoolean(kSyncSessions, true);
   MigrateSessionsToProxyTabsPrefs(&pref_service_);
 
   preferred_types = sync_user_settings->GetPreferredDataTypes();
diff --git a/components/sync/engine/sync_encryption_handler.cc b/components/sync/engine/sync_encryption_handler.cc
deleted file mode 100644
index f716dcc..0000000
--- a/components/sync/engine/sync_encryption_handler.cc
+++ /dev/null
@@ -1,24 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "components/sync/engine/sync_encryption_handler.h"
-
-namespace syncer {
-
-SyncEncryptionHandler::Observer::Observer() {}
-SyncEncryptionHandler::Observer::~Observer() {}
-
-SyncEncryptionHandler::SyncEncryptionHandler() {}
-SyncEncryptionHandler::~SyncEncryptionHandler() {}
-
-// Static.
-ModelTypeSet SyncEncryptionHandler::SensitiveTypes() {
-  ModelTypeSet types;
-  types.Put(PASSWORDS);  // Has its own encryption, but include it anyway.
-  types.Put(
-      WIFI_CONFIGURATIONS);  // Has its own encryption, but include it anyway.
-  return types;
-}
-
-}  // namespace syncer
diff --git a/components/sync/engine/sync_encryption_handler.h b/components/sync/engine/sync_encryption_handler.h
index e0a3fc9..aa7c3ba 100644
--- a/components/sync/engine/sync_encryption_handler.h
+++ b/components/sync/engine/sync_encryption_handler.h
@@ -52,8 +52,8 @@
   // on the sync thread.
   class Observer {
    public:
-    Observer();
-    virtual ~Observer();
+    Observer() = default;
+    virtual ~Observer() = default;
 
     // Called when user interaction is required to obtain a valid passphrase.
     // - If the passphrase is required for encryption, |reason| will be
@@ -103,12 +103,12 @@
     // sent (see below).
     //
     // |encrypted_types| will always be a superset of
-    // Cryptographer::SensitiveTypes().  If |encrypt_everything| is
+    // AlwaysEncryptedUserTypes().  If |encrypt_everything| is
     // true, |encrypted_types| will be the set of all known types.
     //
     // Until this function is called, observers can assume that the
-    // set of encrypted types is Cryptographer::SensitiveTypes() and
-    // that the encrypt everything flag is false.
+    // set of encrypted types is AlwaysEncryptedUserTypes() and that the
+    // encrypt everything flag is false.
     virtual void OnEncryptedTypesChanged(ModelTypeSet encrypted_types,
                                          bool encrypt_everything) = 0;
 
@@ -135,8 +135,8 @@
         const sync_pb::NigoriSpecifics& specifics) {}
   };
 
-  SyncEncryptionHandler();
-  virtual ~SyncEncryptionHandler();
+  SyncEncryptionHandler() = default;
+  virtual ~SyncEncryptionHandler() = default;
 
   // Add/Remove SyncEncryptionHandler::Observers.
   virtual void AddObserver(Observer* observer) = 0;
@@ -194,9 +194,6 @@
   // Returns the last known keystore key or an empty string if none available.
   // TODO(crbug.com/1012226): Remove API when VAPID migration is over.
   virtual std::string GetLastKeystoreKey() const = 0;
-
-  // The set of types that are always encrypted.
-  static ModelTypeSet SensitiveTypes();
 };
 
 }  // namespace syncer
diff --git a/components/sync/engine_impl/apply_control_data_updates_unittest.cc b/components/sync/engine_impl/apply_control_data_updates_unittest.cc
index 56d642b..757fabe 100644
--- a/components/sync/engine_impl/apply_control_data_updates_unittest.cc
+++ b/components/sync/engine_impl/apply_control_data_updates_unittest.cc
@@ -78,7 +78,7 @@
   // know it's safe.
   DirectoryCryptographer* cryptographer;
   ModelTypeSet encrypted_types;
-  encrypted_types.PutAll(SyncEncryptionHandler::SensitiveTypes());
+  encrypted_types.PutAll(AlwaysEncryptedUserTypes());
 
   {
     syncable::ReadTransaction trans(FROM_HERE, directory());
@@ -121,7 +121,7 @@
   // know it's safe.
   DirectoryCryptographer* cryptographer;
   ModelTypeSet encrypted_types;
-  encrypted_types.PutAll(SyncEncryptionHandler::SensitiveTypes());
+  encrypted_types.PutAll(AlwaysEncryptedUserTypes());
   {
     syncable::ReadTransaction trans(FROM_HERE, directory());
     cryptographer = GetCryptographer(&trans);
@@ -232,7 +232,7 @@
   // know it's safe.
   DirectoryCryptographer* cryptographer;
   ModelTypeSet encrypted_types;
-  encrypted_types.PutAll(SyncEncryptionHandler::SensitiveTypes());
+  encrypted_types.PutAll(AlwaysEncryptedUserTypes());
   {
     syncable::ReadTransaction trans(FROM_HERE, directory());
     cryptographer = GetCryptographer(&trans);
@@ -317,7 +317,7 @@
 TEST_F(ApplyControlDataUpdatesTest,
        NigoriConflictPendingKeysServerEncryptEverythingCustom) {
   DirectoryCryptographer* cryptographer;
-  ModelTypeSet encrypted_types(SyncEncryptionHandler::SensitiveTypes());
+  ModelTypeSet encrypted_types(AlwaysEncryptedUserTypes());
   KeyParams other_params = {KeyDerivationParams::CreateForPbkdf2(), "foobar"};
   KeyParams local_params = {KeyDerivationParams::CreateForPbkdf2(), "local"};
   {
@@ -394,7 +394,7 @@
 TEST_F(ApplyControlDataUpdatesTest,
        NigoriConflictPendingKeysLocalEncryptEverythingCustom) {
   DirectoryCryptographer* cryptographer;
-  ModelTypeSet encrypted_types(SyncEncryptionHandler::SensitiveTypes());
+  ModelTypeSet encrypted_types(AlwaysEncryptedUserTypes());
   KeyParams other_params = {KeyDerivationParams::CreateForPbkdf2(), "foobar"};
   KeyParams local_params = {KeyDerivationParams::CreateForPbkdf2(), "local"};
   {
@@ -470,7 +470,7 @@
 // set.
 TEST_F(ApplyControlDataUpdatesTest, NigoriConflictOldKeys) {
   DirectoryCryptographer* cryptographer;
-  ModelTypeSet encrypted_types(SyncEncryptionHandler::SensitiveTypes());
+  ModelTypeSet encrypted_types(AlwaysEncryptedUserTypes());
   KeyParams old_params = {KeyDerivationParams::CreateForPbkdf2(), "old"};
   KeyParams new_params = {KeyDerivationParams::CreateForPbkdf2(), "new"};
   {
@@ -538,7 +538,7 @@
 // the local nigori should be preserved.
 TEST_F(ApplyControlDataUpdatesTest, NigoriConflictBothMigratedLocalCustom) {
   DirectoryCryptographer* cryptographer;
-  ModelTypeSet encrypted_types(SyncEncryptionHandler::SensitiveTypes());
+  ModelTypeSet encrypted_types(AlwaysEncryptedUserTypes());
   KeyParams old_params = {KeyDerivationParams::CreateForPbkdf2(), "old"};
   KeyParams new_params = {KeyDerivationParams::CreateForPbkdf2(), "new"};
   {
@@ -619,7 +619,7 @@
 // set remotely, the remote nigori should be preserved.
 TEST_F(ApplyControlDataUpdatesTest, NigoriConflictBothMigratedServerCustom) {
   DirectoryCryptographer* cryptographer;
-  ModelTypeSet encrypted_types(SyncEncryptionHandler::SensitiveTypes());
+  ModelTypeSet encrypted_types(AlwaysEncryptedUserTypes());
   KeyParams old_params = {KeyDerivationParams::CreateForPbkdf2(), "old"};
   KeyParams new_params = {KeyDerivationParams::CreateForPbkdf2(), "new"};
   {
@@ -701,7 +701,7 @@
 // nigori.
 TEST_F(ApplyControlDataUpdatesTest, NigoriConflictLocalMigrated) {
   DirectoryCryptographer* cryptographer;
-  ModelTypeSet encrypted_types(SyncEncryptionHandler::SensitiveTypes());
+  ModelTypeSet encrypted_types(AlwaysEncryptedUserTypes());
   KeyParams old_params = {KeyDerivationParams::CreateForPbkdf2(), "old"};
   KeyParams new_params = {KeyDerivationParams::CreateForPbkdf2(), "new"};
   {
@@ -779,7 +779,7 @@
 // nigori.
 TEST_F(ApplyControlDataUpdatesTest, NigoriConflictServerMigrated) {
   DirectoryCryptographer* cryptographer;
-  ModelTypeSet encrypted_types(SyncEncryptionHandler::SensitiveTypes());
+  ModelTypeSet encrypted_types(AlwaysEncryptedUserTypes());
   KeyParams old_params = {KeyDerivationParams::CreateForPbkdf2(), "old"};
   KeyParams new_params = {KeyDerivationParams::CreateForPbkdf2(), "new"};
   {
diff --git a/components/sync/engine_impl/sync_encryption_handler_impl.cc b/components/sync/engine_impl/sync_encryption_handler_impl.cc
index 09fd0020..2edde68 100644
--- a/components/sync/engine_impl/sync_encryption_handler_impl.cc
+++ b/components/sync/engine_impl/sync_encryption_handler_impl.cc
@@ -299,7 +299,7 @@
     const base::RepeatingCallback<std::string()>& random_salt_generator)
     : user_share_(user_share),
       encryptor_(encryptor),
-      vault_unsafe_(SensitiveTypes(), kInitialPassphraseType),
+      vault_unsafe_(AlwaysEncryptedUserTypes(), kInitialPassphraseType),
       encrypt_everything_(false),
       nigori_overwrite_count_(0),
       random_salt_generator_(random_salt_generator),
@@ -1297,13 +1297,13 @@
 
   ModelTypeSet nigori_encrypted_types;
   nigori_encrypted_types = syncable::GetEncryptedTypesFromNigori(nigori);
-  nigori_encrypted_types.PutAll(SensitiveTypes());
+  nigori_encrypted_types.PutAll(AlwaysEncryptedUserTypes());
 
   // If anything more than the sensitive types were encrypted, and
   // encrypt_everything is not explicitly set to false, we assume it means
   // a client intended to enable encrypt everything.
   if (!nigori.has_encrypt_everything() &&
-      !Difference(nigori_encrypted_types, SensitiveTypes()).Empty()) {
+      !Difference(nigori_encrypted_types, AlwaysEncryptedUserTypes()).Empty()) {
     if (!encrypt_everything_) {
       encrypt_everything_ = true;
       *encrypted_types = EncryptableUserTypes();
diff --git a/components/sync/engine_impl/sync_encryption_handler_impl_unittest.cc b/components/sync/engine_impl/sync_encryption_handler_impl_unittest.cc
index d5c37bd..29ccfd8c 100644
--- a/components/sync/engine_impl/sync_encryption_handler_impl_unittest.cc
+++ b/components/sync/engine_impl/sync_encryption_handler_impl_unittest.cc
@@ -607,7 +607,7 @@
   handler2.AddObserver(&observer2);
 
   // Just set the sensitive types (shouldn't trigger any notifications).
-  ModelTypeSet encrypted_types(SyncEncryptionHandler::SensitiveTypes());
+  ModelTypeSet encrypted_types(AlwaysEncryptedUserTypes());
   {
     WriteTransaction trans(FROM_HERE, user_share());
     encryption_handler()->MergeEncryptedTypes(encrypted_types,
@@ -730,8 +730,7 @@
   nigori.set_encrypt_everything(false);
   nigori.set_encrypt_bookmarks(true);
 
-  ModelTypeSet expected_encrypted_types =
-      SyncEncryptionHandler::SensitiveTypes();
+  ModelTypeSet expected_encrypted_types = AlwaysEncryptedUserTypes();
   expected_encrypted_types.Put(BOOKMARKS);
 
   EXPECT_CALL(*observer(), OnEncryptedTypesChanged(
diff --git a/components/sync/engine_impl/sync_manager_impl_unittest.cc b/components/sync/engine_impl/sync_manager_impl_unittest.cc
index 957a84f5..403ae66 100644
--- a/components/sync/engine_impl/sync_manager_impl_unittest.cc
+++ b/components/sync/engine_impl/sync_manager_impl_unittest.cc
@@ -25,6 +25,7 @@
 #include "components/sync/base/extensions_activity.h"
 #include "components/sync/base/fake_encryptor.h"
 #include "components/sync/base/mock_unrecoverable_error_handler.h"
+#include "components/sync/base/model_type.h"
 #include "components/sync/base/model_type_test_util.h"
 #include "components/sync/engine/engine_util.h"
 #include "components/sync/engine/events/protocol_event.h"
@@ -1302,8 +1303,7 @@
 
   {
     ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare());
-    EXPECT_EQ(SyncEncryptionHandler::SensitiveTypes(),
-              GetEncryptedTypesWithTrans(&trans));
+    EXPECT_EQ(AlwaysEncryptedUserTypes(), GetEncryptedTypesWithTrans(&trans));
     EXPECT_TRUE(syncable::VerifyDataTypeEncryptionForTest(
         trans.GetWrappedTrans(), BOOKMARKS, false /* not encrypted */));
     EXPECT_TRUE(syncable::VerifyDataTypeEncryptionForTest(
diff --git a/components/sync/nigori/nigori_state.cc b/components/sync/nigori/nigori_state.cc
index acbee82..d52e3aa3 100644
--- a/components/sync/nigori/nigori_state.cc
+++ b/components/sync/nigori/nigori_state.cc
@@ -190,7 +190,7 @@
             *custom_passphrase_key_derivation_params);
   }
   proto.set_encrypt_everything(encrypt_everything);
-  ModelTypeSet encrypted_types = SyncEncryptionHandler::SensitiveTypes();
+  ModelTypeSet encrypted_types = AlwaysEncryptedUserTypes();
   if (encrypt_everything) {
     encrypted_types = EncryptableUserTypes();
   }
diff --git a/components/sync/nigori/nigori_sync_bridge_impl.cc b/components/sync/nigori/nigori_sync_bridge_impl.cc
index ecc6aea..3fedf858 100644
--- a/components/sync/nigori/nigori_sync_bridge_impl.cc
+++ b/components/sync/nigori/nigori_sync_bridge_impl.cc
@@ -292,7 +292,7 @@
   if (encrypt_everything) {
     return EncryptableUserTypes();
   }
-  return SyncEncryptionHandler::SensitiveTypes();
+  return AlwaysEncryptedUserTypes();
 }
 
 }  // namespace
@@ -1025,7 +1025,8 @@
   broadcasting_observer_->OnCryptographerStateChanged(
       state_.cryptographer.get(),
       /*has_pending_keys=*/false);
-  broadcasting_observer_->OnEncryptedTypesChanged(SensitiveTypes(), false);
+  broadcasting_observer_->OnEncryptedTypesChanged(AlwaysEncryptedUserTypes(),
+                                                  false);
 }
 
 const CryptographerImpl& NigoriSyncBridgeImpl::GetCryptographerForTesting()
diff --git a/components/sync/nigori/nigori_sync_bridge_impl_unittest.cc b/components/sync/nigori/nigori_sync_bridge_impl_unittest.cc
index a99b5da8..bfaed48 100644
--- a/components/sync/nigori/nigori_sync_bridge_impl_unittest.cc
+++ b/components/sync/nigori/nigori_sync_bridge_impl_unittest.cc
@@ -391,7 +391,7 @@
   // TODO(crbug.com/922900): once persistence is supported for Nigori, this
   // test should be extended to verify whole encryption state.
   EXPECT_CALL(*observer(),
-              OnEncryptedTypesChanged(SyncEncryptionHandler::SensitiveTypes(),
+              OnEncryptedTypesChanged(AlwaysEncryptedUserTypes(),
                                       /*encrypt_everything=*/false));
   bridge()->Init();
 }
@@ -1235,7 +1235,7 @@
   EXPECT_THAT(bridge()->GetPassphraseTypeForTesting(),
               Eq(sync_pb::NigoriSpecifics::TRUSTED_VAULT_PASSPHRASE));
   EXPECT_THAT(bridge()->GetEncryptedTypesForTesting(),
-              Eq(SyncEncryptionHandler::SensitiveTypes()));
+              Eq(AlwaysEncryptedUserTypes()));
   EXPECT_TRUE(bridge()->HasPendingKeysForTesting());
 
   EXPECT_CALL(*observer(), OnTrustedVaultKeyAccepted());
@@ -1283,7 +1283,7 @@
   EXPECT_THAT(bridge()->GetPassphraseTypeForTesting(),
               Eq(sync_pb::NigoriSpecifics::TRUSTED_VAULT_PASSPHRASE));
   EXPECT_THAT(bridge()->GetEncryptedTypesForTesting(),
-              Eq(SyncEncryptionHandler::SensitiveTypes()));
+              Eq(AlwaysEncryptedUserTypes()));
   EXPECT_TRUE(bridge()->HasPendingKeysForTesting());
 
   EXPECT_CALL(*observer(), OnTrustedVaultKeyAccepted());
diff --git a/components/sync/syncable/nigori_handler_proxy.cc b/components/sync/syncable/nigori_handler_proxy.cc
index e644fc8..2e04198 100644
--- a/components/sync/syncable/nigori_handler_proxy.cc
+++ b/components/sync/syncable/nigori_handler_proxy.cc
@@ -4,6 +4,7 @@
 
 #include "components/sync/syncable/nigori_handler_proxy.h"
 
+#include "components/sync/base/model_type.h"
 #include "components/sync/syncable/directory_cryptographer.h"
 #include "components/sync/syncable/syncable_base_transaction.h"
 #include "components/sync/syncable/user_share.h"
@@ -16,7 +17,7 @@
 NigoriHandlerProxy::NigoriHandlerProxy(UserShare* user_share)
     : user_share_(user_share),
       cryptographer_(std::make_unique<DirectoryCryptographer>()),
-      encrypted_types_(SyncEncryptionHandler::SensitiveTypes()),
+      encrypted_types_(AlwaysEncryptedUserTypes()),
       passphrase_type_(SyncEncryptionHandler::kInitialPassphraseType) {
   DCHECK(user_share);
 }
diff --git a/components/sync/test/fake_sync_encryption_handler.cc b/components/sync/test/fake_sync_encryption_handler.cc
index 8bf8d20..1364fa26 100644
--- a/components/sync/test/fake_sync_encryption_handler.cc
+++ b/components/sync/test/fake_sync_encryption_handler.cc
@@ -4,6 +4,7 @@
 
 #include "components/sync/test/fake_sync_encryption_handler.h"
 
+#include "components/sync/base/model_type.h"
 #include "components/sync/base/passphrase_enums.h"
 #include "components/sync/protocol/nigori_specifics.pb.h"
 #include "components/sync/syncable/nigori_util.h"
@@ -11,7 +12,7 @@
 namespace syncer {
 
 FakeSyncEncryptionHandler::FakeSyncEncryptionHandler()
-    : encrypted_types_(SensitiveTypes()),
+    : encrypted_types_(AlwaysEncryptedUserTypes()),
       encrypt_everything_(false),
       passphrase_type_(PassphraseType::kImplicitPassphrase) {}
 FakeSyncEncryptionHandler::~FakeSyncEncryptionHandler() {}
diff --git a/components/update_client/BUILD.gn b/components/update_client/BUILD.gn
index f46cf4ff..ef7710f7 100644
--- a/components/update_client/BUILD.gn
+++ b/components/update_client/BUILD.gn
@@ -57,7 +57,6 @@
   sources = [
     "action_runner.cc",
     "action_runner.h",
-    "action_runner_win.cc",
     "activity_data_service.h",
     "background_downloader_win.cc",
     "background_downloader_win.h",
diff --git a/components/update_client/action_runner.cc b/components/update_client/action_runner.cc
index 1d31ddb3..54a43f1 100644
--- a/components/update_client/action_runner.cc
+++ b/components/update_client/action_runner.cc
@@ -4,105 +4,61 @@
 
 #include "components/update_client/action_runner.h"
 
-#include <iterator>
 #include <utility>
 
 #include "base/bind.h"
-#include "base/command_line.h"
-#include "base/files/file_util.h"
+#include "base/files/file_path.h"
 #include "base/location.h"
-#include "base/logging.h"
 #include "base/task/post_task.h"
 #include "base/threading/thread_task_runner_handle.h"
-#include "build/build_config.h"
-#include "components/crx_file/crx_verifier.h"
 #include "components/update_client/component.h"
-#include "components/update_client/configurator.h"
-#include "components/update_client/patcher.h"
 #include "components/update_client/task_traits.h"
-#include "components/update_client/unzipper.h"
-#include "components/update_client/update_client.h"
-#include "components/update_client/update_engine.h"
 
 namespace update_client {
 
 ActionRunner::ActionRunner(const Component& component)
-    : is_per_user_install_(component.config()->IsPerUserInstall()),
-      component_(component),
+    : component_(component),
       main_task_runner_(base::ThreadTaskRunnerHandle::Get()) {}
 
 ActionRunner::~ActionRunner() {
   DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
 }
 
-void ActionRunner::Run(Callback run_complete) {
+void ActionRunner::Run(Callback callback) {
   DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
 
-  run_complete_ = std::move(run_complete);
-
-  base::CreateSequencedTaskRunner(kTaskTraits)
-      ->PostTask(
-          FROM_HERE,
-          base::BindOnce(&ActionRunner::RunOnTaskRunner, base::Unretained(this),
-                         component_.config()->GetUnzipperFactory()->Create(),
-                         component_.config()->GetPatcherFactory()->Create()));
-}
-
-void ActionRunner::RunOnTaskRunner(std::unique_ptr<Unzipper> unzip,
-                                   scoped_refptr<Patcher> patch) {
-  const auto installer = component_.crx_component()->installer;
-
-  base::FilePath crx_path;
-  installer->GetInstalledFile(component_.action_run(), &crx_path);
-
-  if (!is_per_user_install_) {
-    RunRecoveryCRXElevated(std::move(crx_path));
-    return;
-  }
-
-  const auto config = component_.config();
-  auto unpacker = base::MakeRefCounted<ComponentUnpacker>(
-      config->GetRunActionKeyHash(), crx_path, installer, std::move(unzip),
-      std::move(patch), component_.crx_component()->crx_format_requirement);
-  unpacker->Unpack(
-      base::BindOnce(&ActionRunner::UnpackComplete, base::Unretained(this)));
-}
-
-void ActionRunner::UnpackComplete(const ComponentUnpacker::Result& result) {
-  if (result.error != UnpackerError::kNone) {
-    DCHECK(!base::DirectoryExists(result.unpack_path));
-
+  auto action_handler = component_.crx_component()->action_handler;
+  if (!action_handler) {
+    DVLOG(1) << component_.action_run() << " is missing an action handler";
     main_task_runner_->PostTask(
-        FROM_HERE,
-        base::BindOnce(std::move(run_complete_), false,
-                       static_cast<int>(result.error), result.extended_error));
+        FROM_HERE, base::BindOnce(std::move(callback), false, -1, 0));
     return;
   }
 
-  unpack_path_ = result.unpack_path;
-  base::SequencedTaskRunnerHandle::Get()->PostTask(
-      FROM_HERE,
-      base::BindOnce(&ActionRunner::RunCommand, base::Unretained(this),
-                     MakeCommandLine(result.unpack_path)));
+  callback_ = std::move(callback);
+
+  // Resolve an absolute path for the file referred by the run action.
+  base::PostTaskAndReplyWithResult(
+      FROM_HERE, kTaskTraits,
+      base::BindOnce(
+          [](const Component* component) {
+            base::FilePath crx_path;
+            component->crx_component()->installer->GetInstalledFile(
+                component->action_run(), &crx_path);
+            return crx_path;
+          },
+          base::Unretained(&component_)),
+      base::BindOnce(&ActionRunner::Handle, base::Unretained(this)));
 }
 
-#if !defined(OS_WIN)
+void ActionRunner::Handle(const base::FilePath& crx_path) {
+  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
 
-void ActionRunner::RunRecoveryCRXElevated(const base::FilePath& crx_path) {
-  NOTREACHED();
+  auto action_handler = component_.crx_component()->action_handler;
+  DCHECK(action_handler);
+
+  action_handler->Handle(crx_path, component_.session_id(),
+                         std::move(callback_));
 }
 
-void ActionRunner::RunCommand(const base::CommandLine& cmdline) {
-  base::DeleteFileRecursively(unpack_path_);
-  main_task_runner_->PostTask(
-      FROM_HERE, base::BindOnce(std::move(run_complete_), false, -1, 0));
-}
-
-base::CommandLine ActionRunner::MakeCommandLine(
-    const base::FilePath& unpack_path) const {
-  return base::CommandLine(base::CommandLine::NO_PROGRAM);
-}
-
-#endif  // OS_WIN
-
 }  // namespace update_client
diff --git a/components/update_client/action_runner.h b/components/update_client/action_runner.h
index ee41890..a2f3174 100644
--- a/components/update_client/action_runner.h
+++ b/components/update_client/action_runner.h
@@ -5,25 +5,14 @@
 #ifndef COMPONENTS_UPDATE_CLIENT_ACTION_RUNNER_H_
 #define COMPONENTS_UPDATE_CLIENT_ACTION_RUNNER_H_
 
-#include <stdint.h>
-
-#include <memory>
-#include <utility>
-#include <vector>
-
 #include "base/callback.h"
-#include "base/files/file_path.h"
-#include "base/macros.h"
-#include "base/memory/ref_counted.h"
 #include "base/threading/thread_checker.h"
-#include "build/build_config.h"
-#include "components/update_client/component_unpacker.h"
+#include "components/update_client/update_client.h"
 
 namespace base {
-class CommandLine;
-class Process;
+class FilePath;
 class SingleThreadTaskRunner;
-}
+}  // namespace base
 
 namespace update_client {
 
@@ -31,8 +20,7 @@
 
 class ActionRunner {
  public:
-  using Callback =
-      base::OnceCallback<void(bool succeeded, int error_code, int extra_code1)>;
+  using Callback = ActionHandler::Callback;
 
   explicit ActionRunner(const Component& component);
   ~ActionRunner();
@@ -40,34 +28,19 @@
   void Run(Callback run_complete);
 
  private:
-  void RunOnTaskRunner(std::unique_ptr<Unzipper> unzipper,
-                       scoped_refptr<Patcher> patcher);
-  void UnpackComplete(const ComponentUnpacker::Result& result);
+  void Handle(const base::FilePath& crx_path);
 
-  void RunCommand(const base::CommandLine& cmdline);
-  void RunRecoveryCRXElevated(const base::FilePath& crx_path);
+  THREAD_CHECKER(thread_checker_);
 
-  base::CommandLine MakeCommandLine(const base::FilePath& unpack_path) const;
-
-  void WaitForCommand(base::Process process);
-
-#if defined(OS_WIN)
-  void RunRecoveryCRXElevatedInSTA(const base::FilePath& crx_path);
-#endif
-
-  bool is_per_user_install_ = false;
   const Component& component_;
 
   // Used to post callbacks to the main thread.
   scoped_refptr<base::SingleThreadTaskRunner> main_task_runner_;
 
-  // Contains the unpack path for the component associated with the run action.
-  base::FilePath unpack_path_;
+  Callback callback_;
 
-  Callback run_complete_;
-
-  THREAD_CHECKER(thread_checker_);
-  DISALLOW_COPY_AND_ASSIGN(ActionRunner);
+  ActionRunner(const ActionRunner&) = delete;
+  ActionRunner& operator=(const ActionRunner&) = delete;
 };
 
 }  // namespace update_client
diff --git a/components/update_client/action_runner_win.cc b/components/update_client/action_runner_win.cc
deleted file mode 100644
index 84fd057..0000000
--- a/components/update_client/action_runner_win.cc
+++ /dev/null
@@ -1,90 +0,0 @@
-// Copyright 2017 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "components/update_client/action_runner.h"
-
-#include <tuple>
-#include <utility>
-
-#include "base/bind.h"
-#include "base/callback.h"
-#include "base/command_line.h"
-#include "base/files/file_util.h"
-#include "base/location.h"
-#include "base/process/launch.h"
-#include "base/process/process.h"
-#include "base/single_thread_task_runner.h"
-#include "base/task/post_task.h"
-#include "components/update_client/component.h"
-#include "components/update_client/configurator.h"
-#include "components/update_client/task_traits.h"
-
-namespace {
-
-const base::FilePath::CharType kRecoveryFileName[] =
-    FILE_PATH_LITERAL("ChromeRecovery.exe");
-
-}  // namespace
-
-namespace update_client {
-
-void ActionRunner::RunCommand(const base::CommandLine& cmdline) {
-  base::LaunchOptions options;
-  options.start_hidden = true;
-  base::Process process = base::LaunchProcess(cmdline, options);
-
-  base::PostTask(FROM_HERE, kTaskTraitsRunCommand,
-                 base::BindOnce(&ActionRunner::WaitForCommand,
-                                base::Unretained(this), std::move(process)));
-}
-
-void ActionRunner::WaitForCommand(base::Process process) {
-  int exit_code = 0;
-  const base::TimeDelta kMaxWaitTime = base::TimeDelta::FromSeconds(600);
-  const bool succeeded =
-      process.WaitForExitWithTimeout(kMaxWaitTime, &exit_code);
-  base::DeleteFileRecursively(unpack_path_);
-  main_task_runner_->PostTask(
-      FROM_HERE,
-      base::BindOnce(std::move(run_complete_), succeeded, exit_code, 0));
-}
-
-base::CommandLine ActionRunner::MakeCommandLine(
-    const base::FilePath& unpack_path) const {
-  base::CommandLine command_line(unpack_path.Append(kRecoveryFileName));
-  if (!is_per_user_install_)
-    command_line.AppendSwitch("system");
-  command_line.AppendSwitchASCII(
-      "browser-version", component_.config()->GetBrowserVersion().GetString());
-  command_line.AppendSwitchASCII("sessionid", component_.session_id());
-  const auto app_guid = component_.config()->GetAppGuid();
-  if (!app_guid.empty())
-    command_line.AppendSwitchASCII("appguid", app_guid);
-  VLOG(1) << "run action: " << command_line.GetCommandLineString();
-  return command_line;
-}
-
-void ActionRunner::RunRecoveryCRXElevated(const base::FilePath& crx_path) {
-  base::CreateCOMSTATaskRunner(
-      kTaskTraitsRunCommand, base::SingleThreadTaskRunnerThreadMode::DEDICATED)
-      ->PostTask(FROM_HERE,
-                 base::BindOnce(&ActionRunner::RunRecoveryCRXElevatedInSTA,
-                                base::Unretained(this), crx_path));
-}
-
-void ActionRunner::RunRecoveryCRXElevatedInSTA(const base::FilePath& crx_path) {
-  bool succeeded = false;
-  int error_code = 0;
-  int extra_code = 0;
-  const auto config = component_.config();
-  std::tie(succeeded, error_code, extra_code) =
-      component_.config()->GetRecoveryCRXElevator().Run(
-          crx_path, config->GetAppGuid(),
-          config->GetBrowserVersion().GetString(), component_.session_id());
-  main_task_runner_->PostTask(
-      FROM_HERE, base::BindOnce(std::move(run_complete_), succeeded, error_code,
-                                extra_code));
-}
-
-}  // namespace update_client
diff --git a/components/update_client/component_patcher.h b/components/update_client/component_patcher.h
index e31a812..fe721f9 100644
--- a/components/update_client/component_patcher.h
+++ b/components/update_client/component_patcher.h
@@ -43,6 +43,7 @@
 
 class CrxInstaller;
 class DeltaUpdateOp;
+class Patcher;
 enum class UnpackerError;
 
 // The type of a patch file.
diff --git a/components/update_client/update_client.h b/components/update_client/update_client.h
index b9f5b4f4..93af4de3 100644
--- a/components/update_client/update_client.h
+++ b/components/update_client/update_client.h
@@ -211,6 +211,25 @@
   virtual ~CrxInstaller() {}
 };
 
+// Defines an interface to handle |action| elements in the update response.
+// The current implementation only handles run actions bound to a CRX, meaning
+// that such CRX is unpacked and an executable file, contained inside the CRX,
+// is run, then the results of the invocation are collected by the callback.
+class ActionHandler : public base::RefCountedThreadSafe<ActionHandler> {
+ public:
+  using Callback =
+      base::OnceCallback<void(bool succeeded, int error_code, int extra_code1)>;
+
+  virtual void Handle(const base::FilePath& action,
+                      const std::string& session_id,
+                      Callback callback) = 0;
+
+ protected:
+  friend class base::RefCountedThreadSafe<ActionHandler>;
+
+  virtual ~ActionHandler() = default;
+};
+
 // A dictionary of installer-specific, arbitrary name-value pairs, which
 // may be used in the update checks requests.
 using InstallerAttributes = std::map<std::string, std::string>;
@@ -228,6 +247,8 @@
   std::vector<uint8_t> pk_hash;
 
   scoped_refptr<CrxInstaller> installer;
+  scoped_refptr<ActionHandler> action_handler;
+
   std::string app_id;
 
   // The current version if the CRX is updated. Otherwise, "0" or "0.0" if
diff --git a/components/update_client/update_client_unittest.cc b/components/update_client/update_client_unittest.cc
index c986dd6..c91cc18 100644
--- a/components/update_client/update_client_unittest.cc
+++ b/components/update_client/update_client_unittest.cc
@@ -81,16 +81,31 @@
   MOCK_METHOD2(OnEvent, void(Events event, const std::string&));
 };
 
+class MockActionHandler : public ActionHandler {
+ public:
+  MockActionHandler() = default;
+
+  MOCK_METHOD3(Handle,
+               void(const base::FilePath&, const std::string&, Callback));
+
+ private:
+  ~MockActionHandler() override = default;
+
+  MockActionHandler(const MockActionHandler&) = delete;
+  MockActionHandler& operator=(const MockActionHandler&) = delete;
+};
+
 }  // namespace
 
 using ::testing::_;
-using ::testing::AtLeast;
 using ::testing::AnyNumber;
+using ::testing::AtLeast;
 using ::testing::DoAll;
 using ::testing::InSequence;
 using ::testing::Invoke;
 using ::testing::Mock;
 using ::testing::Return;
+using ::testing::Unused;
 
 using std::string;
 
@@ -3591,8 +3606,6 @@
   update_client->RemoveObserver(&observer);
 }
 
-#if defined(OS_WIN)  // ActionRun is only implemented on Windows.
-
 // Tests that a run action in invoked in the CRX install scenario.
 TEST_F(UpdateClientTest, ActionRun_Install) {
   class MockUpdateChecker : public UpdateChecker {
@@ -3752,15 +3765,26 @@
           config(), base::MakeRefCounted<MockPingManager>(config()),
           &MockUpdateChecker::Create, &MockCrxDownloader::Create);
 
-  // The action is a program which returns 1877345072 as a hardcoded value.
   update_client->Install(
       std::string("gjpmebpgbhcamgdgjcmnjfhggjpgcimm"),
       base::BindOnce([](const std::vector<std::string>& ids) {
+        auto action_handler = base::MakeRefCounted<MockActionHandler>();
+        EXPECT_CALL(*action_handler, Handle(_, _, _))
+            .WillOnce([](const base::FilePath& action,
+                         const std::string& session_id,
+                         ActionHandler::Callback callback) {
+              EXPECT_EQ("ChromeRecovery.crx3",
+                        action.BaseName().MaybeAsASCII());
+              EXPECT_TRUE(!session_id.empty());
+              std::move(callback).Run(true, 1877345072, 0);
+            });
+
         CrxComponent crx;
         crx.name = "test_niea";
         crx.pk_hash.assign(gjpm_hash, gjpm_hash + base::size(gjpm_hash));
         crx.version = base::Version("0.0");
         crx.installer = base::MakeRefCounted<VersionedTestInstaller>();
+        crx.action_handler = action_handler;
         crx.crx_format_requirement = crx_file::VerifierFormat::CRX3;
         return std::vector<base::Optional<CrxComponent>>{crx};
       }),
@@ -3857,8 +3881,8 @@
     }
   };
 
-  // Unpack the CRX to mock an existing install to be updated. The payload to
-  // run is going to be picked up from this directory.
+  // Unpack the CRX to mock an existing install to be updated. The action to
+  // run is going to be resolved relative to this directory.
   base::FilePath unpack_path;
   {
     base::RunLoop runloop;
@@ -3899,19 +3923,30 @@
           config(), base::MakeRefCounted<MockPingManager>(config()),
           &MockUpdateChecker::Create, &MockCrxDownloader::Create);
 
-  // The action is a program which returns 1877345072 as a hardcoded value.
   const std::vector<std::string> ids = {"gjpmebpgbhcamgdgjcmnjfhggjpgcimm"};
   update_client->Update(
       ids,
       base::BindOnce(
           [](const base::FilePath& unpack_path,
              const std::vector<std::string>& ids) {
+            auto action_handler = base::MakeRefCounted<MockActionHandler>();
+            EXPECT_CALL(*action_handler, Handle(_, _, _))
+                .WillOnce([](const base::FilePath& action,
+                             const std::string& session_id,
+                             ActionHandler::Callback callback) {
+                  EXPECT_EQ("ChromeRecovery.crx3",
+                            action.BaseName().MaybeAsASCII());
+                  EXPECT_TRUE(!session_id.empty());
+                  std::move(callback).Run(true, 1877345072, 0);
+                });
+
             CrxComponent crx;
             crx.name = "test_niea";
             crx.pk_hash.assign(gjpm_hash, gjpm_hash + base::size(gjpm_hash));
             crx.version = base::Version("1.0");
             crx.installer =
                 base::MakeRefCounted<ReadOnlyTestInstaller>(unpack_path);
+            crx.action_handler = action_handler;
             crx.crx_format_requirement = crx_file::VerifierFormat::CRX3;
             return std::vector<base::Optional<CrxComponent>>{crx};
           },
@@ -3927,6 +3962,4 @@
   RunThreads();
 }
 
-#endif  // OS_WIN
-
 }  // namespace update_client
diff --git a/components/variations/service/variations_field_trial_creator.cc b/components/variations/service/variations_field_trial_creator.cc
index a6094726..e9bb5a78 100644
--- a/components/variations/service/variations_field_trial_creator.cc
+++ b/components/variations/service/variations_field_trial_creator.cc
@@ -511,6 +511,13 @@
       break;
   }
 
+  bool success = http_header_provider->ForceDisableVariationIds(
+      command_line->GetSwitchValueASCII(switches::kForceDisableVariationIds));
+  if (!success) {
+    ExitWithMessage(base::StringPrintf("Invalid --%s list specified.",
+                                       switches::kForceDisableVariationIds));
+  }
+
   feature_list->InitializeFromCommandLine(
       command_line->GetSwitchValueASCII(kEnableFeatures),
       command_line->GetSwitchValueASCII(kDisableFeatures));
diff --git a/components/variations/variations_http_header_provider.cc b/components/variations/variations_http_header_provider.cc
index afef2d0..07a21a8a 100644
--- a/components/variations/variations_http_header_provider.cc
+++ b/components/variations/variations_http_header_provider.cc
@@ -110,19 +110,23 @@
     const std::string& command_line_variation_ids) {
   default_variation_ids_set_.clear();
 
-  if (!AddDefaultVariationIds(variation_ids))
+  if (!AddVariationIdsToSet(variation_ids, &default_variation_ids_set_))
     return ForceIdsResult::INVALID_VECTOR_ENTRY;
 
-  if (!command_line_variation_ids.empty()) {
-    std::vector<std::string> variation_ids_from_command_line =
-        base::SplitString(command_line_variation_ids, ",",
-                          base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL);
-    if (!AddDefaultVariationIds(variation_ids_from_command_line))
-      return ForceIdsResult::INVALID_SWITCH_ENTRY;
+  if (!ParseVariationIdsParameter(command_line_variation_ids,
+                                  &default_variation_ids_set_)) {
+    return ForceIdsResult::INVALID_SWITCH_ENTRY;
   }
   return ForceIdsResult::SUCCESS;
 }
 
+bool VariationsHttpHeaderProvider::ForceDisableVariationIds(
+    const std::string& command_line_variation_ids) {
+  force_disabled_ids_set_.clear();
+  return ParseVariationIdsParameter(command_line_variation_ids,
+                                    &force_disabled_ids_set_);
+}
+
 void VariationsHttpHeaderProvider::AddObserver(Observer* observer) {
   observer_list_.AddObserver(observer);
 }
@@ -141,6 +145,7 @@
   variation_ids_set_.clear();
   default_variation_ids_set_.clear();
   synthetic_variation_ids_set_.clear();
+  force_disabled_ids_set_.clear();
   cached_variation_ids_header_.clear();
   cached_variation_ids_header_signed_in_.clear();
 }
@@ -287,11 +292,13 @@
   return hashed;
 }
 
-bool VariationsHttpHeaderProvider::AddDefaultVariationIds(
-    const std::vector<std::string>& variation_ids) {
+// static
+bool VariationsHttpHeaderProvider::AddVariationIdsToSet(
+    const std::vector<std::string>& variation_ids,
+    std::set<VariationIDEntry>* target_set) {
   for (const std::string& entry : variation_ids) {
     if (entry.empty()) {
-      default_variation_ids_set_.clear();
+      target_set->clear();
       return false;
     }
     bool trigger_id =
@@ -301,16 +308,29 @@
 
     int variation_id = 0;
     if (!base::StringToInt(trimmed_entry, &variation_id)) {
-      default_variation_ids_set_.clear();
+      target_set->clear();
       return false;
     }
-    default_variation_ids_set_.insert(VariationIDEntry(
+    target_set->insert(VariationIDEntry(
         variation_id,
         trigger_id ? GOOGLE_WEB_PROPERTIES_TRIGGER : GOOGLE_WEB_PROPERTIES));
   }
   return true;
 }
 
+// static
+bool VariationsHttpHeaderProvider::ParseVariationIdsParameter(
+    const std::string& command_line_variation_ids,
+    std::set<VariationIDEntry>* target_set) {
+  if (command_line_variation_ids.empty())
+    return true;
+
+  std::vector<std::string> variation_ids_from_command_line =
+      base::SplitString(command_line_variation_ids, ",", base::TRIM_WHITESPACE,
+                        base::SPLIT_WANT_ALL);
+  return AddVariationIdsToSet(variation_ids_from_command_line, target_set);
+}
+
 std::set<VariationsHttpHeaderProvider::VariationIDEntry>
 VariationsHttpHeaderProvider::GetAllVariationIds() {
   lock_.AssertAcquired();
@@ -322,6 +342,9 @@
   for (const VariationIDEntry& entry : synthetic_variation_ids_set_) {
     all_variation_ids_set.insert(entry);
   }
+  for (const VariationIDEntry& entry : force_disabled_ids_set_) {
+    all_variation_ids_set.erase(entry);
+  }
   return all_variation_ids_set;
 }
 
diff --git a/components/variations/variations_http_header_provider.h b/components/variations/variations_http_header_provider.h
index 85b9d73..ea9f7c25 100644
--- a/components/variations/variations_http_header_provider.h
+++ b/components/variations/variations_http_header_provider.h
@@ -77,6 +77,13 @@
       const std::vector<std::string>& variation_ids,
       const std::string& command_line_variation_ids);
 
+  // Ensures that the given variation ids and trigger variation ids are not
+  // encoded in the X-Client-Data request header. This is intended for
+  // development use to force that a server side experiment id is not set.
+  // |command_line_variation_ids| are comma-separted experiment ids.
+  // Returns true on success.
+  bool ForceDisableVariationIds(const std::string& command_line_variation_ids);
+
   // Methods to register or remove observers of variation ids header update.
   void AddObserver(Observer* observer);
   void RemoveObserver(Observer* observer);
@@ -96,6 +103,10 @@
   FRIEND_TEST_ALL_PREFIXES(VariationsHttpHeaderProviderTest,
                            ForceVariationIds_Invalid);
   FRIEND_TEST_ALL_PREFIXES(VariationsHttpHeaderProviderTest,
+                           ForceDisableVariationIds_ValidCommandLine);
+  FRIEND_TEST_ALL_PREFIXES(VariationsHttpHeaderProviderTest,
+                           ForceDisableVariationIds_Invalid);
+  FRIEND_TEST_ALL_PREFIXES(VariationsHttpHeaderProviderTest,
                            OnFieldTrialGroupFinalized);
   FRIEND_TEST_ALL_PREFIXES(VariationsHttpHeaderProviderTest,
                            GetVariationsString);
@@ -135,9 +146,16 @@
   // |is_signed_in| state.
   std::string GenerateBase64EncodedProto(bool is_signed_in);
 
-  // Adds *additional* variation ids and trigger variation ids to be encoded in
-  // the X-Client-Data request header.
-  bool AddDefaultVariationIds(const std::vector<std::string>& variation_ids);
+  // Adds variation ids and trigger variation ids to |target_set|.
+  static bool AddVariationIdsToSet(
+      const std::vector<std::string>& variation_ids,
+      std::set<VariationIDEntry>* target_set);
+
+  // Parses a comma-separated string of variation ids and trigger variation ids
+  // and adds them to |target_set|.
+  static bool ParseVariationIdsParameter(
+      const std::string& command_line_variation_ids,
+      std::set<VariationIDEntry>* target_set);
 
   // Returns the currently active set of variation ids, which includes any
   // default values, synthetic variations and actual field trial variations.
@@ -159,6 +177,9 @@
   // Variations ids from synthetic field trials.
   std::set<VariationIDEntry> synthetic_variation_ids_set_;
 
+  // Provides the google experiment ids that are force-disabled by command line.
+  std::set<VariationIDEntry> force_disabled_ids_set_;
+
   std::string cached_variation_ids_header_;
   std::string cached_variation_ids_header_signed_in_;
 
diff --git a/components/variations/variations_http_header_provider_unittest.cc b/components/variations/variations_http_header_provider_unittest.cc
index c5c6b9b3..a1d445d 100644
--- a/components/variations/variations_http_header_provider_unittest.cc
+++ b/components/variations/variations_http_header_provider_unittest.cc
@@ -125,6 +125,42 @@
   EXPECT_TRUE(provider.GetClientDataHeader(false).empty());
 }
 
+TEST_F(VariationsHttpHeaderProviderTest,
+       ForceDisableVariationIds_ValidCommandLine) {
+  base::test::SingleThreadTaskEnvironment task_environment;
+  VariationsHttpHeaderProvider provider;
+
+  // Valid experiment ids.
+  EXPECT_EQ(VariationsHttpHeaderProvider::ForceIdsResult::SUCCESS,
+            provider.ForceVariationIds({"1", "2", "t3", "t4"}, "5,6,t7,t8"));
+  EXPECT_TRUE(provider.ForceDisableVariationIds("2,t4,6,t8"));
+  provider.InitVariationIDsCacheIfNeeded();
+  std::string variations = provider.GetClientDataHeader(false);
+  EXPECT_FALSE(variations.empty());
+  std::set<VariationID> variation_ids;
+  std::set<VariationID> trigger_ids;
+  ASSERT_TRUE(ExtractVariationIds(variations, &variation_ids, &trigger_ids));
+  EXPECT_TRUE(variation_ids.find(1) != variation_ids.end());
+  EXPECT_FALSE(variation_ids.find(2) != variation_ids.end());
+  EXPECT_TRUE(trigger_ids.find(3) != trigger_ids.end());
+  EXPECT_FALSE(trigger_ids.find(4) != trigger_ids.end());
+  EXPECT_TRUE(variation_ids.find(5) != variation_ids.end());
+  EXPECT_FALSE(variation_ids.find(6) != variation_ids.end());
+  EXPECT_TRUE(trigger_ids.find(7) != trigger_ids.end());
+  EXPECT_FALSE(trigger_ids.find(8) != trigger_ids.end());
+}
+
+TEST_F(VariationsHttpHeaderProviderTest, ForceDisableVariationIds_Invalid) {
+  base::test::SingleThreadTaskEnvironment task_environment;
+  VariationsHttpHeaderProvider provider;
+
+  // Invalid command-line ids.
+  EXPECT_FALSE(provider.ForceDisableVariationIds("abc"));
+  EXPECT_FALSE(provider.ForceDisableVariationIds("tabc456"));
+  provider.InitVariationIDsCacheIfNeeded();
+  EXPECT_TRUE(provider.GetClientDataHeader(false).empty());
+}
+
 TEST_F(VariationsHttpHeaderProviderTest, OnFieldTrialGroupFinalized) {
   base::test::SingleThreadTaskEnvironment task_environment;
   VariationsHttpHeaderProvider provider;
diff --git a/components/variations/variations_switches.cc b/components/variations/variations_switches.cc
index a17c2d47..7a05457 100644
--- a/components/variations/variations_switches.cc
+++ b/components/variations/variations_switches.cc
@@ -34,6 +34,11 @@
 // prefixed with the character "t" will be treated as Trigger Variation Ids.
 const char kForceVariationIds[] = "force-variation-ids";
 
+// Forces to remove Chrome Variation Ids from being sent in X-Client-Data
+// header, specified as a 64-bit encoded list of numeric experiment ids. Ids
+// prefixed with the character "t" will be treated as Trigger Variation Ids.
+const char kForceDisableVariationIds[] = "force-disable-variation-ids";
+
 // Allows overriding the country used for evaluating variations. This is similar
 // to the "Override Variations Country" entry on chrome://translate-internals,
 // but is exposed as a command-line flag to allow testing First Run scenarios.
diff --git a/components/variations/variations_switches.h b/components/variations/variations_switches.h
index 8da91d7..c4559c2d 100644
--- a/components/variations/variations_switches.h
+++ b/components/variations/variations_switches.h
@@ -16,6 +16,7 @@
 extern const char kFakeVariationsChannel[];
 extern const char kForceFieldTrialParams[];
 extern const char kForceVariationIds[];
+extern const char kForceDisableVariationIds[];
 extern const char kVariationsOverrideCountry[];
 extern const char kVariationsServerURL[];
 extern const char kVariationsInsecureServerURL[];
diff --git a/content/browser/android/synchronous_compositor_host.cc b/content/browser/android/synchronous_compositor_host.cc
index 27467a4..886744fc 100644
--- a/content/browser/android/synchronous_compositor_host.cc
+++ b/content/browser/android/synchronous_compositor_host.cc
@@ -497,6 +497,13 @@
   compute_scroll_needs_synchronous_draw_ = true;
 }
 
+void SynchronousCompositorHost::ProgressFling(base::TimeTicks frame_time) {
+  // Progress fling if OnComputeScroll was called or we're scrolling inner frame
+  if (on_compute_scroll_called_ || !rwhva_->is_currently_scrolling_viewport()) {
+    rwhva_->host()->ProgressFlingIfNeeded(frame_time);
+  }
+}
+
 ui::ViewAndroid::CopyViewCallback
 SynchronousCompositorHost::GetCopyViewCallback() {
   // Unretained is safe since callback is helped by ViewAndroid which has same
diff --git a/content/browser/android/synchronous_compositor_host.h b/content/browser/android/synchronous_compositor_host.h
index a3d6b31f9..229a3ea8 100644
--- a/content/browser/android/synchronous_compositor_host.h
+++ b/content/browser/android/synchronous_compositor_host.h
@@ -64,6 +64,7 @@
       const gfx::ScrollOffset& root_offset) override;
   void SynchronouslyZoomBy(float zoom_delta, const gfx::Point& anchor) override;
   void OnComputeScroll(base::TimeTicks animation_time) override;
+  void ProgressFling(base::TimeTicks frame_time) override;
 
   ui::ViewAndroid::CopyViewCallback GetCopyViewCallback();
   void DidOverscroll(const ui::DidOverscrollParams& over_scroll_params);
diff --git a/content/browser/browser_context.cc b/content/browser/browser_context.cc
index 2897dda..8e4a7483 100644
--- a/content/browser/browser_context.cc
+++ b/content/browser/browser_context.cc
@@ -578,6 +578,16 @@
 }
 
 // static
+void BrowserContext::SetPermissionControllerForTesting(
+    BrowserContext* browser_context,
+    std::unique_ptr<PermissionController> permission_controller) {
+  DCHECK_CURRENTLY_ON(BrowserThread::UI);
+  DCHECK(permission_controller);
+  browser_context->SetUserData(kPermissionControllerKey,
+                               std::move(permission_controller));
+}
+
+// static
 void BrowserContext::Initialize(BrowserContext* browser_context,
                                 const base::FilePath& path) {
   const base::Token new_group = base::Token::CreateRandom();
diff --git a/content/browser/browser_interface_binders.cc b/content/browser/browser_interface_binders.cc
index a3a719a..c17f675c 100644
--- a/content/browser/browser_interface_binders.cc
+++ b/content/browser/browser_interface_binders.cc
@@ -55,11 +55,13 @@
 #include "third_party/blink/public/mojom/appcache/appcache.mojom.h"
 #include "third_party/blink/public/mojom/background_fetch/background_fetch.mojom.h"
 #include "third_party/blink/public/mojom/bluetooth/web_bluetooth.mojom.h"
+#include "third_party/blink/public/mojom/cache_storage/cache_storage.mojom.h"
 #include "third_party/blink/public/mojom/choosers/color_chooser.mojom.h"
 #include "third_party/blink/public/mojom/content_index/content_index.mojom.h"
 #include "third_party/blink/public/mojom/cookie_store/cookie_store.mojom.h"
 #include "third_party/blink/public/mojom/credentialmanager/credential_manager.mojom.h"
 #include "third_party/blink/public/mojom/filesystem/file_system.mojom.h"
+#include "third_party/blink/public/mojom/geolocation/geolocation_service.mojom.h"
 #include "third_party/blink/public/mojom/idle/idle_manager.mojom.h"
 #include "third_party/blink/public/mojom/indexeddb/indexeddb.mojom.h"
 #include "third_party/blink/public/mojom/keyboard_lock/keyboard_lock.mojom.h"
@@ -429,12 +431,18 @@
   map->Add<blink::mojom::AudioContextManager>(base::BindRepeating(
       &RenderFrameHostImpl::GetAudioContextManager, base::Unretained(host)));
 
+  map->Add<blink::mojom::CacheStorage>(base::BindRepeating(
+      &RenderFrameHostImpl::BindCacheStorage, base::Unretained(host)));
+
   map->Add<blink::mojom::ContactsManager>(base::BindRepeating(
       &RenderFrameHostImpl::GetContactsManager, base::Unretained(host)));
 
   map->Add<blink::mojom::FileSystemManager>(base::BindRepeating(
       &RenderFrameHostImpl::GetFileSystemManager, base::Unretained(host)));
 
+  map->Add<blink::mojom::GeolocationService>(base::BindRepeating(
+      &RenderFrameHostImpl::GetGeolocationService, base::Unretained(host)));
+
   map->Add<blink::mojom::IdleManager>(base::BindRepeating(
       &RenderFrameHostImpl::GetIdleManager, base::Unretained(host)));
 
@@ -661,6 +669,8 @@
   map->Add<payments::mojom::PaymentManager>(
       BindDedicatedWorkerReceiverForOrigin(
           &RenderProcessHost::CreatePaymentManagerForOrigin, host));
+  map->Add<blink::mojom::CacheStorage>(BindDedicatedWorkerReceiverForOrigin(
+      &RenderProcessHost::BindCacheStorage, host));
   map->Add<blink::mojom::PermissionService>(
       BindDedicatedWorkerReceiverForOrigin(
           &RenderProcessHost::CreatePermissionService, host));
@@ -724,6 +734,8 @@
     SharedWorkerHost* host,
     service_manager::BinderMapWithContext<const url::Origin&>* map) {
   // render process host binders taking an origin
+  map->Add<blink::mojom::CacheStorage>(BindSharedWorkerReceiverForOrigin(
+      &RenderProcessHost::BindCacheStorage, host));
   map->Add<blink::mojom::FileSystemManager>(BindSharedWorkerReceiverForOrigin(
       &RenderProcessHost::BindFileSystemManager, host));
   map->Add<payments::mojom::PaymentManager>(BindSharedWorkerReceiverForOrigin(
@@ -814,6 +826,8 @@
   // render process host binders taking an origin
   map->Add<payments::mojom::PaymentManager>(BindServiceWorkerReceiverForOrigin(
       &RenderProcessHost::CreatePaymentManagerForOrigin, host));
+  map->Add<blink::mojom::CacheStorage>(BindServiceWorkerReceiverForOrigin(
+      &RenderProcessHost::BindCacheStorage, host));
   map->Add<blink::mojom::PermissionService>(BindServiceWorkerReceiverForOrigin(
       &RenderProcessHost::CreatePermissionService, host));
   if (base::FeatureList::IsEnabled(blink::features::kNativeFileSystemAPI)) {
diff --git a/content/browser/frame_host/navigator_impl_unittest.cc b/content/browser/frame_host/navigator_impl_unittest.cc
index a38db91..32ee7e1 100644
--- a/content/browser/frame_host/navigator_impl_unittest.cc
+++ b/content/browser/frame_host/navigator_impl_unittest.cc
@@ -291,8 +291,8 @@
   // First party for cookies url should be that of the main frame.
   EXPECT_EQ(kUrl1, subframe_loader->request_info()->site_for_cookies);
 
-  url::Origin origin = url::Origin::Create(kUrl1);
-  EXPECT_EQ(net::NetworkIsolationKey(origin, origin),
+  EXPECT_EQ(net::NetworkIsolationKey(url::Origin::Create(kUrl1),
+                                     url::Origin::Create(kUrl2)),
             subframe_loader->request_info()->network_isolation_key);
   EXPECT_FALSE(subframe_loader->request_info()->is_main_frame);
   EXPECT_TRUE(subframe_loader->request_info()->parent_is_main_frame);
diff --git a/content/browser/frame_host/render_frame_host_android.cc b/content/browser/frame_host/render_frame_host_android.cc
index 0b2b4ab..8bed5fc 100644
--- a/content/browser/frame_host/render_frame_host_android.cc
+++ b/content/browser/frame_host/render_frame_host_android.cc
@@ -17,6 +17,7 @@
 #include "content/public/browser/browser_context.h"
 #include "content/public/browser/render_process_host.h"
 #include "content/public/browser/site_instance.h"
+#include "third_party/blink/public/mojom/feature_policy/feature_policy_feature.mojom-shared.h"
 #include "url/origin.h"
 
 using base::android::AttachCurrentThread;
@@ -95,6 +96,13 @@
       base::android::ScopedJavaGlobalRef<jobject>(env, jcallback)));
 }
 
+bool RenderFrameHostAndroid::IsPaymentFeaturePolicyEnabled(
+    JNIEnv* env,
+    const base::android::JavaParamRef<jobject>&) const {
+  return render_frame_host_->IsFeatureEnabled(
+      blink::mojom::FeaturePolicyFeature::kPayment);
+}
+
 ScopedJavaLocalRef<jobject>
 RenderFrameHostAndroid::GetAndroidOverlayRoutingToken(
     JNIEnv* env,
diff --git a/content/browser/frame_host/render_frame_host_android.h b/content/browser/frame_host/render_frame_host_android.h
index 9e46d9e..0732737 100644
--- a/content/browser/frame_host/render_frame_host_android.h
+++ b/content/browser/frame_host/render_frame_host_android.h
@@ -48,6 +48,10 @@
       const base::android::JavaParamRef<jobject>&,
       const base::android::JavaParamRef<jobject>& jcallback) const;
 
+  bool IsPaymentFeaturePolicyEnabled(
+      JNIEnv* env,
+      const base::android::JavaParamRef<jobject>&) const;
+
   // Returns UnguessableToken.
   base::android::ScopedJavaLocalRef<jobject> GetAndroidOverlayRoutingToken(
       JNIEnv* env,
diff --git a/content/browser/frame_host/render_frame_host_impl.cc b/content/browser/frame_host/render_frame_host_impl.cc
index f14fc32f2..4100830e 100644
--- a/content/browser/frame_host/render_frame_host_impl.cc
+++ b/content/browser/frame_host/render_frame_host_impl.cc
@@ -200,8 +200,10 @@
 #include "third_party/blink/public/common/messaging/transferable_message.h"
 #include "third_party/blink/public/mojom/appcache/appcache.mojom.h"
 #include "third_party/blink/public/mojom/bluetooth/web_bluetooth.mojom.h"
+#include "third_party/blink/public/mojom/cache_storage/cache_storage.mojom.h"
 #include "third_party/blink/public/mojom/choosers/file_chooser.mojom.h"
 #include "third_party/blink/public/mojom/frame/fullscreen.mojom.h"
+#include "third_party/blink/public/mojom/geolocation/geolocation_service.mojom.h"
 #include "third_party/blink/public/mojom/loader/pause_subresource_loading_handle.mojom.h"
 #include "third_party/blink/public/mojom/loader/url_loader_factory_bundle.mojom.h"
 #include "third_party/blink/public/mojom/service_worker/service_worker_object.mojom.h"
@@ -2017,8 +2019,7 @@
 
   mojom::CreateFrameParamsPtr params = mojom::CreateFrameParams::New();
   params->interface_bundle = mojom::DocumentScopedInterfaceBundle::New(
-      interface_provider.PassInterface(),
-      std::move(browser_interface_broker));
+      interface_provider.PassInterface(), std::move(browser_interface_broker));
 
   params->routing_id = routing_id_;
   params->previous_routing_id = previous_routing_id;
@@ -4459,10 +4460,21 @@
   if (frame_tree_node()->parent()) {
     mojo::ReportBadMessage(
         "RFHI::CreatePortal called in a nested browsing context");
+    frame_host_associated_receiver_.reset();
     return;
   }
+
   Portal* portal =
       Portal::Create(this, std::move(pending_receiver), std::move(client));
+  if (!portal) {
+    // |portal| is null when |Portal::Create| reports a bad message, so we need
+    // to close the receiver.
+    // TODO(1027302): Remove these manual calls to reset once we have a cleaner
+    // way of reporting a bad message for an AssociatedReceiver.
+    frame_host_associated_receiver_.reset();
+    return;
+  }
+
   RenderFrameProxyHost* proxy_host = portal->CreateProxyAndAttachPortal();
   std::move(callback).Run(proxy_host->GetRoutingID(), portal->portal_token(),
                           portal->GetDevToolsFrameToken());
@@ -4474,10 +4486,12 @@
   Portal* portal = Portal::FromToken(portal_token);
   if (!portal) {
     mojo::ReportBadMessage("Unknown portal_token when adopting portal.");
+    frame_host_associated_receiver_.reset();
     return;
   }
   if (portal->owner_render_frame_host() != this) {
     mojo::ReportBadMessage("AdoptPortal called from wrong frame.");
+    frame_host_associated_receiver_.reset();
     return;
   }
   RenderFrameProxyHost* proxy_host = portal->CreateProxyAndAttachPortal();
@@ -4606,22 +4620,6 @@
 void RenderFrameHostImpl::RegisterMojoInterfaces() {
   auto* command_line = base::CommandLine::ForCurrentProcess();
 
-  PermissionControllerImpl* permission_controller =
-      PermissionControllerImpl::FromBrowserContext(
-          GetProcess()->GetBrowserContext());
-  auto* geolocation_context = delegate_->GetGeolocationContext();
-  if (geolocation_context) {
-    geolocation_service_.reset(new GeolocationServiceImpl(
-        geolocation_context, permission_controller, this));
-    // NOTE: Both the |interface_registry_| and |geolocation_service_| are
-    // owned by |this|, so their destruction will be triggered together.
-    // |interface_registry_| is declared after |geolocation_service_|, so it
-    // will be destroyed prior to |geolocation_service_|.
-    registry_->AddInterface(
-        base::BindRepeating(&GeolocationServiceImpl::Bind,
-                            base::Unretained(geolocation_service_.get())));
-  }
-
   registry_->AddInterface<media::mojom::InterfaceFactory>(base::BindRepeating(
       &RenderFrameHostImpl::BindMediaInterfaceFactoryRequest,
       base::Unretained(this)));
@@ -6356,6 +6354,10 @@
 
 void RenderFrameHostImpl::CreatePaymentManager(
     mojo::PendingReceiver<payments::mojom::PaymentManager> receiver) {
+  if (!IsFeatureEnabled(blink::mojom::FeaturePolicyFeature::kPayment)) {
+    mojo::ReportBadMessage("Feature policy blocks Payment");
+    return;
+  }
   GetProcess()->CreatePaymentManagerForOrigin(GetLastCommittedOrigin(),
                                               std::move(receiver));
 }
@@ -6574,6 +6576,11 @@
   return chooser;
 }
 
+void RenderFrameHostImpl::BindCacheStorage(
+    mojo::PendingReceiver<blink::mojom::CacheStorage> receiver) {
+  GetProcess()->BindCacheStorage(GetLastCommittedOrigin(), std::move(receiver));
+}
+
 void RenderFrameHostImpl::BindSmsReceiverReceiver(
     mojo::PendingReceiver<blink::mojom::SmsReceiver> receiver) {
   if (GetParent() && !WebContents::FromRenderFrameHost(this)
@@ -6632,6 +6639,18 @@
                                 std::move(receiver)));
 }
 
+void RenderFrameHostImpl::GetGeolocationService(
+    mojo::PendingReceiver<blink::mojom::GeolocationService> receiver) {
+  if (!geolocation_service_) {
+    auto* geolocation_context = delegate_->GetGeolocationContext();
+    if (!geolocation_context)
+      return;
+    geolocation_service_ =
+        std::make_unique<GeolocationServiceImpl>(geolocation_context, this);
+  }
+  geolocation_service_->Bind(std::move(receiver));
+}
+
 void RenderFrameHostImpl::GetNativeFileSystemManager(
     mojo::PendingReceiver<blink::mojom::NativeFileSystemManager> receiver) {
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
diff --git a/content/browser/frame_host/render_frame_host_impl.h b/content/browser/frame_host/render_frame_host_impl.h
index fb3083e..7c352e54 100644
--- a/content/browser/frame_host/render_frame_host_impl.h
+++ b/content/browser/frame_host/render_frame_host_impl.h
@@ -144,6 +144,8 @@
 struct WebScrollIntoViewParams;
 
 namespace mojom {
+class CacheStorage;
+class GeolocationService;
 class WebUsbService;
 }
 }  // namespace blink
@@ -1080,6 +1082,9 @@
   void GetFileSystemManager(
       mojo::PendingReceiver<blink::mojom::FileSystemManager> receiver);
 
+  void GetGeolocationService(
+      mojo::PendingReceiver<blink::mojom::GeolocationService> receiver);
+
   void GetNativeFileSystemManager(
       mojo::PendingReceiver<blink::mojom::NativeFileSystemManager> receiver);
 
@@ -1142,6 +1147,9 @@
   void BindNFCReceiver(mojo::PendingReceiver<device::mojom::NFC> receiver);
 #endif
 
+  void BindCacheStorage(
+      mojo::PendingReceiver<blink::mojom::CacheStorage> receiver);
+
   void BindSmsReceiverReceiver(
       mojo::PendingReceiver<blink::mojom::SmsReceiver> receiver);
 
diff --git a/content/browser/geolocation/geolocation_service_impl.cc b/content/browser/geolocation/geolocation_service_impl.cc
index 67b3263..c0e0fd2 100644
--- a/content/browser/geolocation/geolocation_service_impl.cc
+++ b/content/browser/geolocation/geolocation_service_impl.cc
@@ -8,6 +8,7 @@
 #include "content/browser/permissions/permission_controller_impl.h"
 #include "content/public/browser/permission_type.h"
 #include "content/public/browser/render_frame_host.h"
+#include "content/public/browser/render_process_host.h"
 #include "mojo/public/cpp/bindings/callback_helpers.h"
 #include "third_party/blink/public/mojom/feature_policy/feature_policy.mojom.h"
 
@@ -48,22 +49,22 @@
 
 GeolocationServiceImpl::GeolocationServiceImpl(
     device::mojom::GeolocationContext* geolocation_context,
-    PermissionControllerImpl* permission_controller,
     RenderFrameHost* render_frame_host)
     : geolocation_context_(geolocation_context),
-      permission_controller_(permission_controller),
       render_frame_host_(render_frame_host) {
   DCHECK(geolocation_context);
-  DCHECK(permission_controller);
   DCHECK(render_frame_host);
+
+  permission_controller_ = PermissionControllerImpl::FromBrowserContext(
+      render_frame_host_->GetProcess()->GetBrowserContext());
 }
 
 GeolocationServiceImpl::~GeolocationServiceImpl() {}
 
 void GeolocationServiceImpl::Bind(
-    blink::mojom::GeolocationServiceRequest request) {
-  binding_set_.AddBinding(
-      this, std::move(request),
+    mojo::PendingReceiver<blink::mojom::GeolocationService> receiver) {
+  receiver_set_.Add(
+      this, std::move(receiver),
       std::make_unique<GeolocationServiceImplContext>(permission_controller_));
 }
 
@@ -82,7 +83,7 @@
   auto scoped_callback = mojo::WrapCallbackWithDefaultInvokeIfNotRun(
       std::move(callback), blink::mojom::PermissionStatus::DENIED);
 
-  binding_set_.dispatch_context()->RequestPermission(
+  receiver_set_.current_context()->RequestPermission(
       render_frame_host_, user_gesture,
       // There is an assumption here that the GeolocationServiceImplContext will
       // outlive the GeolocationServiceImpl.
diff --git a/content/browser/geolocation/geolocation_service_impl.h b/content/browser/geolocation/geolocation_service_impl.h
index 840bc6b..ea2721e 100644
--- a/content/browser/geolocation/geolocation_service_impl.h
+++ b/content/browser/geolocation/geolocation_service_impl.h
@@ -7,7 +7,8 @@
 
 #include "base/memory/weak_ptr.h"
 #include "content/common/content_export.h"
-#include "mojo/public/cpp/bindings/binding_set.h"
+#include "mojo/public/cpp/bindings/pending_receiver.h"
+#include "mojo/public/cpp/bindings/receiver_set.h"
 #include "services/device/public/mojom/geolocation.mojom.h"
 #include "services/device/public/mojom/geolocation_context.mojom.h"
 #include "third_party/blink/public/mojom/geolocation/geolocation_service.mojom.h"
@@ -49,12 +50,11 @@
     : public blink::mojom::GeolocationService {
  public:
   GeolocationServiceImpl(device::mojom::GeolocationContext* geolocation_context,
-                         PermissionControllerImpl* permission_controller,
                          RenderFrameHost* render_frame_host);
   ~GeolocationServiceImpl() override;
 
   // Binds to the GeolocationService.
-  void Bind(blink::mojom::GeolocationServiceRequest request);
+  void Bind(mojo::PendingReceiver<blink::mojom::GeolocationService> receiver);
 
   // Creates a Geolocation instance.
   // This may not be called a second time until the Geolocation instance has
@@ -78,9 +78,9 @@
   // Along with each GeolocationService, we store a
   // GeolocationServiceImplContext which primarily exists to manage a
   // Permission Request ID.
-  mojo::BindingSet<blink::mojom::GeolocationService,
-                   std::unique_ptr<GeolocationServiceImplContext>>
-      binding_set_;
+  mojo::ReceiverSet<blink::mojom::GeolocationService,
+                    std::unique_ptr<GeolocationServiceImplContext>>
+      receiver_set_;
 
   DISALLOW_COPY_AND_ASSIGN(GeolocationServiceImpl);
 };
diff --git a/content/browser/geolocation/geolocation_service_impl_unittest.cc b/content/browser/geolocation/geolocation_service_impl_unittest.cc
index 45804e5..3a9d5977 100644
--- a/content/browser/geolocation/geolocation_service_impl_unittest.cc
+++ b/content/browser/geolocation/geolocation_service_impl_unittest.cc
@@ -28,7 +28,6 @@
 #include "third_party/blink/public/mojom/feature_policy/feature_policy.mojom.h"
 
 using blink::mojom::GeolocationService;
-using blink::mojom::GeolocationServicePtr;
 using blink::mojom::PermissionStatus;
 using device::mojom::Geolocation;
 using device::mojom::GeopositionPtr;
@@ -85,8 +84,6 @@
     browser_context_.reset(new content::TestBrowserContext());
     browser_context_->SetPermissionControllerDelegate(
         std::make_unique<TestPermissionManager>());
-    permission_controller_.reset(
-        new PermissionControllerImpl(browser_context_.get()));
 
     service_manager_context_ = std::make_unique<TestServiceManagerContext>();
     geolocation_overrider_ =
@@ -119,14 +116,16 @@
     navigation_simulator->Commit();
     embedded_rfh = navigation_simulator->GetFinalRenderFrameHost();
 
-    service_.reset(new GeolocationServiceImpl(
-        context_.get(), permission_controller_.get(), embedded_rfh));
-    service_->Bind(mojo::MakeRequest(&service_ptr_));
+    BrowserContext::SetPermissionControllerForTesting(
+        embedded_rfh->GetProcess()->GetBrowserContext(),
+        std::make_unique<PermissionControllerImpl>(browser_context_.get()));
+    service_.reset(new GeolocationServiceImpl(context_.get(), embedded_rfh));
+    service_->Bind(service_remote_.BindNewPipeAndPassReceiver());
   }
 
-  GeolocationServicePtr* service_ptr() { return &service_ptr_; }
-
-  GeolocationService* service() { return &*service_ptr_; }
+  mojo::Remote<blink::mojom::GeolocationService>& service_remote() {
+    return service_remote_;
+  }
 
   TestPermissionManager* permission_manager() {
     return static_cast<TestPermissionManager*>(
@@ -137,12 +136,9 @@
   std::unique_ptr<TestServiceManagerContext> service_manager_context_;
   std::unique_ptr<device::ScopedGeolocationOverrider> geolocation_overrider_;
 
-  // The |permission_manager_| needs to come before the |service_| since
-  // GeolocationService calls PermissionManager in its destructor.
   std::unique_ptr<TestBrowserContext> browser_context_;
-  std::unique_ptr<PermissionControllerImpl> permission_controller_;
   std::unique_ptr<GeolocationServiceImpl> service_;
-  GeolocationServicePtr service_ptr_;
+  mojo::Remote<blink::mojom::GeolocationService> service_remote_;
   mojo::Remote<device::mojom::GeolocationContext> context_;
 
   DISALLOW_COPY_AND_ASSIGN(GeolocationServiceTest);
@@ -159,7 +155,7 @@
         ADD_FAILURE() << "Permissions checked unexpectedly.";
       }));
   mojo::Remote<Geolocation> geolocation;
-  service()->CreateGeolocation(
+  service_remote()->CreateGeolocation(
       geolocation.BindNewPipeAndPassReceiver(), true,
       base::BindRepeating([](blink::mojom::PermissionStatus status) {
         EXPECT_EQ(blink::mojom::PermissionStatus::DENIED, status);
@@ -183,7 +179,7 @@
         std::move(callback).Run(PermissionStatus::GRANTED);
       }));
   mojo::Remote<Geolocation> geolocation;
-  service()->CreateGeolocation(
+  service_remote()->CreateGeolocation(
       geolocation.BindNewPipeAndPassReceiver(), true,
       base::BindRepeating([](blink::mojom::PermissionStatus status) {
         EXPECT_EQ(blink::mojom::PermissionStatus::GRANTED, status);
@@ -210,7 +206,7 @@
         std::move(callback).Run(PermissionStatus::GRANTED);
       }));
   mojo::Remote<Geolocation> geolocation;
-  service()->CreateGeolocation(
+  service_remote()->CreateGeolocation(
       geolocation.BindNewPipeAndPassReceiver(), true,
       base::BindRepeating([](blink::mojom::PermissionStatus status) {
         EXPECT_EQ(blink::mojom::PermissionStatus::GRANTED, status);
@@ -237,7 +233,7 @@
         std::move(callback).Run(PermissionStatus::DENIED);
       }));
   mojo::Remote<Geolocation> geolocation;
-  service()->CreateGeolocation(
+  service_remote()->CreateGeolocation(
       geolocation.BindNewPipeAndPassReceiver(), true,
       base::BindRepeating([](blink::mojom::PermissionStatus status) {
         EXPECT_EQ(blink::mojom::PermissionStatus::DENIED, status);
@@ -262,7 +258,7 @@
                                       PermissionStatus::GRANTED));
       }));
   mojo::Remote<Geolocation> geolocation;
-  service()->CreateGeolocation(
+  service_remote()->CreateGeolocation(
       geolocation.BindNewPipeAndPassReceiver(), true,
       base::BindRepeating([](blink::mojom::PermissionStatus status) {
         EXPECT_EQ(blink::mojom::PermissionStatus::GRANTED, status);
@@ -292,7 +288,7 @@
                                       PermissionStatus::DENIED));
       }));
   mojo::Remote<Geolocation> geolocation;
-  service()->CreateGeolocation(
+  service_remote()->CreateGeolocation(
       geolocation.BindNewPipeAndPassReceiver(), true,
       base::BindRepeating([](blink::mojom::PermissionStatus status) {
         EXPECT_EQ(blink::mojom::PermissionStatus::DENIED, status);
@@ -311,7 +307,7 @@
   CreateEmbeddedFrameAndGeolocationService(/*allow_via_feature_policy=*/true);
   permission_manager()->SetRequestId(42);
   mojo::Remote<Geolocation> geolocation;
-  service()->CreateGeolocation(
+  service_remote()->CreateGeolocation(
       geolocation.BindNewPipeAndPassReceiver(), true,
       base::BindRepeating([](blink::mojom::PermissionStatus) {
         ADD_FAILURE() << "PositionStatus received unexpectedly.";
@@ -320,7 +316,7 @@
   permission_manager()->SetRequestCallback(base::DoNothing());
 
   base::RunLoop loop;
-  service_ptr()->reset();
+  service_remote().reset();
 
   geolocation->QueryNextPosition(base::BindOnce([](GeopositionPtr geoposition) {
     ADD_FAILURE() << "Position updated unexpectedly";
diff --git a/content/browser/renderer_host/render_process_host_impl.cc b/content/browser/renderer_host/render_process_host_impl.cc
index cb1ea43..4f5a737 100644
--- a/content/browser/renderer_host/render_process_host_impl.cc
+++ b/content/browser/renderer_host/render_process_host_impl.cc
@@ -1853,8 +1853,8 @@
 }
 
 void RenderProcessHostImpl::BindCacheStorage(
-    mojo::PendingReceiver<blink::mojom::CacheStorage> receiver,
-    const url::Origin& origin) {
+    const url::Origin& origin,
+    mojo::PendingReceiver<blink::mojom::CacheStorage> receiver) {
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
   storage_partition_impl_->GetCacheStorageContext()->AddReceiver(
       std::move(receiver), origin);
diff --git a/content/browser/renderer_host/render_process_host_impl.h b/content/browser/renderer_host/render_process_host_impl.h
index e0cf6186..78a6de15 100644
--- a/content/browser/renderer_host/render_process_host_impl.h
+++ b/content/browser/renderer_host/render_process_host_impl.h
@@ -257,8 +257,8 @@
   void LockToOrigin(const IsolationContext& isolation_context,
                     const GURL& lock_url) override;
   void BindCacheStorage(
-      mojo::PendingReceiver<blink::mojom::CacheStorage> receiver,
-      const url::Origin& origin) override;
+      const url::Origin& origin,
+      mojo::PendingReceiver<blink::mojom::CacheStorage> receiver) override;
   void BindIndexedDB(
       int render_frame_id,
       const url::Origin& origin,
diff --git a/content/browser/renderer_host/render_widget_host_input_event_router.cc b/content/browser/renderer_host/render_widget_host_input_event_router.cc
index 9842e5a..753ac8b6 100644
--- a/content/browser/renderer_host/render_widget_host_input_event_router.cc
+++ b/content/browser/renderer_host/render_widget_host_input_event_router.cc
@@ -450,7 +450,6 @@
   RenderWidgetHostViewBase* target = nullptr;
   bool needs_transform_point = true;
   bool latched_target = true;
-  bool should_verify_result = false;
   // Allow devtools to route events into the root view based on the
   // browser-side inspector overlay state.
   if (route_to_root_for_devtools_)
@@ -491,19 +490,13 @@
     auto result =
         FindViewAtLocation(root_view, event.PositionInWidget(),
                            viz::EventSource::MOUSE, &transformed_point);
-    // Due to performance concerns we do not verify mouse move events.
-    should_verify_result = (event.GetType() == blink::WebInputEvent::kMouseMove)
-                               ? false
-                               : result.should_verify_result;
     if (event.GetType() == blink::WebInputEvent::kMouseDown) {
       mouse_down_pre_transformed_coordinate_.SetPoint(
           event.PositionInWidget().x, event.PositionInWidget().y);
     }
-    if (result.should_query_view) {
-      DCHECK(!should_verify_result);
-      return {result.view, true, transformed_point, latched_target,
-              should_verify_result};
-    }
+    if (result.should_query_view)
+      return {result.view, true, transformed_point, latched_target};
+
     target = result.view;
     // |transformed_point| is already transformed.
     needs_transform_point = false;
@@ -512,11 +505,10 @@
   if (needs_transform_point) {
     if (!root_view->TransformPointToCoordSpaceForView(
             event.PositionInWidget(), target, &transformed_point)) {
-      return {nullptr, false, base::nullopt, latched_target, false};
+      return {nullptr, false, base::nullopt, latched_target};
     }
   }
-  return {target, false, transformed_point, latched_target,
-          should_verify_result};
+  return {target, false, transformed_point, latched_target};
 }
 
 RenderWidgetTargetResult
@@ -529,21 +521,20 @@
     target = root_view->host()->delegate()->GetMouseLockWidget()->GetView();
     if (!root_view->TransformPointToCoordSpaceForView(
             event.PositionInWidget(), target, &transformed_point)) {
-      return {nullptr, false, base::nullopt, true, false};
+      return {nullptr, false, base::nullopt, true};
     }
-    return {target, false, transformed_point, true, false};
+    return {target, false, transformed_point, true};
   }
 
   if (event.phase == blink::WebMouseWheelEvent::kPhaseBegan) {
     auto result =
         FindViewAtLocation(root_view, event.PositionInWidget(),
                            viz::EventSource::MOUSE, &transformed_point);
-    return {result.view, result.should_query_view, transformed_point, false,
-            result.should_verify_result};
+    return {result.view, result.should_query_view, transformed_point, false};
   }
   // For non-begin events, the target found for the previous phaseBegan is
   // used.
-  return {nullptr, false, base::nullopt, true, false};
+  return {nullptr, false, base::nullopt, true};
 }
 
 RenderWidgetTargetResult RenderWidgetHostInputEventRouter::FindViewAtLocation(
@@ -555,17 +546,16 @@
   // hit testing.
   if (owner_map_.size() <= 1) {
     *transformed_point = point;
-    return {root_view, false, *transformed_point, false, false};
+    return {root_view, false, *transformed_point, false};
   }
 
   viz::FrameSinkId frame_sink_id;
   bool query_renderer = false;
-  bool should_verify_result = false;
   viz::HitTestQuery* query = GetHitTestQuery(GetHostFrameSinkManager(),
                                              root_view->GetRootFrameSinkId());
   if (!query) {
     *transformed_point = point;
-    return {root_view, false, *transformed_point, false, false};
+    return {root_view, false, *transformed_point, false};
   }
   float device_scale_factor = root_view->GetDeviceScaleFactor();
   DCHECK_GT(device_scale_factor, 0.0f);
@@ -590,8 +580,6 @@
   // The code that implements c) locates in |FindMouseEventTarget|.
   if (target.flags & viz::HitTestRegionFlags::kHitTestAsk)
     query_renderer = true;
-  else if (features::IsVizHitTestingSurfaceLayerEnabled())
-    should_verify_result = true;
 
   auto* view = FindViewFromFrameSinkId(frame_sink_id);
   // Send the event to |root_view| if |view| is not in |root_view|'s sub-tree
@@ -601,8 +589,7 @@
     *transformed_point = point;
   }
 
-  return {view, query_renderer, *transformed_point, false,
-          should_verify_result};
+  return {view, query_renderer, *transformed_point, false};
 }
 
 void RenderWidgetHostInputEventRouter::RouteMouseEvent(
@@ -822,7 +809,7 @@
   // Tests may call this without an initial TouchStart, so check event type
   // explicitly here.
   if (active_touches_ || event.GetType() != blink::WebInputEvent::kTouchStart)
-    return {nullptr, false, base::nullopt, true, false};
+    return {nullptr, false, base::nullopt, true};
 
   active_touches_ += CountChangedTouchPoints(event);
   gfx::PointF original_point = gfx::PointF(event.touches[0].PositionInWidget());
@@ -1402,7 +1389,7 @@
   // target we could just return nullptr for pinch events, but since we know
   // where they are going we return the correct target.
   if (blink::WebInputEvent::IsPinchGestureEventType(gesture_event.GetType()))
-    return {root_view, false, gesture_event.PositionInWidget(), true, false};
+    return {root_view, false, gesture_event.PositionInWidget(), true};
 
   // Android sends gesture events that have no corresponding touch sequence, so
   // these we hit-test explicitly.
@@ -1415,7 +1402,7 @@
 
   // Remaining gesture events will defer to the gesture event target queue
   // during dispatch.
-  return {nullptr, false, base::nullopt, true, false};
+  return {nullptr, false, base::nullopt, true};
 }
 
 bool RenderWidgetHostInputEventRouter::IsViewInMap(
@@ -1638,7 +1625,7 @@
   if (event.GetType() != blink::WebInputEvent::kGesturePinchBegin &&
       event.GetType() != blink::WebInputEvent::kGestureFlingCancel &&
       event.GetType() != blink::WebInputEvent::kGestureDoubleTap) {
-    return {nullptr, false, base::nullopt, true, false};
+    return {nullptr, false, base::nullopt, true};
   }
 
   gfx::PointF transformed_point;
diff --git a/content/browser/renderer_host/render_widget_targeter.cc b/content/browser/renderer_host/render_widget_targeter.cc
index 6e121183..deb3d66 100644
--- a/content/browser/renderer_host/render_widget_targeter.cc
+++ b/content/browser/renderer_host/render_widget_targeter.cc
@@ -62,14 +62,10 @@
   TracingUmaTracker(TracingUmaTracker&& tracker) = default;
 
   void StopAndRecord() {
-    StopButNotRecord();
-    UmaHistogramTimes(metric_name_, base::TimeTicks::Now() - start_time_);
-  }
-
-  void StopButNotRecord() {
     TRACE_EVENT_ASYNC_END0(
         kTracingCategory, metric_name_,
         TRACE_ID_WITH_SCOPE("UmaTracker", TRACE_ID_LOCAL(id_)));
+    UmaHistogramTimes(metric_name_, base::TimeTicks::Now() - start_time_);
   }
 
  private:
@@ -96,13 +92,11 @@
     RenderWidgetHostViewBase* in_view,
     bool in_should_query_view,
     base::Optional<gfx::PointF> in_location,
-    bool in_latched_target,
-    bool in_should_verify_result)
+    bool in_latched_target)
     : view(in_view),
       should_query_view(in_should_query_view),
       target_location(in_location),
-      latched_target(in_latched_target),
-      should_verify_result(in_should_verify_result) {}
+      latched_target(in_latched_target) {}
 
 RenderWidgetTargetResult::~RenderWidgetTargetResult() = default;
 
@@ -180,16 +174,6 @@
   return location;
 }
 
-viz::FrameSinkId
-RenderWidgetTargeter::TargetingRequest::GetExpectedFrameSinkId() const {
-  return expected_frame_sink_id;
-}
-
-void RenderWidgetTargeter::TargetingRequest::SetExpectedFrameSinkId(
-    const viz::FrameSinkId& id) {
-  expected_frame_sink_id = id;
-}
-
 const ui::LatencyInfo& RenderWidgetTargeter::TargetingRequest::GetLatency()
     const {
   return latency;
@@ -279,12 +263,6 @@
   } else {
     FoundTarget(target, result.target_location, result.latched_target,
                 &request);
-    // Verify the event targeting results from surface layer viz hit testing if
-    // --use-viz-hit-test-surface-layer is enabled.
-    if (result.should_verify_result && !target->IsRenderWidgetHostViewGuest()) {
-      request.SetExpectedFrameSinkId(target->GetFrameSinkId());
-      QueryAndVerifyClient(std::move(request));
-    }
   }
 }
 
@@ -315,12 +293,6 @@
     RenderWidgetHostViewBase* last_request_target,
     const gfx::PointF& last_target_location,
     TargetingRequest request) {
-  // Async event targeting and verifying use two different queues, so they don't
-  // block each other.
-  bool is_verifying = request.GetExpectedFrameSinkId().is_valid();
-  DCHECK((!is_verifying && !request_in_flight_) ||
-         (is_verifying && !verify_request_in_flight_));
-
   auto* target_client = target->host()->input_target_client();
   // |target_client| may not be set yet for this |target| on Mac, need to
   // understand why this happens. https://crbug.com/859492.
@@ -330,21 +302,16 @@
     return;
   }
 
-  if (is_verifying) {
-    verify_request_in_flight_ = std::move(request);
-  } else {
     request_in_flight_ = std::move(request);
     async_depth_++;
-  }
+
   TracingUmaTracker tracker("Event.AsyncTargeting.ResponseTime");
-  auto& hit_test_timeout =
-      is_verifying ? async_verify_hit_test_timeout_ : async_hit_test_timeout_;
-  hit_test_timeout.reset(new OneShotTimeoutMonitor(
+  async_hit_test_timeout_.reset(new OneShotTimeoutMonitor(
       base::BindOnce(
           &RenderWidgetTargeter::AsyncHitTestTimedOut,
           weak_ptr_factory_.GetWeakPtr(), target->GetWeakPtr(), target_location,
           last_request_target ? last_request_target->GetWeakPtr() : nullptr,
-          last_target_location, is_verifying),
+          last_target_location),
       async_hit_test_timeout_delay_));
 
   TRACE_EVENT_WITH_FLOW2(
@@ -354,11 +321,9 @@
 
   target_client->FrameSinkIdAt(
       target_location, trace_id_,
-      base::BindOnce(
-          &RenderWidgetTargeter::FoundFrameSinkId,
-          weak_ptr_factory_.GetWeakPtr(), target->GetWeakPtr(),
-          is_verifying ? ++last_verify_request_id_ : ++last_request_id_,
-          target_location, std::move(tracker), is_verifying));
+      base::BindOnce(&RenderWidgetTargeter::FoundFrameSinkId,
+                     weak_ptr_factory_.GetWeakPtr(), target->GetWeakPtr(),
+                     ++last_request_id_, target_location, std::move(tracker)));
 }
 
 void RenderWidgetTargeter::QueryClient(TargetingRequest request) {
@@ -368,44 +333,25 @@
                       std::move(request));
 }
 
-void RenderWidgetTargeter::QueryAndVerifyClient(TargetingRequest request) {
-  if (verify_request_in_flight_) {
-    verify_requests_.push(std::move(request));
-    return;
-  }
-  auto* target = request.GetRootView();
-  auto target_location = request.GetLocation();
-  QueryClientInternal(target, target_location, nullptr, gfx::PointF(),
-                      std::move(request));
-}
-
-void RenderWidgetTargeter::FlushEventQueue(bool is_verifying) {
+void RenderWidgetTargeter::FlushEventQueue() {
   bool events_being_flushed = false;
-  base::Optional<TargetingRequest>& request_in_flight =
-      is_verifying ? verify_request_in_flight_ : request_in_flight_;
-  auto* requests = is_verifying ? &verify_requests_ : &requests_;
-  while (!request_in_flight && !requests->empty()) {
-    auto request = std::move(requests->front());
-    requests->pop();
+  while (!request_in_flight_ && !requests_.empty()) {
+    auto request = std::move(requests_.front());
+    requests_.pop();
     // The root-view has gone away. Ignore this event, and try to process the
     // next event.
-    if (!request.GetRootView()) {
+    if (!request.GetRootView())
       continue;
-    }
+
     request.StopQueueingTimeTracker();
     // Only notify the delegate once that the current event queue is being
     // flushed. Once all the events are flushed, notify the delegate again.
-    if (!is_verifying && !events_being_flushed) {
+    if (!events_being_flushed) {
       delegate_->SetEventsBeingFlushed(true);
       events_being_flushed = true;
     }
-    if (is_verifying) {
-      QueryAndVerifyClient(std::move(request));
-    } else {
       ResolveTargetingRequest(std::move(request));
-    }
   }
-  if (!is_verifying)
     delegate_->SetEventsBeingFlushed(false);
 }
 
@@ -414,20 +360,12 @@
     uint32_t request_id,
     const gfx::PointF& target_location,
     TracingUmaTracker tracker,
-    const bool is_verification_request,
     const viz::FrameSinkId& frame_sink_id,
     const gfx::PointF& transformed_location) {
-  if (is_verification_request) {
-    tracker.StopButNotRecord();
-  } else {
-    tracker.StopAndRecord();
-  }
+  tracker.StopAndRecord();
 
-  uint32_t last_id =
-      is_verification_request ? last_verify_request_id_ : last_request_id_;
-  bool in_flight = is_verification_request
-                       ? verify_request_in_flight_.has_value()
-                       : request_in_flight_.has_value();
+  uint32_t last_id = last_request_id_;
+  bool in_flight = request_in_flight_.has_value();
   if (request_id != last_id || !in_flight) {
     // This is a response to a request that already timed out, so the event
     // should have already been dispatched. Mark the renderer as responsive
@@ -436,23 +374,16 @@
     return;
   }
 
-  TargetingRequest request = is_verification_request
-                                 ? std::move(verify_request_in_flight_.value())
-                                 : std::move(request_in_flight_.value());
+  TargetingRequest request = std::move(request_in_flight_.value());
 
-  if (request.GetExpectedFrameSinkId().is_valid()) {
-    verify_request_in_flight_.reset();
-    async_verify_hit_test_timeout_.reset(nullptr);
-  } else {
-    request_in_flight_.reset();
-    async_hit_test_timeout_.reset(nullptr);
+  request_in_flight_.reset();
+  async_hit_test_timeout_.reset(nullptr);
 
-    if (is_viz_hit_testing_debug_enabled_ && request.IsWebInputEventRequest() &&
-        request.GetEvent().GetType() ==
-            blink::WebInputEvent::Type::kMouseDown) {
-      hit_test_async_queried_debug_queue_.push_back(target->GetFrameSinkId());
-    }
+  if (is_viz_hit_testing_debug_enabled_ && request.IsWebInputEventRequest() &&
+      request.GetEvent().GetType() == blink::WebInputEvent::Type::kMouseDown) {
+    hit_test_async_queried_debug_queue_.push_back(target->GetFrameSinkId());
   }
+
   auto* view = delegate_->FindViewFromFrameSinkId(frame_sink_id);
   if (!view)
     view = target.get();
@@ -472,7 +403,7 @@
 
     if (request.IsWebInputEventRequest() &&
         IsMouseMiddleClick(request.GetEvent())) {
-      middle_click_result_ = {view, false, transformed_location, false, false};
+      middle_click_result_ = {view, false, transformed_location, false};
     }
 
     FoundTarget(view, transformed_location, false, &request);
@@ -490,7 +421,7 @@
   DCHECK(request);
 
   if (SiteIsolationPolicy::UseDedicatedProcessesForAllSites() &&
-      !latched_target && !request->GetExpectedFrameSinkId().is_valid()) {
+      !latched_target) {
     UMA_HISTOGRAM_COUNTS_100("Event.AsyncTargeting.AsyncClientDepth",
                              async_depth_);
   }
@@ -508,17 +439,6 @@
     hit_test_async_queried_debug_queue_.clear();
   }
 
-  if (features::IsVizHitTestingSurfaceLayerEnabled() &&
-      request->GetExpectedFrameSinkId().is_valid()) {
-    static const char* kResultsMatchHistogramName =
-        "Event.VizHitTestSurfaceLayer.ResultsMatch";
-    HitTestResultsMatch bucket = GetHitTestResultsMatchBucket(target, request);
-    UMA_HISTOGRAM_ENUMERATION(kResultsMatchHistogramName, bucket,
-                              HitTestResultsMatch::kMaxValue);
-    FlushEventQueue(true);
-    return;
-  }
-
   if (request->IsWebInputEventRequest()) {
     delegate_->DispatchEventToTarget(request->GetRootView(), target,
                                      request->GetEvent(), request->GetLatency(),
@@ -527,29 +447,18 @@
     request->RunCallback(target, target_location);
   }
 
-  FlushEventQueue(false);
+  FlushEventQueue();
 }
 
 void RenderWidgetTargeter::AsyncHitTestTimedOut(
     base::WeakPtr<RenderWidgetHostViewBase> current_request_target,
     const gfx::PointF& current_target_location,
     base::WeakPtr<RenderWidgetHostViewBase> last_request_target,
-    const gfx::PointF& last_target_location,
-    const bool is_verification_request) {
-  DCHECK(request_in_flight_ || verify_request_in_flight_);
+    const gfx::PointF& last_target_location) {
+  DCHECK(request_in_flight_);
 
-  TargetingRequest request = is_verification_request
-                                 ? std::move(verify_request_in_flight_.value())
-                                 : std::move(request_in_flight_.value());
-
-  // If we time out during a verification, we early out to avoid dispatching
-  // event to root frame.
-  if (request.GetExpectedFrameSinkId().is_valid()) {
-    verify_request_in_flight_.reset();
-    return;
-  } else {
-    request_in_flight_.reset();
-  }
+  TargetingRequest request = std::move(request_in_flight_.value());
+  request_in_flight_.reset();
 
   if (!request.GetRootView())
     return;
@@ -570,47 +479,4 @@
   }
 }
 
-RenderWidgetTargeter::HitTestResultsMatch
-RenderWidgetTargeter::GetHitTestResultsMatchBucket(
-    RenderWidgetHostViewBase* target,
-    TargetingRequest* request) const {
-  if (target->GetFrameSinkId() == request->GetExpectedFrameSinkId())
-    return HitTestResultsMatch::kMatch;
-
-  // If the target was not active, i.e. it had not submitted its hit test
-  // data during HitTestAggregator::AppendRegion, the viz hit test data may
-  // be outdated upon hit testing and verification.
-  bool target_was_active = true;
-  const auto& display_hit_test_query_map =
-      GetHostFrameSinkManager()->display_hit_test_query();
-  const auto iter = display_hit_test_query_map.find(
-      request->GetRootView()->GetRootFrameSinkId());
-  // When a root frame sink id is invalidated, e.g. when the window is closed,
-  // the corresponding entry will be removed from the map.
-  if (iter != display_hit_test_query_map.end()) {
-    const auto* hit_test_query = iter->second.get();
-    target_was_active =
-        hit_test_query->ContainsActiveFrameSinkId(target->GetFrameSinkId());
-  }
-  if (!target_was_active)
-    return HitTestResultsMatch::kHitTestDataOutdated;
-
-  // If the results do not match, it is possible that the hit test data
-  // changed during verification. We do synchronous hit test again to make
-  // sure the result is reliable.
-  RenderWidgetTargetResult result =
-      request->IsWebInputEventRequest()
-          ? delegate_->FindTargetSynchronously(request->GetRootView(),
-                                               request->GetEvent())
-          : delegate_->FindTargetSynchronouslyAtPoint(request->GetRootView(),
-                                                      request->GetLocation());
-  if (result.should_query_view || !result.view ||
-      request->GetExpectedFrameSinkId() != result.view->GetFrameSinkId()) {
-    // Hit test data changed, so the result is no longer reliable.
-    return HitTestResultsMatch::kHitTestResultChanged;
-  }
-
-  return HitTestResultsMatch::kDoNotMatch;
-}
-
 }  // namespace content
diff --git a/content/browser/renderer_host/render_widget_targeter.h b/content/browser/renderer_host/render_widget_targeter.h
index 058f01c..e030a3eb 100644
--- a/content/browser/renderer_host/render_widget_targeter.h
+++ b/content/browser/renderer_host/render_widget_targeter.h
@@ -39,8 +39,7 @@
   RenderWidgetTargetResult(RenderWidgetHostViewBase* view,
                            bool should_query_view,
                            base::Optional<gfx::PointF> location,
-                           bool latched_target,
-                           bool should_verify_result);
+                           bool latched_target);
   ~RenderWidgetTargetResult();
 
   RenderWidgetHostViewBase* view = nullptr;
@@ -49,11 +48,6 @@
   // When |latched_target| is false, we explicitly hit-tested events instead of
   // using a known target.
   bool latched_target = false;
-  // When |should_verify_result| is true, RenderWidgetTargeter will do async hit
-  // testing and compare the target with the result of synchronous hit testing.
-  // |should_verify_result| will always be false if we are doing draw quad based
-  // hit testing.
-  bool should_verify_result = false;
 };
 
 class TracingUmaTracker;
@@ -165,10 +159,6 @@
     void StartQueueingTimeTracker();
     void StopQueueingTimeTracker();
 
-    // Verification TargetingRequest
-    viz::FrameSinkId GetExpectedFrameSinkId() const;
-    void SetExpectedFrameSinkId(const viz::FrameSinkId& id);
-
    private:
     base::WeakPtr<RenderWidgetHostViewBase> root_view;
 
@@ -181,14 +171,6 @@
     ui::WebScopedInputEvent event;
     ui::LatencyInfo latency;
 
-    // |expected_frame_sink_id| is only valid if the request is for
-    // verification. It is temporarily added for v2 viz hit testing.
-    // V2 uses cc generated hit test data and we need to verify its correctness.
-    // The variable is the target frame sink id v2 finds in synchronous hit
-    // testing. It should be the same as the async hit testing target if v2
-    // works correctly.
-    viz::FrameSinkId expected_frame_sink_id;
-
     // To track how long the request has been queued.
     std::unique_ptr<TracingUmaTracker> tracker;
 
@@ -199,7 +181,7 @@
 
   // Attempts to target and dispatch all events in the queue. It stops if it has
   // to query a client, or if the queue becomes empty.
-  void FlushEventQueue(bool is_verifying);
+  void FlushEventQueue();
 
   // Queries |target| to find the correct target for |request|.
   // |target_location| is the location in |target|'s coordinate space.
@@ -214,8 +196,6 @@
 
   void QueryClient(TargetingRequest request);
 
-  void QueryAndVerifyClient(TargetingRequest request);
-
   // |target_location|, if
   // set, is the location in |target|'s coordinate space.
   // |target| is the current target that will be queried using its
@@ -223,13 +203,10 @@
   // |frame_sink_id| is returned from the InputTargetClient to indicate where
   // the event should be routed, and |transformed_location| is the point in
   // that new target's coordinate space.
-  // |is_verification_request| is true if this targeting request was for
-  // verification only.
   void FoundFrameSinkId(base::WeakPtr<RenderWidgetHostViewBase> target,
                         uint32_t request_id,
                         const gfx::PointF& target_location,
                         TracingUmaTracker tracker,
-                        const bool is_verification_request,
                         const viz::FrameSinkId& frame_sink_id,
                         const gfx::PointF& transformed_location);
 
@@ -248,8 +225,7 @@
       base::WeakPtr<RenderWidgetHostViewBase> current_request_target,
       const gfx::PointF& current_target_location,
       base::WeakPtr<RenderWidgetHostViewBase> last_request_target,
-      const gfx::PointF& last_target_location,
-      const bool is_verification_request);
+      const gfx::PointF& last_target_location);
 
   HitTestResultsMatch GetHitTestResultsMatchBucket(
       RenderWidgetHostViewBase* target,
@@ -263,13 +239,6 @@
   uint32_t last_request_id_ = 0;
   std::queue<TargetingRequest> requests_;
 
-  // With viz-hit-testing-surface-layer being enabled, we do async hit testing
-  // for already dispatched events for verification. These verification requests
-  // should not block normal hit testing requests.
-  base::Optional<TargetingRequest> verify_request_in_flight_;
-  uint32_t last_verify_request_id_ = 0;
-  std::queue<TargetingRequest> verify_requests_;
-
   std::unordered_set<RenderWidgetHostViewBase*> unresponsive_views_;
 
   // This value keeps track of the number of clients we have asked in order to
@@ -288,7 +257,6 @@
       base::TimeDelta::FromMilliseconds(kAsyncHitTestTimeoutMs);
 
   std::unique_ptr<OneShotTimeoutMonitor> async_hit_test_timeout_;
-  std::unique_ptr<OneShotTimeoutMonitor> async_verify_hit_test_timeout_;
 
   uint64_t trace_id_;
 
diff --git a/content/browser/renderer_interface_binders.cc b/content/browser/renderer_interface_binders.cc
index 670799fa..49f759c 100644
--- a/content/browser/renderer_interface_binders.cc
+++ b/content/browser/renderer_interface_binders.cc
@@ -31,7 +31,6 @@
 #include "mojo/public/cpp/bindings/self_owned_receiver.h"
 #include "services/service_manager/public/cpp/binder_registry.h"
 #include "third_party/blink/public/common/features.h"
-#include "third_party/blink/public/mojom/cache_storage/cache_storage.mojom.h"
 #include "url/origin.h"
 
 namespace content {
@@ -98,13 +97,6 @@
   parameterized_binder_registry_.AddInterface(
       base::BindRepeating(CreateWebSocketConnector));
 
-  parameterized_binder_registry_.AddInterface(base::BindRepeating(
-      [](mojo::PendingReceiver<blink::mojom::CacheStorage> receiver,
-         RenderProcessHost* host, const url::Origin& origin) {
-        static_cast<RenderProcessHostImpl*>(host)->BindCacheStorage(
-            std::move(receiver), origin);
-      }));
-
   parameterized_binder_registry_.AddInterface(
       base::BindRepeating(&QuotaDispatcherHost::CreateForWorker));
 }
diff --git a/content/browser/service_worker/embedded_worker_instance.cc b/content/browser/service_worker/embedded_worker_instance.cc
index 20d8776..e84da98 100644
--- a/content/browser/service_worker/embedded_worker_instance.cc
+++ b/content/browser/service_worker/embedded_worker_instance.cc
@@ -199,8 +199,8 @@
   if (base::FeatureList::IsEnabled(
           blink::features::kEagerCacheStorageSetupForServiceWorkers) &&
       !params->pause_after_download) {
-    rph->BindCacheStorage(cache_storage.InitWithNewPipeAndPassReceiver(),
-                          url::Origin::Create(params->script_url));
+    rph->BindCacheStorage(url::Origin::Create(params->script_url),
+                          cache_storage.InitWithNewPipeAndPassReceiver());
   }
 
   // Bind |receiver|, which is attached to |EmbeddedWorkerInstance::client_|, to
diff --git a/content/browser/shape_detection/shape_detection_browsertest.cc b/content/browser/shape_detection/shape_detection_browsertest.cc
index 032cb464..815a9d8 100644
--- a/content/browser/shape_detection/shape_detection_browsertest.cc
+++ b/content/browser/shape_detection/shape_detection_browsertest.cc
@@ -111,7 +111,7 @@
                          GetParam().expected_bounding_boxes);
 }
 
-INSTANTIATE_TEST_SUITE_P(,
+INSTANTIATE_TEST_SUITE_P(All,
                          ShapeDetectionBrowserTest,
                          testing::ValuesIn(kTestParameters));
 
diff --git a/content/browser/web_contents/web_contents_impl_browsertest.cc b/content/browser/web_contents/web_contents_impl_browsertest.cc
index c3a4f36..6494d60 100644
--- a/content/browser/web_contents/web_contents_impl_browsertest.cc
+++ b/content/browser/web_contents/web_contents_impl_browsertest.cc
@@ -1295,7 +1295,9 @@
     if (GetParam())
       enabled_features.push_back(blink::features::kPlzDedicatedWorker);
 
-    feature_list.InitWithFeatures(enabled_features, {});
+    feature_list.InitWithFeatures(
+        enabled_features,
+        {net::features::kAppendFrameOriginToNetworkIsolationKey});
   }
 
  private:
diff --git a/content/public/android/java/src/org/chromium/content/browser/framehost/RenderFrameHostImpl.java b/content/public/android/java/src/org/chromium/content/browser/framehost/RenderFrameHostImpl.java
index d5333e9f..69e09cda 100644
--- a/content/public/android/java/src/org/chromium/content/browser/framehost/RenderFrameHostImpl.java
+++ b/content/public/android/java/src/org/chromium/content/browser/framehost/RenderFrameHostImpl.java
@@ -91,6 +91,13 @@
     }
 
     @Override
+    public boolean isPaymentFeaturePolicyEnabled() {
+        return mNativeRenderFrameHostAndroid != 0
+                && RenderFrameHostImplJni.get().isPaymentFeaturePolicyEnabled(
+                        mNativeRenderFrameHostAndroid, RenderFrameHostImpl.this);
+    }
+
+    @Override
     public InterfaceProvider getRemoteInterfaces() {
         return mInterfaceProvider;
     }
@@ -140,6 +147,8 @@
                 long nativeRenderFrameHostAndroid, RenderFrameHostImpl caller);
         void getCanonicalUrlForSharing(long nativeRenderFrameHostAndroid,
                 RenderFrameHostImpl caller, Callback<String> callback);
+        boolean isPaymentFeaturePolicyEnabled(
+                long nativeRenderFrameHostAndroid, RenderFrameHostImpl caller);
         UnguessableToken getAndroidOverlayRoutingToken(
                 long nativeRenderFrameHostAndroid, RenderFrameHostImpl caller);
         void notifyUserActivation(long nativeRenderFrameHostAndroid, RenderFrameHostImpl caller);
diff --git a/content/public/android/java/src/org/chromium/content_public/browser/RenderFrameHost.java b/content/public/android/java/src/org/chromium/content_public/browser/RenderFrameHost.java
index 7cc2324..7e31ac0 100644
--- a/content/public/android/java/src/org/chromium/content_public/browser/RenderFrameHost.java
+++ b/content/public/android/java/src/org/chromium/content_public/browser/RenderFrameHost.java
@@ -36,6 +36,16 @@
     void getCanonicalUrlForSharing(Callback<String> callback);
 
     /**
+     * Returns whether the feature policy allows the "payment" feature in this frame.
+     *
+     * TODO(rouslan): Expose the full set of feature policy enum values to Java. See:
+     * https://crbug.com/1027176
+     *
+     * @return Whether the feature policy allows the "payment" feature in this frame.
+     */
+    boolean isPaymentFeaturePolicyEnabled();
+
+    /**
      * Returns an InterfaceProvider that provides access to interface implementations provided by
      * the corresponding RenderFrame. This provides access to interfaces implemented in the renderer
      * to Java code in the browser process.
diff --git a/content/public/app/content_browser_manifest.cc b/content/public/app/content_browser_manifest.cc
index be29b331..377c3a6 100644
--- a/content/public/app/content_browser_manifest.cc
+++ b/content/public/app/content_browser_manifest.cc
@@ -166,20 +166,17 @@
           .ExposeInterfaceFilterCapability_Deprecated(
               "navigation:shared_worker", "renderer",
               std::set<const char*>{
-                  "blink.mojom.CacheStorage",
                   "blink.mojom.QuotaDispatcherHost",
                   "blink.mojom.WebSocketConnector"})
           .ExposeInterfaceFilterCapability_Deprecated(
               "navigation:dedicated_worker", "renderer",
               std::set<const char*>{
-                  "blink.mojom.CacheStorage",
                   "blink.mojom.DedicatedWorkerHostFactory",
                   "blink.mojom.QuotaDispatcherHost",
                   "blink.mojom.WebSocketConnector"})
           .ExposeInterfaceFilterCapability_Deprecated(
               "navigation:service_worker", "renderer",
               std::set<const char*>{
-                  "blink.mojom.CacheStorage",
                   "blink.mojom.QuotaDispatcherHost",
                   "network.mojom.RestrictedCookieManager",
                   "blink.mojom.WebSocketConnector"})
@@ -188,10 +185,8 @@
               std::set<const char*>{
                   "autofill.mojom.AutofillDriver",
                   "autofill.mojom.PasswordManagerDriver",
-                  "blink.mojom.CacheStorage",
                   "blink.mojom.DisplayCutoutHost",
                   "blink.mojom.DedicatedWorkerHostFactory",
-                  "blink.mojom.GeolocationService",
                   "blink.mojom.Portal",
                   "blink.mojom.PrefetchURLLoaderService",
                   "blink.mojom.QuotaDispatcherHost",
@@ -199,7 +194,6 @@
                   "content.mojom.InputInjector",
                   "content.mojom.RendererAudioInputStreamFactory",
                   "content.mojom.RendererAudioOutputStreamFactory",
-                  "device.mojom.Geolocation",
                   "discardable_memory.mojom.DiscardableSharedMemoryManager",
                   "media.mojom.InterfaceFactory",
                   "media.mojom.MediaMetricsProvider",
diff --git a/content/public/browser/android/synchronous_compositor.h b/content/public/browser/android/synchronous_compositor.h
index f31f8a8..8a4140ed 100644
--- a/content/public/browser/android/synchronous_compositor.h
+++ b/content/public/browser/android/synchronous_compositor.h
@@ -124,6 +124,9 @@
   // and if any input animation is active, it should tick now.
   virtual void OnComputeScroll(base::TimeTicks animation_time) = 0;
 
+  // Called when viz for webview enabled to drive browser-side fling
+  virtual void ProgressFling(base::TimeTicks frame_time) = 0;
+
  protected:
   virtual ~SynchronousCompositor() {}
 };
diff --git a/content/public/browser/browser_context.h b/content/public/browser/browser_context.h
index f0dc311..8742f26 100644
--- a/content/public/browser/browser_context.h
+++ b/content/public/browser/browser_context.h
@@ -209,6 +209,10 @@
       BrowserContext* browser_context,
       std::unique_ptr<content::DownloadManager> download_manager);
 
+  static void SetPermissionControllerForTesting(
+      BrowserContext* browser_context,
+      std::unique_ptr<PermissionController> permission_controller);
+
   // Makes the Service Manager aware of this BrowserContext, and assigns a
   // instance group ID to it. Should be called for each BrowserContext created.
   static void Initialize(BrowserContext* browser_context,
diff --git a/content/public/browser/render_process_host.h b/content/public/browser/render_process_host.h
index 57adbd8f..f3b85f3 100644
--- a/content/public/browser/render_process_host.h
+++ b/content/public/browser/render_process_host.h
@@ -27,6 +27,7 @@
 #include "mojo/public/cpp/bindings/pending_receiver.h"
 #include "mojo/public/cpp/bindings/pending_remote.h"
 #include "net/base/network_isolation_key.h"
+#include "services/network/public/mojom/cross_origin_embedder_policy.mojom-forward.h"
 #include "services/network/public/mojom/network_context.mojom-forward.h"
 #include "services/network/public/mojom/url_loader_factory.mojom-forward.h"
 #include "third_party/blink/public/mojom/appcache/appcache.mojom.h"
@@ -493,8 +494,8 @@
   // The following several methods are for internal use only, and are only
   // exposed here to support MockRenderProcessHost usage in tests.
   virtual void BindCacheStorage(
-      mojo::PendingReceiver<blink::mojom::CacheStorage> receiver,
-      const url::Origin& origin) = 0;
+      const url::Origin& origin,
+      mojo::PendingReceiver<blink::mojom::CacheStorage> receiver) = 0;
   virtual void BindFileSystemManager(
       const url::Origin& origin,
       mojo::PendingReceiver<blink::mojom::FileSystemManager> receiver) = 0;
diff --git a/content/public/test/android/javatests/src/org/chromium/content_public/browser/test/mock/MockRenderFrameHost.java b/content/public/test/android/javatests/src/org/chromium/content_public/browser/test/mock/MockRenderFrameHost.java
index 18ee3ae..1c9bd1c 100644
--- a/content/public/test/android/javatests/src/org/chromium/content_public/browser/test/mock/MockRenderFrameHost.java
+++ b/content/public/test/android/javatests/src/org/chromium/content_public/browser/test/mock/MockRenderFrameHost.java
@@ -27,6 +27,11 @@
     public void getCanonicalUrlForSharing(Callback<String> callback) {}
 
     @Override
+    public boolean isPaymentFeaturePolicyEnabled() {
+        return false;
+    }
+
+    @Override
     public InterfaceProvider getRemoteInterfaces() {
         return null;
     }
diff --git a/content/public/test/mock_render_process_host.cc b/content/public/test/mock_render_process_host.cc
index eb78ee7..d1a129a 100644
--- a/content/public/test/mock_render_process_host.cc
+++ b/content/public/test/mock_render_process_host.cc
@@ -447,8 +447,8 @@
 }
 
 void MockRenderProcessHost::BindCacheStorage(
-    mojo::PendingReceiver<blink::mojom::CacheStorage> receiver,
-    const url::Origin& origin) {
+    const url::Origin& origin,
+    mojo::PendingReceiver<blink::mojom::CacheStorage> receiver) {
   cache_storage_receiver_ = std::move(receiver);
 }
 
diff --git a/content/public/test/mock_render_process_host.h b/content/public/test/mock_render_process_host.h
index 2838336..0ebc2d1 100644
--- a/content/public/test/mock_render_process_host.h
+++ b/content/public/test/mock_render_process_host.h
@@ -171,8 +171,8 @@
   void LockToOrigin(const IsolationContext& isolation_context,
                     const GURL& lock_url) override;
   void BindCacheStorage(
-      mojo::PendingReceiver<blink::mojom::CacheStorage> receiver,
-      const url::Origin& origin) override;
+      const url::Origin& origin,
+      mojo::PendingReceiver<blink::mojom::CacheStorage> receiver) override;
   void BindFileSystemManager(
       const url::Origin& origin,
       mojo::PendingReceiver<blink::mojom::FileSystemManager> receiver)
diff --git a/content/public/test/test_synchronous_compositor_android.h b/content/public/test/test_synchronous_compositor_android.h
index 6592636f..46e2048 100644
--- a/content/public/test/test_synchronous_compositor_android.h
+++ b/content/public/test/test_synchronous_compositor_android.h
@@ -41,6 +41,7 @@
   void SynchronouslyZoomBy(float zoom_delta,
                            const gfx::Point& anchor) override {}
   void OnComputeScroll(base::TimeTicks animate_time) override {}
+  void ProgressFling(base::TimeTicks frame_time) override {}
 
   void SetHardwareFrame(uint32_t layer_tree_frame_sink_id,
                         std::unique_ptr<viz::CompositorFrame> frame);
diff --git a/content/shell/android/shell_apk/src/org/chromium/content_shell_apk/ChildProcessLauncherTestUtils.java b/content/shell/android/shell_apk/src/org/chromium/content_shell_apk/ChildProcessLauncherTestUtils.java
index fbac2de..3481221 100644
--- a/content/shell/android/shell_apk/src/org/chromium/content_shell_apk/ChildProcessLauncherTestUtils.java
+++ b/content/shell/android/shell_apk/src/org/chromium/content_shell_apk/ChildProcessLauncherTestUtils.java
@@ -35,7 +35,7 @@
         done.acquireUninterruptibly();
     }
 
-    public static <R> R runOnLauncherAndGetResult(Callable<R> callable) {
+    public static <T> T runOnLauncherAndGetResult(Callable<T> callable) {
         if (LauncherThread.runningOnLauncherThread()) {
             try {
                 return callable.call();
@@ -44,7 +44,7 @@
             }
         }
         try {
-            FutureTask<R> task = new FutureTask<R>(callable);
+            FutureTask<T> task = new FutureTask<T>(callable);
             LauncherThread.post(task);
             return task.get();
         } catch (Exception e) {
diff --git a/content/test/gpu/gpu_tests/test_expectations/webgl2_conformance_expectations.txt b/content/test/gpu/gpu_tests/test_expectations/webgl2_conformance_expectations.txt
index e384e908..1a54a0f 100644
--- a/content/test/gpu/gpu_tests/test_expectations/webgl2_conformance_expectations.txt
+++ b/content/test/gpu/gpu_tests/test_expectations/webgl2_conformance_expectations.txt
@@ -150,11 +150,13 @@
 crbug.com/907195 [ opengl win passthrough intel intel_lt_25.20.100.6444 ] conformance/ogles/GL/biuDepthRange/biuDepthRange_001_to_002.html [ Skip ]
 crbug.com/907195 [ opengl win passthrough intel intel_lt_25.20.100.6444 ] conformance/uniforms/no-over-optimization-on-uniform-array-09.html [ Skip ]
 
-# Flaky failure in IDirect3D9Ex::CreateDeviceEx during DXVAVideoDecodeAccelerator::Initialize on 26.20.100.7323 driver
-crbug.com/1026468 [ win intel opengl passthrough ] conformance/textures/video/* [ RetryOnFailure ]
-crbug.com/1026468 [ win intel opengl passthrough ] conformance/textures/image_bitmap_from_video/* [ RetryOnFailure ]
-crbug.com/1026468 [ win intel opengl passthrough ] conformance2/textures/video/* [ RetryOnFailure ]
-crbug.com/1026468 [ win intel opengl passthrough ] conformance2/textures/image_bitmap_from_video/* [ RetryOnFailure ]
+# Flaky failure in IDirect3D9Ex::CreateDeviceEx
+# during DXVAVideoDecodeAccelerator::Initialize on 26.20.100.7323 driver
+# When it fails, it's all 3 retires, thus "Failure" expectation
+crbug.com/1026468 [ win intel opengl passthrough ] conformance/textures/video/* [ Failure ]
+crbug.com/1026468 [ win intel opengl passthrough ] conformance/textures/image_bitmap_from_video/* [ Failure ]
+crbug.com/1026468 [ win intel opengl passthrough ] conformance2/textures/video/* [ Failure ]
+crbug.com/1026468 [ win intel opengl passthrough ] conformance2/textures/image_bitmap_from_video/* [ Failure ]
 
 # Windows only.
 crbug.com/736926 [ win ] conformance2/textures/svg_image/tex-2d-rgb565-rgb-unsigned_short_5_6_5.html [ RetryOnFailure ]
diff --git a/docs/android_dynamic_feature_modules.md b/docs/android_dynamic_feature_modules.md
index 19a0633a..7f0d56b 100644
--- a/docs/android_dynamic_feature_modules.md
+++ b/docs/android_dynamic_feature_modules.md
@@ -94,6 +94,9 @@
 </histogram_suffixes>
 ```
 
+See [below](#metrics) for what metrics will be automatically collected after
+this step.
+
 <!--- TODO(tiborg): Add info about install UI. -->
 Lastly, give your module a title that Chrome and Play can use for the install
 UI. To do this, add a string to
@@ -135,16 +138,13 @@
 ```
 
 This will install Foo alongside the rest of Chrome. The rest of Chrome is called
-_base_ module in the bundle world. The Base module will always be put on the
+_base_ module in the bundle world. The base module will always be put on the
 device when initially installing Chrome.
 
 *** note
-**Note:** You have to specify `-m base` here to make it explicit which modules
-will be installed. If you only specify `-m foo` the command will fail. It is
-also possible to specify no modules. In that case, the script will install the
-set of modules that the Play Store would install when first installing Chrome.
-That may be different than just specifying `-m base` if we have non-on-demand
-modules.
+**Note:** The install script may install more modules than you specify, e.g.
+when there are default or conditionally installed modules (see
+[below](#conditional-install) for details).
 ***
 
 You can then check that the install worked with:
@@ -637,15 +637,6 @@
 }
 ```
 
-*** note
-**Warning:** While your module is emulated (see [below](#on-demand-install))
-your resources are only available through
-`ContextUtils.getApplicationContext()`. Not through activities, etc. We
-therefore recommend that you only access DFM resources this way. See
-[crbug/949729](https://bugs.chromium.org/p/chromium/issues/detail?id=949729)
-for progress on making this more robust.
-***
-
 
 ### Module install
 
@@ -782,6 +773,22 @@
 </manifest>
 ```
 
+### Metrics
+
+After adding your module to `AndroidFeatureModuleName` (see
+[above](#create-dfm-target)) we will collect, among others, the following
+metrics:
+
+* `Android.FeatureModules.AvailabilityStatus.Foo`: Measures your module's
+  install penetration. That is, the share of users who eventually installed
+  the module after requesting it (once or multiple times).
+
+* `Android.FeatureModules.InstallStatus.Foo`: The result of an on-demand
+  install request. Can be success or one of several error conditions.
+
+* `Android.FeatureModules.UncachedAwakeInstallDuration.Foo`: The duration to
+  install your module successfully after on-demand requesting it.
+
 
 ### Integration test APK and Android K support
 
diff --git a/docs/security/autoupgrade-mixed.md b/docs/security/autoupgrade-mixed.md
index a55a18b..9e03ea33 100644
--- a/docs/security/autoupgrade-mixed.md
+++ b/docs/security/autoupgrade-mixed.md
@@ -1,10 +1,10 @@
 # Mixed content Autoupgrade
 
 ## Description
-We are currently running an experiment upgrading mixed content (insecure content on secure sites) to HTTPS, as part of this, some users will see HTTP subresource URLs rewritten as HTTPS when browsing a site served over HTTPS. This is similar behavior to that if the site included the Upgrade-Insecure-Requests CSP directive.
+Chrome will now (starting on M80) attempt to upgrade some types of mixed content (HTTP on an HTTPS site) subresources. Subresources that fail to load over HTTPS will not be loaded. For more information see [the official announcement](https://blog.chromium.org/2019/10/no-more-mixed-messages-about-https.html).
 
 ## Scope
-Currently subresources loaded over HTTP and Websocket URLs are autoupgraded for users who are part of the experiment. Form submissions are not currently part of the experiment.
+Currently only audio and video subresources are autoupgraded. On a future version images will be included.
 
 ## Opt-out
-You can opt out of having mixed content autoupgraded in your site by including an HTTP header with type 'mixed-content' and value 'noupgrade', this will disable autoupgrades for subresources. Since mixed content websockets are automatically blocked, autoupgrades cannot be disabled for those.
+Users can disable autoupgrades on a per-site basis through content settings (chrome://settings/content/insecureContent).
diff --git a/gpu/command_buffer/service/external_vk_image_backing.cc b/gpu/command_buffer/service/external_vk_image_backing.cc
index bad32b3..b99410e 100644
--- a/gpu/command_buffer/service/external_vk_image_backing.cc
+++ b/gpu/command_buffer/service/external_vk_image_backing.cc
@@ -674,23 +674,8 @@
     DLOG(ERROR) << "The backing is not created with GLES2 usage.";
     return nullptr;
   }
-#if defined(OS_LINUX)
-  gl::GLApi* api = gl::g_current_gl_context;
-  // Request extensions from ANGLE
-  if (!gl::g_current_gl_driver->ext.b_GL_EXT_memory_object ||
-      !gl::g_current_gl_driver->ext.b_GL_EXT_memory_object_fd ||
-      !gl::g_current_gl_driver->ext.b_GL_EXT_semaphore ||
-      !gl::g_current_gl_driver->ext.b_GL_EXT_semaphore_fd) {
-    api->glRequestExtensionANGLEFn("GL_EXT_memory_object");
-    api->glRequestExtensionANGLEFn("GL_EXT_memory_object_fd");
-    api->glRequestExtensionANGLEFn("GL_EXT_semaphore");
-    api->glRequestExtensionANGLEFn("GL_EXT_semaphore_fd");
-    // TODO(crbug.com/1025451): ReinitializeDynamicBindings is expensive and
-    // should be removed once eglCreateContext can be conficured to specify
-    // which extensions to enable.
-    gl::GLContext::GetCurrent()->ReinitializeDynamicBindings();
-  }
 
+#if defined(OS_LINUX)
   if (!texture_passthrough_) {
     GLuint texture_service_id = ProduceGLTextureInternal();
     if (!texture_service_id)
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_passthrough.cc b/gpu/command_buffer/service/gles2_cmd_decoder_passthrough.cc
index ad87416..fc881857 100644
--- a/gpu/command_buffer/service/gles2_cmd_decoder_passthrough.cc
+++ b/gpu/command_buffer/service/gles2_cmd_decoder_passthrough.cc
@@ -772,6 +772,10 @@
       "GL_CHROMIUM_bind_uniform_location",
       "GL_CHROMIUM_sync_query",
       "GL_EXT_debug_marker",
+      "GL_EXT_memory_object",
+      "GL_EXT_memory_object_fd",
+      "GL_EXT_semaphore",
+      "GL_EXT_semaphore_fd",
       "GL_KHR_debug",
       "GL_NV_fence",
       "GL_OES_EGL_image",
diff --git a/ios/chrome/browser/ui/app_launcher/BUILD.gn b/ios/chrome/browser/ui/app_launcher/BUILD.gn
index e2e09b3..d4c94a74 100644
--- a/ios/chrome/browser/ui/app_launcher/BUILD.gn
+++ b/ios/chrome/browser/ui/app_launcher/BUILD.gn
@@ -41,6 +41,9 @@
     "//base/test:test_support",
     "//ios/chrome/app/strings:ios_strings_grit",
     "//ios/chrome/browser/app_launcher",
+    "//ios/chrome/browser/overlays",
+    "//ios/chrome/browser/overlays/public/web_content_area",
+    "//ios/chrome/browser/ui/dialogs:feature_flags",
     "//ios/chrome/test:test_support",
     "//ios/web/public/test/fakes",
     "//testing/gtest",
diff --git a/ios/chrome/browser/ui/app_launcher/app_launcher_coordinator_unittest.mm b/ios/chrome/browser/ui/app_launcher/app_launcher_coordinator_unittest.mm
index ff986c9..3de4d468d9 100644
--- a/ios/chrome/browser/ui/app_launcher/app_launcher_coordinator_unittest.mm
+++ b/ios/chrome/browser/ui/app_launcher/app_launcher_coordinator_unittest.mm
@@ -8,6 +8,10 @@
 
 #include "base/mac/foundation_util.h"
 #import "ios/chrome/browser/app_launcher/app_launcher_tab_helper.h"
+#include "ios/chrome/browser/overlays/public/overlay_request.h"
+#import "ios/chrome/browser/overlays/public/overlay_request_queue.h"
+#import "ios/chrome/browser/overlays/public/web_content_area/app_launcher_alert_overlay.h"
+#import "ios/chrome/browser/ui/dialogs/dialog_features.h"
 #include "ios/chrome/grit/ios_strings.h"
 #import "ios/chrome/test/scoped_key_window.h"
 #import "ios/web/public/test/fakes/test_web_state.h"
@@ -34,12 +38,40 @@
     OCMStub([application_ sharedApplication]).andReturn(application_);
     AppLauncherTabHelper::CreateForWebState(&web_state_, nil, nil);
   }
-  ~AppLauncherCoordinatorTest() override { [application_ stopMocking]; }
+  ~AppLauncherCoordinatorTest() override {
+    [application_ stopMocking];
+    OverlayRequestQueue::FromWebState(&web_state_,
+                                      OverlayModality::kWebContentArea)
+        ->CancelAllRequests();
+  }
 
   AppLauncherTabHelper* tab_helper() {
     return AppLauncherTabHelper::FromWebState(&web_state_);
   }
 
+  bool IsShowingDialog(bool is_repeated_request) {
+    if (base::FeatureList::IsEnabled(dialogs::kNonModalDialogs)) {
+      OverlayRequest* request =
+          OverlayRequestQueue::FromWebState(&web_state_,
+                                            OverlayModality::kWebContentArea)
+              ->front_request();
+      if (!request)
+        return false;
+      AppLauncherAlertOverlayRequestConfig* config =
+          request->GetConfig<AppLauncherAlertOverlayRequestConfig>();
+      return config && config->is_repeated_request() == is_repeated_request;
+    } else {
+      UIAlertController* alert_controller =
+          base::mac::ObjCCastStrict<UIAlertController>(
+              base_view_controller_.presentedViewController);
+      NSString* message =
+          is_repeated_request
+              ? l10n_util::GetNSString(IDS_IOS_OPEN_REPEATEDLY_ANOTHER_APP)
+              : l10n_util::GetNSString(IDS_IOS_OPEN_IN_ANOTHER_APP);
+      return alert_controller.message == message;
+    }
+  }
+
   web::TestWebState web_state_;
   UIViewController* base_view_controller_ = nil;
   ScopedKeyWindow scoped_key_window_;
@@ -54,13 +86,7 @@
                                       launchAppWithURL:GURL("itms://1234")
                                         linkTransition:NO];
   EXPECT_TRUE(app_exists);
-  ASSERT_TRUE([base_view_controller_.presentedViewController
-      isKindOfClass:[UIAlertController class]]);
-  UIAlertController* alert_controller =
-      base::mac::ObjCCastStrict<UIAlertController>(
-          base_view_controller_.presentedViewController);
-  EXPECT_NSEQ(l10n_util::GetNSString(IDS_IOS_OPEN_IN_ANOTHER_APP),
-              alert_controller.message);
+  EXPECT_TRUE(IsShowingDialog(/*is_repeated_request=*/false));
 }
 
 // Tests that in the new AppLauncher, an app URL attempts to launch the
@@ -81,11 +107,5 @@
   [coordinator_ appLauncherTabHelper:tab_helper()
                     launchAppWithURL:GURL("some-app://1234")
                       linkTransition:NO];
-  ASSERT_TRUE([base_view_controller_.presentedViewController
-      isKindOfClass:[UIAlertController class]]);
-  UIAlertController* alert_controller =
-      base::mac::ObjCCastStrict<UIAlertController>(
-          base_view_controller_.presentedViewController);
-  EXPECT_NSEQ(l10n_util::GetNSString(IDS_IOS_OPEN_IN_ANOTHER_APP),
-              alert_controller.message);
+  EXPECT_TRUE(IsShowingDialog(/*is_repeated_request=*/false));
 }
diff --git a/ios/chrome/browser/ui/dialogs/dialog_features.mm b/ios/chrome/browser/ui/dialogs/dialog_features.mm
index 0807bd26..8cc9ccb 100644
--- a/ios/chrome/browser/ui/dialogs/dialog_features.mm
+++ b/ios/chrome/browser/ui/dialogs/dialog_features.mm
@@ -11,6 +11,6 @@
 namespace dialogs {
 
 const base::Feature kNonModalDialogs{"kNonModalDialogs",
-                                     base::FEATURE_DISABLED_BY_DEFAULT};
+                                     base::FEATURE_ENABLED_BY_DEFAULT};
 
 }  // namespace dialogs
diff --git a/ios/chrome/browser/ui/dialogs/javascript_dialog_egtest.mm b/ios/chrome/browser/ui/dialogs/javascript_dialog_egtest.mm
index be3e3c0..e53c53d 100644
--- a/ios/chrome/browser/ui/dialogs/javascript_dialog_egtest.mm
+++ b/ios/chrome/browser/ui/dialogs/javascript_dialog_egtest.mm
@@ -571,6 +571,12 @@
     EARL_GREY_TEST_DISABLED(@"Test disabled on iOS13.");
   }
 
+  // This tests is for DialogPresenter behavior, and does not apply to
+  // OverlayPresenter, which is used for the non-modal dialog solution.
+  if (AreDialogsNonModal()) {
+    EARL_GREY_TEST_DISABLED(@"Test disabled for non-modal dialogs.");
+  }
+
   // Load the test page with a link to kOnLoadAlertURL and long tap on the link.
   const GURL kURL = self.testServer->GetURL(kLinkPageURLPath);
   [ChromeEarlGrey loadURL:kURL];
diff --git a/ios/chrome/browser/ui/infobars/coordinators/infobar_translate_coordinator.mm b/ios/chrome/browser/ui/infobars/coordinators/infobar_translate_coordinator.mm
index 8ef38a33..33c322c 100644
--- a/ios/chrome/browser/ui/infobars/coordinators/infobar_translate_coordinator.mm
+++ b/ios/chrome/browser/ui/infobars/coordinators/infobar_translate_coordinator.mm
@@ -258,15 +258,66 @@
 #pragma mark - InfobarTranslateModalDelegate
 
 - (void)alwaysTranslateSourceLanguage {
-  // TODO(crbug.com/1014959):
+  DCHECK(!self.translateInfoBarDelegate->ShouldAlwaysTranslate());
+  self.userAction |= UserActionAlwaysTranslate;
+  // TODO(crbug.com/1014959): Add metrics
+  self.translateInfoBarDelegate->ToggleAlwaysTranslate();
+  // Since toggle turned on always translate, translate now.
+  // This doesn't call performInfobarAction, because its implementation checks
+  // ShouldAutoAlwaysTranslate(), which modifies the Translate state. There is
+  // also no need update the badge state since it will be updated by
+  // translateInfoBarDelegate:didChangeTranslateStep:
+  self.translateInfoBarDelegate->Translate();
+  [self dismissInfobarModal:self animated:YES completion:nil];
+}
+
+- (void)undoAlwaysTranslateSourceLanguage {
+  DCHECK(self.translateInfoBarDelegate->ShouldAlwaysTranslate());
+  // TODO(crbug.com/1014959): Add metrics and new user action?
+  self.translateInfoBarDelegate->ToggleAlwaysTranslate();
+  [self dismissInfobarModal:self animated:YES completion:nil];
 }
 
 - (void)neverTranslateSourceLanguage {
-  // TODO(crbug.com/1014959):
+  DCHECK(self.translateInfoBarDelegate->IsTranslatableLanguageByPrefs());
+  self.userAction |= UserActionNeverTranslateLanguage;
+  // TODO(crbug.com/1014959): Add metrics
+  self.translateInfoBarDelegate->ToggleTranslatableLanguageByPrefs();
+  [self dismissInfobarModal:self
+                   animated:YES
+                 completion:^{
+                   // Completely remove the Infobar along with its badge after
+                   // blacklisting the Website.
+                   [self detachView];
+                 }];
+}
+
+- (void)undoNeverTranslateSourceLanguage {
+  DCHECK(!self.translateInfoBarDelegate->IsTranslatableLanguageByPrefs());
+  self.translateInfoBarDelegate->ToggleTranslatableLanguageByPrefs();
+  [self dismissInfobarModal:self animated:YES completion:nil];
+  // TODO(crbug.com/1014959): implement else logic. Should anything be done?
 }
 
 - (void)neverTranslateSite {
-  // TODO(crbug.com/1014959):
+  DCHECK(!self.translateInfoBarDelegate->IsSiteBlacklisted());
+  self.userAction |= UserActionNeverTranslateSite;
+  self.translateInfoBarDelegate->ToggleSiteBlacklist();
+  // TODO(crbug.com/1014959): Add metrics
+  [self dismissInfobarModal:self
+                   animated:YES
+                 completion:^{
+                   // Completely remove the Infobar along with its badge after
+                   // blacklisting the Website.
+                   [self detachView];
+                 }];
+}
+
+- (void)undoNeverTranslateSite {
+  DCHECK(self.translateInfoBarDelegate->IsSiteBlacklisted());
+  self.translateInfoBarDelegate->ToggleSiteBlacklist();
+  [self dismissInfobarModal:self animated:YES completion:nil];
+  // TODO(crbug.com/1014959): implement else logic. Should aything be done?
 }
 
 #pragma mark - Private
diff --git a/ios/chrome/browser/ui/infobars/modals/infobar_translate_modal_delegate.h b/ios/chrome/browser/ui/infobars/modals/infobar_translate_modal_delegate.h
index 6fb2c62..a85d439 100644
--- a/ios/chrome/browser/ui/infobars/modals/infobar_translate_modal_delegate.h
+++ b/ios/chrome/browser/ui/infobars/modals/infobar_translate_modal_delegate.h
@@ -13,12 +13,22 @@
 @protocol InfobarTranslateModalDelegate <InfobarModalDelegate>
 
 // Indicates the user chose to always translate sites in the source language.
+// Triggers a translate as well.
 - (void)alwaysTranslateSourceLanguage;
+// Indicates the user chose to undo always translate sites in the source
+// language.
+- (void)undoAlwaysTranslateSourceLanguage;
 
 // Indicates the user chose to never translate sites in the source language.
 - (void)neverTranslateSourceLanguage;
+// Indicates the user chose to undo never translate sites in the source
+// language.
+- (void)undoNeverTranslateSourceLanguage;
 
-// TODO(crbug.com/1014959): Consider implementing neverTranslateSite.
+// Indicates the user chose to never translate for this site.
+- (void)neverTranslateSite;
+// Indicates the user chose to undo never translate for this site.
+- (void)undoNeverTranslateSite;
 
 @end
 
diff --git a/ios/chrome/browser/ui/omnibox/popup/omnibox_popup_egtest.mm b/ios/chrome/browser/ui/omnibox/popup/omnibox_popup_egtest.mm
index 7059278..d6ae811 100644
--- a/ios/chrome/browser/ui/omnibox/popup/omnibox_popup_egtest.mm
+++ b/ios/chrome/browser/ui/omnibox/popup/omnibox_popup_egtest.mm
@@ -29,7 +29,7 @@
       grey_kindOfClassName(@"OmniboxPopupRow"),
       grey_descendant(chrome_test_util::StaticTextWithAccessibilityLabel(
           base::SysUTF8ToNSString(url.GetContent()))),
-      nil);
+      grey_sufficientlyVisible(), nil);
 }
 
 // Returns the switch to open tab element for the |url|.
@@ -192,7 +192,10 @@
   [ChromeEarlGrey loadURL:URL3];
   [ChromeEarlGrey waitForWebStateContainingText:kPage3];
 
-  [ChromeEarlGreyUI focusOmniboxAndType:base::SysUTF8ToNSString(URL3.host())];
+  NSString* omniboxInput =
+      [NSString stringWithFormat:@"%@:%@", base::SysUTF8ToNSString(URL3.host()),
+                                 base::SysUTF8ToNSString(URL3.port())];
+  [ChromeEarlGreyUI focusOmniboxAndType:omniboxInput];
 
   // Check that we have the switch button for the first page.
   [[EarlGrey
@@ -230,9 +233,7 @@
       assertWithMatcher:grey_nil()];
 }
 
-// TODO(crbug.com/1025199): On smaller form factors, the desired "Switch
-// to tab" row does not fit above the fold, so this test fails.
-- (void)DISABLED_testCloseNTPWhenSwitching {
+- (void)testCloseNTPWhenSwitching {
   // Open the first page.
   GURL URL1 = self.testServer->GetURL(kPage1URL);
   [ChromeEarlGrey loadURL:URL1];
@@ -240,8 +241,11 @@
 
   // Open a new tab and switch to the first tab.
   [ChromeEarlGrey openNewTab];
+  NSString* omniboxInput =
+      [NSString stringWithFormat:@"%@:%@", base::SysUTF8ToNSString(URL1.host()),
+                                 base::SysUTF8ToNSString(URL1.port())];
   [[EarlGrey selectElementWithMatcher:chrome_test_util::FakeOmnibox()]
-      performAction:grey_typeText(base::SysUTF8ToNSString(URL1.host()))];
+      performAction:grey_typeText(omniboxInput)];
   [[EarlGrey selectElementWithMatcher:SwitchTabElementForUrl(URL1)]
       performAction:grey_tap()];
   [ChromeEarlGrey waitForWebStateContainingText:kPage1];
@@ -318,9 +322,7 @@
 
 // Tests that having multiple suggestions with corresponding opened tabs display
 // multiple buttons.
-// TODO(crbug.com/1025199): On smaller form factors, only one of the two "Switch
-// to tab" rows fits on screen, so this test fails.
-- (void)DISABLED_testMultiplePageOpened {
+- (void)testMultiplePageOpened {
   // Open the first page.
   GURL URL1 = self.testServer->GetURL(kPage1URL);
   [ChromeEarlGrey loadURL:URL1];
@@ -334,8 +336,11 @@
 
   // Start typing url of the two opened pages in a new tab.
   [ChromeEarlGrey openNewTab];
+  NSString* omniboxInput =
+      [NSString stringWithFormat:@"%@:%@", base::SysUTF8ToNSString(URL1.host()),
+                                 base::SysUTF8ToNSString(URL1.port())];
   [[EarlGrey selectElementWithMatcher:chrome_test_util::FakeOmnibox()]
-      performAction:grey_typeText(@"page")];
+      performAction:grey_typeText(omniboxInput)];
 
   // Check that both elements are displayed.
   [[EarlGrey selectElementWithMatcher:SwitchTabElementForUrl(URL1)]
diff --git a/ios/chrome/browser/ui/passwords/password_breach_view_controller.mm b/ios/chrome/browser/ui/passwords/password_breach_view_controller.mm
index 20879896..bbce0d6 100644
--- a/ios/chrome/browser/ui/passwords/password_breach_view_controller.mm
+++ b/ios/chrome/browser/ui/passwords/password_breach_view_controller.mm
@@ -244,6 +244,11 @@
   [self.actionHandler passwordBreachDone];
 }
 
+// Handle taps on the help button.
+- (void)didTapHelpButton {
+  // TODO(crbug.com/1028095): Open help center article.
+}
+
 // Handle taps on the primary action button.
 - (void)didTapPrimaryActionButton {
   [self.actionHandler passwordBreachPrimaryAction];
@@ -257,6 +262,11 @@
           forToolbarPosition:UIBarPositionAny];
   [topToolbar setBarTintColor:[UIColor colorNamed:kBackgroundColor]];
   topToolbar.delegate = self;
+  UIBarButtonItem* helpButton = [[UIBarButtonItem alloc]
+      initWithImage:[UIImage imageNamed:@"password_breach_ic_help"]
+              style:UIBarButtonItemStylePlain
+             target:self
+             action:@selector(didTapHelpButton)];
   UIBarButtonItem* doneButton = [[UIBarButtonItem alloc]
       initWithBarButtonSystemItem:UIBarButtonSystemItemDone
                            target:self
@@ -265,7 +275,7 @@
       initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace
                            target:nil
                            action:nil];
-  topToolbar.items = @[ spacer, doneButton ];
+  topToolbar.items = @[ helpButton, spacer, doneButton ];
   topToolbar.translatesAutoresizingMaskIntoConstraints = NO;
   return topToolbar;
 }
diff --git a/ios/chrome/browser/ui/passwords/resources/BUILD.gn b/ios/chrome/browser/ui/passwords/resources/BUILD.gn
index 1cf482d9c..d56f015 100644
--- a/ios/chrome/browser/ui/passwords/resources/BUILD.gn
+++ b/ios/chrome/browser/ui/passwords/resources/BUILD.gn
@@ -7,10 +7,19 @@
 
 group("resources") {
   deps = [
+    ":password_breach_ic_help",
     ":password_breach_illustration",
   ]
 }
 
+imageset("password_breach_ic_help") {
+  sources = [
+    "password_breach_ic_help.imageset/Contents.json",
+    "password_breach_ic_help.imageset/password_breach_ic_help@2x.png",
+    "password_breach_ic_help.imageset/password_breach_ic_help@3x.png",
+  ]
+}
+
 imageset("password_breach_illustration") {
   sources = [
     "password_breach_illustration.imageset/Contents.json",
diff --git a/ios/chrome/browser/ui/passwords/resources/password_breach_ic_help.imageset/Contents.json b/ios/chrome/browser/ui/passwords/resources/password_breach_ic_help.imageset/Contents.json
new file mode 100644
index 0000000..3bf8432
--- /dev/null
+++ b/ios/chrome/browser/ui/passwords/resources/password_breach_ic_help.imageset/Contents.json
@@ -0,0 +1,18 @@
+{
+    "images": [
+        {
+            "idiom": "universal",
+            "scale": "2x",
+            "filename": "password_breach_ic_help@2x.png"
+        },
+        {
+            "idiom": "universal",
+            "scale": "3x",
+            "filename": "password_breach_ic_help@3x.png"
+        }
+    ],
+    "info": {
+        "version": 1,
+        "author": "xcode"
+    }
+}
diff --git a/ios/chrome/browser/ui/passwords/resources/password_breach_ic_help.imageset/password_breach_ic_help@2x.png b/ios/chrome/browser/ui/passwords/resources/password_breach_ic_help.imageset/password_breach_ic_help@2x.png
new file mode 100644
index 0000000..159e7bc
--- /dev/null
+++ b/ios/chrome/browser/ui/passwords/resources/password_breach_ic_help.imageset/password_breach_ic_help@2x.png
Binary files differ
diff --git a/ios/chrome/browser/ui/passwords/resources/password_breach_ic_help.imageset/password_breach_ic_help@3x.png b/ios/chrome/browser/ui/passwords/resources/password_breach_ic_help.imageset/password_breach_ic_help@3x.png
new file mode 100644
index 0000000..14640d3
--- /dev/null
+++ b/ios/chrome/browser/ui/passwords/resources/password_breach_ic_help.imageset/password_breach_ic_help@3x.png
Binary files differ
diff --git a/ios/chrome/browser/ui/toolbar/adaptive_toolbar_view_controller.mm b/ios/chrome/browser/ui/toolbar/adaptive_toolbar_view_controller.mm
index 3789c55d..1a7cdd8 100644
--- a/ios/chrome/browser/ui/toolbar/adaptive_toolbar_view_controller.mm
+++ b/ios/chrome/browser/ui/toolbar/adaptive_toolbar_view_controller.mm
@@ -387,7 +387,13 @@
   } else if (sender == self.view.shareButton) {
     base::RecordAction(base::UserMetricsAction("MobileToolbarShareMenu"));
   } else if (sender == self.view.searchButton) {
-    base::RecordAction(base::UserMetricsAction("MobileToolbarOmniboxShortcut"));
+    if (base::FeatureList::IsEnabled(kToolbarNewTabButton)) {
+      base::RecordAction(
+          base::UserMetricsAction("MobileToolbarNewTabShortcut"));
+    } else {
+      base::RecordAction(
+          base::UserMetricsAction("MobileToolbarOmniboxShortcut"));
+    }
   } else {
     NOTREACHED();
   }
diff --git a/media/capture/video/fake_video_capture_device_unittest.cc b/media/capture/video/fake_video_capture_device_unittest.cc
index 60622e8..05370c0 100644
--- a/media/capture/video/fake_video_capture_device_unittest.cc
+++ b/media/capture/video/fake_video_capture_device_unittest.cc
@@ -178,7 +178,7 @@
 }
 
 INSTANTIATE_TEST_SUITE_P(
-    ,
+    All,
     FakeVideoCaptureDeviceTest,
     Combine(
         Values(PIXEL_FORMAT_I420, PIXEL_FORMAT_Y16, PIXEL_FORMAT_MJPEG),
@@ -479,7 +479,7 @@
 }
 
 INSTANTIATE_TEST_SUITE_P(
-    ,
+    All,
     FakeVideoCaptureDeviceFactoryTest,
     Values(CommandLineTestData{"fps=-1",
                                5,
diff --git a/media/muxers/webm_muxer_unittest.cc b/media/muxers/webm_muxer_unittest.cc
index 7bf37ee..0a6b807 100644
--- a/media/muxers/webm_muxer_unittest.cc
+++ b/media/muxers/webm_muxer_unittest.cc
@@ -314,6 +314,6 @@
     {kCodecVP8, kCodecPCM, 1, 1},
 };
 
-INSTANTIATE_TEST_SUITE_P(, WebmMuxerTest, ValuesIn(kTestCases));
+INSTANTIATE_TEST_SUITE_P(All, WebmMuxerTest, ValuesIn(kTestCases));
 
 }  // namespace media
diff --git a/mojo/public/cpp/bindings/lib/message_quota_checker.cc b/mojo/public/cpp/bindings/lib/message_quota_checker.cc
index 3a5ee958..a85cfd8 100644
--- a/mojo/public/cpp/bindings/lib/message_quota_checker.cc
+++ b/mojo/public/cpp/bindings/lib/message_quota_checker.cc
@@ -47,11 +47,6 @@
   // against concurrent quota overruns on multiple threads, but that's fine.
   have_crashed = true;
 
-  // This is happening because the user of the interface implicated on the crash
-  // stack has queued up an unreasonable number of messages, namely
-  // |quota_used|.
-  base::debug::DumpWithoutCrashing();
-
   size_t local_quota_used = total_quota_used;
   bool had_message_pipe = false;
   if (message_pipe_quota_used.has_value()) {
@@ -62,6 +57,11 @@
   base::debug::Alias(&total_quota_used);
   base::debug::Alias(&local_quota_used);
   base::debug::Alias(&had_message_pipe);
+
+  // This is happening because the user of the interface implicated on the crash
+  // stack has queued up an unreasonable number of messages, namely
+  // |quota_used|.
+  base::debug::DumpWithoutCrashing();
 }
 
 }  // namespace
diff --git a/net/base/upload_file_element_reader_unittest.cc b/net/base/upload_file_element_reader_unittest.cc
index 1b5584c..6b81307 100644
--- a/net/base/upload_file_element_reader_unittest.cc
+++ b/net/base/upload_file_element_reader_unittest.cc
@@ -327,7 +327,7 @@
   EXPECT_THAT(init_callback.WaitForResult(), IsError(ERR_FILE_NOT_FOUND));
 }
 
-INSTANTIATE_TEST_SUITE_P(,
+INSTANTIATE_TEST_SUITE_P(All,
                          UploadFileElementReaderTest,
                          testing::ValuesIn({false, true}));
 
diff --git a/net/base/url_util_unittest.cc b/net/base/url_util_unittest.cc
index 5785c705..ae61d39 100644
--- a/net/base/url_util_unittest.cc
+++ b/net/base/url_util_unittest.cc
@@ -383,7 +383,7 @@
   EXPECT_EQ(test_data.is_unique, IsUnique(test_data.hostname));
 }
 
-INSTANTIATE_TEST_SUITE_P(,
+INSTANTIATE_TEST_SUITE_P(All,
                          UrlUtilNonUniqueNameTest,
                          testing::ValuesIn(kNonUniqueNameTestData));
 
diff --git a/services/network/public/cpp/simple_url_loader.cc b/services/network/public/cpp/simple_url_loader.cc
index 58240e1..0048760 100644
--- a/services/network/public/cpp/simple_url_loader.cc
+++ b/services/network/public/cpp/simple_url_loader.cc
@@ -333,7 +333,7 @@
   // closed.
   void MaybeComplete();
 
-  std::vector<OnRedirectCallback> on_redirect_callback_;
+  OnRedirectCallback on_redirect_callback_;
   OnResponseStartedCallback on_response_started_callback_;
   UploadProgressCallback on_upload_progress_callback_;
   DownloadProgressCallback on_download_progress_callback_;
@@ -1242,8 +1242,7 @@
   // Check if a request has not yet been started.
   DCHECK(!body_handler_);
 
-  on_redirect_callback_.push_back(on_redirect_callback);
-  DCHECK(on_redirect_callback);
+  on_redirect_callback_ = on_redirect_callback;
 }
 
 void SimpleURLLoaderImpl::SetOnResponseStartedCallback(
@@ -1607,15 +1606,13 @@
   }
 
   std::vector<std::string> removed_headers;
-  for (auto callback : on_redirect_callback_) {
-    if (callback) {
-      base::WeakPtr<SimpleURLLoaderImpl> weak_this =
-          weak_ptr_factory_.GetWeakPtr();
-      callback.Run(redirect_info, *response_head, &removed_headers);
-      // If deleted by the callback, bail now.
-      if (!weak_this)
-        return;
-    }
+  if (on_redirect_callback_) {
+    base::WeakPtr<SimpleURLLoaderImpl> weak_this =
+        weak_ptr_factory_.GetWeakPtr();
+    on_redirect_callback_.Run(redirect_info, *response_head, &removed_headers);
+    // If deleted by the callback, bail now.
+    if (!weak_this)
+      return;
   }
 
   final_url_ = redirect_info.new_url;
diff --git a/services/network/public/mojom/BUILD.gn b/services/network/public/mojom/BUILD.gn
index e0aa6fd3..65d6497 100644
--- a/services/network/public/mojom/BUILD.gn
+++ b/services/network/public/mojom/BUILD.gn
@@ -104,6 +104,7 @@
     "cookie_manager.mojom",
     "cors.mojom",
     "cors_origin_pattern.mojom",
+    "cross_origin_embedder_policy.mojom",
     "default_credentials.mojom",
     "dhcp_wpad_url_client.mojom",
     "digitally_signed.mojom",
diff --git a/services/network/public/mojom/cross_origin_embedder_policy.mojom b/services/network/public/mojom/cross_origin_embedder_policy.mojom
new file mode 100644
index 0000000..dc74d0b
--- /dev/null
+++ b/services/network/public/mojom/cross_origin_embedder_policy.mojom
@@ -0,0 +1,11 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+module network.mojom;
+
+// https://mikewest.github.io/corpp/#integration-html
+enum CrossOriginEmbedderPolicy {
+  kNone,
+  kRequireCorp,
+};
diff --git a/services/network/public/mojom/network_context.mojom b/services/network/public/mojom/network_context.mojom
index 62d4508..f98607c 100644
--- a/services/network/public/mojom/network_context.mojom
+++ b/services/network/public/mojom/network_context.mojom
@@ -14,6 +14,7 @@
 import "services/network/public/mojom/cookie_manager.mojom";
 import "services/network/public/mojom/default_credentials.mojom";
 import "services/network/public/mojom/cors_origin_pattern.mojom";
+import "services/network/public/mojom/cross_origin_embedder_policy.mojom";
 import "services/network/public/mojom/host_resolver.mojom";
 import "services/network/public/mojom/http_request_headers.mojom";
 import "services/network/public/mojom/ip_address.mojom";
@@ -520,12 +521,6 @@
 const uint32 kBrowserProcessId = 0;
 const uint32 kInvalidProcessId = 0xffffffff;
 
-// https://mikewest.github.io/corpp/#integration-html
-enum CrossOriginEmbedderPolicy {
-  kNone,
-  kRequireCorp,
-};
-
 struct URLLoaderFactoryParams {
   // Process requesting the URLLoaderFactory.
   // Set to kBrowserProcessId to indicate the browser process.
diff --git a/skia/config/SkUserConfig.h b/skia/config/SkUserConfig.h
index 05b24dd..6f889c1 100644
--- a/skia/config/SkUserConfig.h
+++ b/skia/config/SkUserConfig.h
@@ -215,8 +215,8 @@
 #define SK_IGNORE_LINEONLY_AA_CONVEX_PATH_OPTS
 #endif
 
-#ifndef SK_SUPPORT_LEGACY_PATH_DIRECTION_ENUM
-#define SK_SUPPORT_LEGACY_PATH_DIRECTION_ENUM
+#ifndef SK_SUPPORT_LEGACY_PATH_FILLTYPE_ENUM
+#define SK_SUPPORT_LEGACY_PATH_FILLTYPE_ENUM
 #endif
 
 // Max. verb count for paths rendered by the edge-AA tessellating path renderer.
diff --git a/skia/ext/benchmarking_canvas.cc b/skia/ext/benchmarking_canvas.cc
index c6b7974..2b7f1e7d 100644
--- a/skia/ext/benchmarking_canvas.cc
+++ b/skia/ext/benchmarking_canvas.cc
@@ -272,9 +272,11 @@
   val->SetString("fill-type", gFillStrings[path.getFillType()]);
 
   static const char* gConvexityStrings[] = { "Unknown", "Convex", "Concave" };
-  DCHECK_LT(static_cast<size_t>(path.getConvexity()),
-      SK_ARRAY_COUNT(gConvexityStrings));
-  val->SetString("convexity", gConvexityStrings[path.getConvexity()]);
+  DCHECK_LT(static_cast<size_t>(path.getConvexityType()),
+            SK_ARRAY_COUNT(gConvexityStrings));
+  val->SetString(
+      "convexity",
+      gConvexityStrings[static_cast<size_t>(path.getConvexityType())]);
 
   val->SetBoolean("is-rect", path.isRect(nullptr));
   val->Set("bounds", AsValue(path.getBounds()));
diff --git a/testing/buildbot/chromium.fyi.json b/testing/buildbot/chromium.fyi.json
index 950c06c..1033774 100644
--- a/testing/buildbot/chromium.fyi.json
+++ b/testing/buildbot/chromium.fyi.json
@@ -2071,96 +2071,6 @@
       },
       {
         "args": [
-          "--gs-results-bucket=chromium-result-details",
-          "--recover-devices"
-        ],
-        "merge": {
-          "args": [
-            "--bucket",
-            "chromium-result-details",
-            "--test-name",
-            "weblayer_browsertests"
-          ],
-          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
-        },
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "cipd_packages": [
-            {
-              "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
-              "location": "bin",
-              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
-            }
-          ],
-          "dimension_sets": [
-            {
-              "device_os": "MMB29Q",
-              "device_os_type": "userdebug",
-              "device_type": "bullhead",
-              "os": "Android"
-            }
-          ],
-          "hard_timeout": 3600,
-          "output_links": [
-            {
-              "link": [
-                "https://luci-logdog.appspot.com/v/?s",
-                "=android%2Fswarming%2Flogcats%2F",
-                "${TASK_ID}%2F%2B%2Funified_logcats"
-              ],
-              "name": "shard #${SHARD_INDEX} logcats"
-            }
-          ]
-        },
-        "test": "weblayer_browsertests"
-      },
-      {
-        "args": [
-          "--gs-results-bucket=chromium-result-details",
-          "--recover-devices"
-        ],
-        "merge": {
-          "args": [
-            "--bucket",
-            "chromium-result-details",
-            "--test-name",
-            "weblayer_instrumentation_test_apk"
-          ],
-          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
-        },
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "cipd_packages": [
-            {
-              "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
-              "location": "bin",
-              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
-            }
-          ],
-          "dimension_sets": [
-            {
-              "device_os": "MMB29Q",
-              "device_os_type": "userdebug",
-              "device_type": "bullhead",
-              "os": "Android"
-            }
-          ],
-          "hard_timeout": 3600,
-          "output_links": [
-            {
-              "link": [
-                "https://luci-logdog.appspot.com/v/?s",
-                "=android%2Fswarming%2Flogcats%2F",
-                "${TASK_ID}%2F%2B%2Funified_logcats"
-              ],
-              "name": "shard #${SHARD_INDEX} logcats"
-            }
-          ]
-        },
-        "test": "weblayer_instrumentation_test_apk"
-      },
-      {
-        "args": [
           "--enable-features=NetworkService,NetworkServiceInProcess",
           "--test-launcher-filter-file=../../testing/buildbot/filters/mojo.fyi.network_webview_instrumentation_test_apk.filter",
           "--gs-results-bucket=chromium-result-details",
@@ -2446,21 +2356,6 @@
           "shards": 2
         },
         "test": "content_browsertests"
-      },
-      {
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "dimension_sets": [
-            {
-              "os": "Ubuntu-16.04"
-            }
-          ]
-        },
-        "test": "weblayer_browsertests"
       }
     ]
   },
@@ -2520,16 +2415,6 @@
           "can_use_on_swarming_builders": true
         },
         "test": "services_unittests"
-      },
-      {
-        "merge": {
-          "args": [],
-          "script": "//testing/merge_scripts/standard_gtest_merge.py"
-        },
-        "swarming": {
-          "can_use_on_swarming_builders": true
-        },
-        "test": "weblayer_browsertests"
       }
     ]
   },
@@ -11760,94 +11645,6 @@
       },
       {
         "args": [
-          "--gs-results-bucket=chromium-result-details",
-          "--recover-devices"
-        ],
-        "merge": {
-          "args": [
-            "--bucket",
-            "chromium-result-details",
-            "--test-name",
-            "weblayer_browsertests"
-          ],
-          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
-        },
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "cipd_packages": [
-            {
-              "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
-              "location": "bin",
-              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
-            }
-          ],
-          "dimension_sets": [
-            {
-              "device_os": "MMB29Q",
-              "device_os_type": "userdebug",
-              "device_type": "bullhead",
-              "os": "Android"
-            }
-          ],
-          "output_links": [
-            {
-              "link": [
-                "https://luci-logdog.appspot.com/v/?s",
-                "=android%2Fswarming%2Flogcats%2F",
-                "${TASK_ID}%2F%2B%2Funified_logcats"
-              ],
-              "name": "shard #${SHARD_INDEX} logcats"
-            }
-          ]
-        },
-        "test": "weblayer_browsertests"
-      },
-      {
-        "args": [
-          "--gs-results-bucket=chromium-result-details",
-          "--recover-devices"
-        ],
-        "merge": {
-          "args": [
-            "--bucket",
-            "chromium-result-details",
-            "--test-name",
-            "weblayer_instrumentation_test_apk"
-          ],
-          "script": "//build/android/pylib/results/presentation/test_results_presentation.py"
-        },
-        "swarming": {
-          "can_use_on_swarming_builders": true,
-          "cipd_packages": [
-            {
-              "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
-              "location": "bin",
-              "revision": "git_revision:ff387eadf445b24c935f1cf7d6ddd279f8a6b04c"
-            }
-          ],
-          "dimension_sets": [
-            {
-              "device_os": "MMB29Q",
-              "device_os_type": "userdebug",
-              "device_type": "bullhead",
-              "os": "Android"
-            }
-          ],
-          "output_links": [
-            {
-              "link": [
-                "https://luci-logdog.appspot.com/v/?s",
-                "=android%2Fswarming%2Flogcats%2F",
-                "${TASK_ID}%2F%2B%2Funified_logcats"
-              ],
-              "name": "shard #${SHARD_INDEX} logcats"
-            }
-          ]
-        },
-        "test": "weblayer_instrumentation_test_apk"
-      },
-      {
-        "args": [
           "--enable-features=NetworkService,NetworkServiceInProcess",
           "--test-launcher-filter-file=../../testing/buildbot/filters/mojo.fyi.network_webview_instrumentation_test_apk.filter",
           "--gs-results-bucket=chromium-result-details",
diff --git a/testing/buildbot/test_suites.pyl b/testing/buildbot/test_suites.pyl
index ca171ac3..24eb46fb 100644
--- a/testing/buildbot/test_suites.pyl
+++ b/testing/buildbot/test_suites.pyl
@@ -5927,8 +5927,6 @@
 
     'mojo_android_gtests': [
       'network_service_android_gtests',
-      'weblayer_android_gtests',
-      'weblayer_gtests',
     ],
 
     'mojo_chromiumos_fyi_gtests': [
@@ -5942,14 +5940,12 @@
     'mojo_linux_gtests': [
       'network_service_fyi_gtests',
       'network_service_in_process_gtests',
-      'weblayer_gtests',
     ],
 
     'mojo_windows_gtests': [
       'mojo_windows_specific_gtests',
       'network_service_fyi_gtests',
       'network_service_in_process_gtests',
-      'weblayer_gtests',
     ],
 
     'sandboxed_chromium_memory_linux_gtests': [
diff --git a/third_party/android_deps/BUILD.gn b/third_party/android_deps/BUILD.gn
index 888b743..f3ec4af 100644
--- a/third_party/android_deps/BUILD.gn
+++ b/third_party/android_deps/BUILD.gn
@@ -1104,7 +1104,7 @@
 # This is generated, do not edit. Update BuildConfigGenerator.groovy instead.
 java_prebuilt("com_google_errorprone_error_prone_core_java") {
   jar_path =
-      "libs/com_google_errorprone_error_prone_core/error_prone_core-2.3.1.jar"
+      "libs/com_google_errorprone_error_prone_core/error_prone_core-2.3.3.jar"
   output_name = "com_google_errorprone_error_prone_core"
   enable_bytecode_rewriter = false
   deps = [
@@ -1118,6 +1118,7 @@
     ":com_google_errorprone_error_prone_type_annotations_java",
     ":com_google_errorprone_javac_java",
     ":com_google_guava_guava_java",
+    ":com_google_protobuf_protobuf_java_java",
     ":org_checkerframework_dataflow_java",
     ":org_pcollections_pcollections_java",
   ]
@@ -1876,7 +1877,7 @@
 
 # This is generated, do not edit. Update BuildConfigGenerator.groovy instead.
 java_prebuilt("com_google_errorprone_error_prone_annotation_java") {
-  jar_path = "libs/com_google_errorprone_error_prone_annotation/error_prone_annotation-2.3.1.jar"
+  jar_path = "libs/com_google_errorprone_error_prone_annotation/error_prone_annotation-2.3.3.jar"
   output_name = "com_google_errorprone_error_prone_annotation"
   enable_bytecode_rewriter = false
 
@@ -1890,7 +1891,7 @@
 
 # This is generated, do not edit. Update BuildConfigGenerator.groovy instead.
 java_prebuilt("com_google_errorprone_error_prone_annotations_java") {
-  jar_path = "libs/com_google_errorprone_error_prone_annotations/error_prone_annotations-2.3.1.jar"
+  jar_path = "libs/com_google_errorprone_error_prone_annotations/error_prone_annotations-2.3.3.jar"
   output_name = "com_google_errorprone_error_prone_annotations"
   enable_bytecode_rewriter = false
 
@@ -1901,7 +1902,7 @@
 
 # This is generated, do not edit. Update BuildConfigGenerator.groovy instead.
 java_prebuilt("com_google_errorprone_error_prone_check_api_java") {
-  jar_path = "libs/com_google_errorprone_error_prone_check_api/error_prone_check_api-2.3.1.jar"
+  jar_path = "libs/com_google_errorprone_error_prone_check_api/error_prone_check_api-2.3.3.jar"
   output_name = "com_google_errorprone_error_prone_check_api"
   enable_bytecode_rewriter = false
 
@@ -1921,7 +1922,7 @@
 
 # This is generated, do not edit. Update BuildConfigGenerator.groovy instead.
 java_prebuilt("com_google_errorprone_error_prone_type_annotations_java") {
-  jar_path = "libs/com_google_errorprone_error_prone_type_annotations/error_prone_type_annotations-2.3.1.jar"
+  jar_path = "libs/com_google_errorprone_error_prone_type_annotations/error_prone_type_annotations-2.3.3.jar"
   output_name = "com_google_errorprone_error_prone_type_annotations"
   enable_bytecode_rewriter = false
 
@@ -1992,6 +1993,17 @@
 }
 
 # This is generated, do not edit. Update BuildConfigGenerator.groovy instead.
+java_prebuilt("com_google_protobuf_protobuf_java_java") {
+  jar_path = "libs/com_google_protobuf_protobuf_java/protobuf-java-3.4.0.jar"
+  output_name = "com_google_protobuf_protobuf_java"
+  enable_bytecode_rewriter = false
+
+  # To remove visibility constraint, add this dependency to
+  # //tools/android/roll/android_deps/build.gradle.
+  visibility = [ ":*" ]
+}
+
+# This is generated, do not edit. Update BuildConfigGenerator.groovy instead.
 java_prebuilt("com_googlecode_java_diff_utils_diffutils_java") {
   jar_path = "libs/com_googlecode_java_diff_utils_diffutils/diffutils-1.3.0.jar"
   output_name = "com_googlecode_java_diff_utils_diffutils"
@@ -2030,7 +2042,7 @@
 
 # This is generated, do not edit. Update BuildConfigGenerator.groovy instead.
 java_prebuilt("org_checkerframework_checker_qual_java") {
-  jar_path = "libs/org_checkerframework_checker_qual/checker-qual-2.5.2.jar"
+  jar_path = "libs/org_checkerframework_checker_qual/checker-qual-2.5.3.jar"
   output_name = "org_checkerframework_checker_qual"
   enable_bytecode_rewriter = false
 
@@ -2041,7 +2053,7 @@
 
 # This is generated, do not edit. Update BuildConfigGenerator.groovy instead.
 java_prebuilt("org_checkerframework_dataflow_java") {
-  jar_path = "libs/org_checkerframework_dataflow/dataflow-2.5.0.jar"
+  jar_path = "libs/org_checkerframework_dataflow/dataflow-2.5.3.jar"
   output_name = "org_checkerframework_dataflow"
   enable_bytecode_rewriter = false
 
@@ -2056,7 +2068,7 @@
 
 # This is generated, do not edit. Update BuildConfigGenerator.groovy instead.
 java_prebuilt("org_checkerframework_javacutil_java") {
-  jar_path = "libs/org_checkerframework_javacutil/javacutil-2.5.0.jar"
+  jar_path = "libs/org_checkerframework_javacutil/javacutil-2.5.3.jar"
   output_name = "org_checkerframework_javacutil"
   enable_bytecode_rewriter = false
 
diff --git a/third_party/android_deps/additional_readme_paths.json b/third_party/android_deps/additional_readme_paths.json
index 933aa45..0e763bc6 100644
--- a/third_party/android_deps/additional_readme_paths.json
+++ b/third_party/android_deps/additional_readme_paths.json
@@ -141,6 +141,7 @@
     "libs/com_google_guava_guava",
     "libs/com_google_guava_listenablefuture",
     "libs/com_google_j2objc_j2objc_annotations",
+    "libs/com_google_protobuf_protobuf_java",
     "libs/com_google_protobuf_protobuf_lite",
     "libs/com_googlecode_java_diff_utils_diffutils",
     "libs/com_squareup_javapoet",
diff --git a/third_party/android_deps/libs/com_google_errorprone_error_prone_annotation/README.chromium b/third_party/android_deps/libs/com_google_errorprone_error_prone_annotation/README.chromium
index 2738e90..804d53cd 100644
--- a/third_party/android_deps/libs/com_google_errorprone_error_prone_annotation/README.chromium
+++ b/third_party/android_deps/libs/com_google_errorprone_error_prone_annotation/README.chromium
@@ -1,7 +1,7 @@
 Name: @BugPattern annotation
 Short Name: error_prone_annotation
 URL: 
-Version: 2.3.1
+Version: 2.3.3
 License: Apache 2.0
 License File: NOT_SHIPPED
 Security Critical: no
diff --git a/third_party/android_deps/libs/com_google_errorprone_error_prone_annotation/cipd.yaml b/third_party/android_deps/libs/com_google_errorprone_error_prone_annotation/cipd.yaml
index 544b4aa0..28cf0a5 100644
--- a/third_party/android_deps/libs/com_google_errorprone_error_prone_annotation/cipd.yaml
+++ b/third_party/android_deps/libs/com_google_errorprone_error_prone_annotation/cipd.yaml
@@ -3,8 +3,8 @@
 # found in the LICENSE file.
 
 # To create CIPD package run the following command.
-# cipd create --pkg-def cipd.yaml -tag version:2.3.1-cr0
+# cipd create --pkg-def cipd.yaml -tag version:2.3.3-cr0
 package: chromium/third_party/android_deps/libs/com_google_errorprone_error_prone_annotation
 description: "@BugPattern annotation"
 data:
-- file: error_prone_annotation-2.3.1.jar
+- file: error_prone_annotation-2.3.3.jar
diff --git a/third_party/android_deps/libs/com_google_errorprone_error_prone_annotations/README.chromium b/third_party/android_deps/libs/com_google_errorprone_error_prone_annotations/README.chromium
index 55597f0..42aeefd 100644
--- a/third_party/android_deps/libs/com_google_errorprone_error_prone_annotations/README.chromium
+++ b/third_party/android_deps/libs/com_google_errorprone_error_prone_annotations/README.chromium
@@ -1,7 +1,7 @@
 Name: error-prone annotations
 Short Name: error_prone_annotations
 URL: https://errorprone.info/
-Version: 2.3.1
+Version: 2.3.3
 License: Apache 2.0
 License File: NOT_SHIPPED
 Security Critical: no
diff --git a/third_party/android_deps/libs/com_google_errorprone_error_prone_annotations/cipd.yaml b/third_party/android_deps/libs/com_google_errorprone_error_prone_annotations/cipd.yaml
index ce3dfc4..59603d2 100644
--- a/third_party/android_deps/libs/com_google_errorprone_error_prone_annotations/cipd.yaml
+++ b/third_party/android_deps/libs/com_google_errorprone_error_prone_annotations/cipd.yaml
@@ -3,8 +3,8 @@
 # found in the LICENSE file.
 
 # To create CIPD package run the following command.
-# cipd create --pkg-def cipd.yaml -tag version:2.3.1-cr0
+# cipd create --pkg-def cipd.yaml -tag version:2.3.3-cr0
 package: chromium/third_party/android_deps/libs/com_google_errorprone_error_prone_annotations
 description: "error-prone annotations"
 data:
-- file: error_prone_annotations-2.3.1.jar
+- file: error_prone_annotations-2.3.3.jar
diff --git a/third_party/android_deps/libs/com_google_errorprone_error_prone_check_api/README.chromium b/third_party/android_deps/libs/com_google_errorprone_error_prone_check_api/README.chromium
index 638a6918..262424b 100644
--- a/third_party/android_deps/libs/com_google_errorprone_error_prone_check_api/README.chromium
+++ b/third_party/android_deps/libs/com_google_errorprone_error_prone_check_api/README.chromium
@@ -1,7 +1,7 @@
 Name: error-prone check api
 Short Name: error_prone_check_api
 URL: 
-Version: 2.3.1
+Version: 2.3.3
 License: Apache 2.0
 License File: NOT_SHIPPED
 Security Critical: no
diff --git a/third_party/android_deps/libs/com_google_errorprone_error_prone_check_api/cipd.yaml b/third_party/android_deps/libs/com_google_errorprone_error_prone_check_api/cipd.yaml
index bb8219f..5c3cc4a 100644
--- a/third_party/android_deps/libs/com_google_errorprone_error_prone_check_api/cipd.yaml
+++ b/third_party/android_deps/libs/com_google_errorprone_error_prone_check_api/cipd.yaml
@@ -3,8 +3,8 @@
 # found in the LICENSE file.
 
 # To create CIPD package run the following command.
-# cipd create --pkg-def cipd.yaml -tag version:2.3.1-cr0
+# cipd create --pkg-def cipd.yaml -tag version:2.3.3-cr0
 package: chromium/third_party/android_deps/libs/com_google_errorprone_error_prone_check_api
 description: "error-prone check api"
 data:
-- file: error_prone_check_api-2.3.1.jar
+- file: error_prone_check_api-2.3.3.jar
diff --git a/third_party/android_deps/libs/com_google_errorprone_error_prone_core/README.chromium b/third_party/android_deps/libs/com_google_errorprone_error_prone_core/README.chromium
index 9e07eba..e0cb050 100644
--- a/third_party/android_deps/libs/com_google_errorprone_error_prone_core/README.chromium
+++ b/third_party/android_deps/libs/com_google_errorprone_error_prone_core/README.chromium
@@ -1,7 +1,7 @@
 Name: error-prone library
 Short Name: error_prone_core
 URL: 
-Version: 2.3.1
+Version: 2.3.3
 License: Apache 2.0
 License File: NOT_SHIPPED
 Security Critical: no
diff --git a/third_party/android_deps/libs/com_google_errorprone_error_prone_core/cipd.yaml b/third_party/android_deps/libs/com_google_errorprone_error_prone_core/cipd.yaml
index 1dc8bbc..1181571 100644
--- a/third_party/android_deps/libs/com_google_errorprone_error_prone_core/cipd.yaml
+++ b/third_party/android_deps/libs/com_google_errorprone_error_prone_core/cipd.yaml
@@ -3,8 +3,8 @@
 # found in the LICENSE file.
 
 # To create CIPD package run the following command.
-# cipd create --pkg-def cipd.yaml -tag version:2.3.1-cr0
+# cipd create --pkg-def cipd.yaml -tag version:2.3.3-cr0
 package: chromium/third_party/android_deps/libs/com_google_errorprone_error_prone_core
 description: "error-prone library"
 data:
-- file: error_prone_core-2.3.1.jar
+- file: error_prone_core-2.3.3.jar
diff --git a/third_party/android_deps/libs/com_google_errorprone_error_prone_type_annotations/README.chromium b/third_party/android_deps/libs/com_google_errorprone_error_prone_type_annotations/README.chromium
index 6106bb81..c873dfb 100644
--- a/third_party/android_deps/libs/com_google_errorprone_error_prone_type_annotations/README.chromium
+++ b/third_party/android_deps/libs/com_google_errorprone_error_prone_type_annotations/README.chromium
@@ -1,7 +1,7 @@
 Name: error-prone type annotations
 Short Name: error_prone_type_annotations
 URL: 
-Version: 2.3.1
+Version: 2.3.3
 License: Apache 2.0
 License File: NOT_SHIPPED
 Security Critical: no
diff --git a/third_party/android_deps/libs/com_google_errorprone_error_prone_type_annotations/cipd.yaml b/third_party/android_deps/libs/com_google_errorprone_error_prone_type_annotations/cipd.yaml
index 628a51e..8058077 100644
--- a/third_party/android_deps/libs/com_google_errorprone_error_prone_type_annotations/cipd.yaml
+++ b/third_party/android_deps/libs/com_google_errorprone_error_prone_type_annotations/cipd.yaml
@@ -3,8 +3,8 @@
 # found in the LICENSE file.
 
 # To create CIPD package run the following command.
-# cipd create --pkg-def cipd.yaml -tag version:2.3.1-cr0
+# cipd create --pkg-def cipd.yaml -tag version:2.3.3-cr0
 package: chromium/third_party/android_deps/libs/com_google_errorprone_error_prone_type_annotations
 description: "error-prone type annotations"
 data:
-- file: error_prone_type_annotations-2.3.1.jar
+- file: error_prone_type_annotations-2.3.3.jar
diff --git a/third_party/android_deps/libs/com_google_protobuf_protobuf_java/LICENSE b/third_party/android_deps/libs/com_google_protobuf_protobuf_java/LICENSE
new file mode 100644
index 0000000..19b305b0
--- /dev/null
+++ b/third_party/android_deps/libs/com_google_protobuf_protobuf_java/LICENSE
@@ -0,0 +1,32 @@
+Copyright 2008 Google Inc.  All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+    * Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above
+copyright notice, this list of conditions and the following disclaimer
+in the documentation and/or other materials provided with the
+distribution.
+    * Neither the name of Google Inc. nor the names of its
+contributors may be used to endorse or promote products derived from
+this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Code generated by the Protocol Buffer compiler is owned by the owner
+of the input file used when generating it.  This code is not
+standalone and requires a support library to be linked with it.  This
+support library is itself covered by the above license.
diff --git a/third_party/android_deps/libs/com_google_protobuf_protobuf_java/OWNERS b/third_party/android_deps/libs/com_google_protobuf_protobuf_java/OWNERS
new file mode 100644
index 0000000..7b571d97
--- /dev/null
+++ b/third_party/android_deps/libs/com_google_protobuf_protobuf_java/OWNERS
@@ -0,0 +1 @@
+file://third_party/android_deps/OWNERS
\ No newline at end of file
diff --git a/third_party/android_deps/libs/com_google_protobuf_protobuf_java/README.chromium b/third_party/android_deps/libs/com_google_protobuf_protobuf_java/README.chromium
new file mode 100644
index 0000000..6967582e
--- /dev/null
+++ b/third_party/android_deps/libs/com_google_protobuf_protobuf_java/README.chromium
@@ -0,0 +1,13 @@
+Name: Protocol Buffers [Core]
+Short Name: protobuf-java
+URL: https://github.com/protocolbuffers/protobuf/blob/master/java/lite.md
+Version: 3.4.0
+License: BSD
+License File: NOT_SHIPPED
+Security Critical: no
+
+Description:
+Core Protocol Buffers library. Protocol Buffers are a way of encoding structured data in an efficient yet extensible format.
+
+Local Modifications:
+No modifications.
diff --git a/third_party/android_deps/libs/com_google_protobuf_protobuf_java/cipd.yaml b/third_party/android_deps/libs/com_google_protobuf_protobuf_java/cipd.yaml
new file mode 100644
index 0000000..30011ee
--- /dev/null
+++ b/third_party/android_deps/libs/com_google_protobuf_protobuf_java/cipd.yaml
@@ -0,0 +1,10 @@
+# Copyright 2018 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+# To create CIPD package run the following command.
+# cipd create --pkg-def cipd.yaml -tag version:3.4.0-cr0
+package: chromium/third_party/android_deps/libs/com_google_protobuf_protobuf_java
+description: "Protocol Buffers [Core]"
+data:
+- file: protobuf-java-3.4.0.jar
diff --git a/third_party/android_deps/libs/org_checkerframework_checker_qual/README.chromium b/third_party/android_deps/libs/org_checkerframework_checker_qual/README.chromium
index 279b234..de2a0e00 100644
--- a/third_party/android_deps/libs/org_checkerframework_checker_qual/README.chromium
+++ b/third_party/android_deps/libs/org_checkerframework_checker_qual/README.chromium
@@ -1,7 +1,7 @@
 Name: Checker Qual
 Short Name: checker-qual
 URL: https://checkerframework.org
-Version: 2.5.2
+Version: 2.5.3
 License: GPL v2 with the classpath exception
 License File: NOT_SHIPPED
 Security Critical: no
diff --git a/third_party/android_deps/libs/org_checkerframework_checker_qual/cipd.yaml b/third_party/android_deps/libs/org_checkerframework_checker_qual/cipd.yaml
index 6f4fc34..7085ff80 100644
--- a/third_party/android_deps/libs/org_checkerframework_checker_qual/cipd.yaml
+++ b/third_party/android_deps/libs/org_checkerframework_checker_qual/cipd.yaml
@@ -3,8 +3,8 @@
 # found in the LICENSE file.
 
 # To create CIPD package run the following command.
-# cipd create --pkg-def cipd.yaml -tag version:2.5.2-cr0
+# cipd create --pkg-def cipd.yaml -tag version:2.5.3-cr0
 package: chromium/third_party/android_deps/libs/org_checkerframework_checker_qual
 description: "Checker Qual"
 data:
-- file: checker-qual-2.5.2.jar
+- file: checker-qual-2.5.3.jar
diff --git a/third_party/android_deps/libs/org_checkerframework_dataflow/README.chromium b/third_party/android_deps/libs/org_checkerframework_dataflow/README.chromium
index be0d329..c3fe775 100644
--- a/third_party/android_deps/libs/org_checkerframework_dataflow/README.chromium
+++ b/third_party/android_deps/libs/org_checkerframework_dataflow/README.chromium
@@ -1,7 +1,7 @@
 Name: Dataflow
 Short Name: dataflow
 URL: https://checkerframework.org
-Version: 2.5.0
+Version: 2.5.3
 License: GPL v2 with the classpath exception
 License File: NOT_SHIPPED
 Security Critical: no
diff --git a/third_party/android_deps/libs/org_checkerframework_dataflow/cipd.yaml b/third_party/android_deps/libs/org_checkerframework_dataflow/cipd.yaml
index b9caffa..1c14e088 100644
--- a/third_party/android_deps/libs/org_checkerframework_dataflow/cipd.yaml
+++ b/third_party/android_deps/libs/org_checkerframework_dataflow/cipd.yaml
@@ -3,8 +3,8 @@
 # found in the LICENSE file.
 
 # To create CIPD package run the following command.
-# cipd create --pkg-def cipd.yaml -tag version:2.5.0-cr0
+# cipd create --pkg-def cipd.yaml -tag version:2.5.3-cr0
 package: chromium/third_party/android_deps/libs/org_checkerframework_dataflow
 description: "Dataflow"
 data:
-- file: dataflow-2.5.0.jar
+- file: dataflow-2.5.3.jar
diff --git a/third_party/android_deps/libs/org_checkerframework_javacutil/README.chromium b/third_party/android_deps/libs/org_checkerframework_javacutil/README.chromium
index 50021679..e29b0207 100644
--- a/third_party/android_deps/libs/org_checkerframework_javacutil/README.chromium
+++ b/third_party/android_deps/libs/org_checkerframework_javacutil/README.chromium
@@ -1,7 +1,7 @@
 Name: Javacutil
 Short Name: javacutil
 URL: https://checkerframework.org
-Version: 2.5.0
+Version: 2.5.3
 License: GPL v2 with the classpath exception
 License File: NOT_SHIPPED
 Security Critical: no
diff --git a/third_party/android_deps/libs/org_checkerframework_javacutil/cipd.yaml b/third_party/android_deps/libs/org_checkerframework_javacutil/cipd.yaml
index abd82888..d9abc3a 100644
--- a/third_party/android_deps/libs/org_checkerframework_javacutil/cipd.yaml
+++ b/third_party/android_deps/libs/org_checkerframework_javacutil/cipd.yaml
@@ -3,8 +3,8 @@
 # found in the LICENSE file.
 
 # To create CIPD package run the following command.
-# cipd create --pkg-def cipd.yaml -tag version:2.5.0-cr0
+# cipd create --pkg-def cipd.yaml -tag version:2.5.3-cr0
 package: chromium/third_party/android_deps/libs/org_checkerframework_javacutil
 description: "Javacutil"
 data:
-- file: javacutil-2.5.0.jar
+- file: javacutil-2.5.3.jar
diff --git a/third_party/blink/public/BUILD.gn b/third_party/blink/public/BUILD.gn
index ee87e73..e6555ed 100644
--- a/third_party/blink/public/BUILD.gn
+++ b/third_party/blink/public/BUILD.gn
@@ -264,7 +264,6 @@
     "platform/web_rect.h",
     "platform/web_resource_timing_info.h",
     "platform/web_rtc_api_name.h",
-    "platform/web_rtc_data_channel_init.h",
     "platform/web_rtc_legacy_stats.h",
     "platform/web_rtc_peer_connection_handler.h",
     "platform/web_rtc_peer_connection_handler_client.h",
diff --git a/third_party/blink/public/mojom/service_worker/controller_service_worker.mojom b/third_party/blink/public/mojom/service_worker/controller_service_worker.mojom
index dca248b8..a0d4246 100644
--- a/third_party/blink/public/mojom/service_worker/controller_service_worker.mojom
+++ b/third_party/blink/public/mojom/service_worker/controller_service_worker.mojom
@@ -6,7 +6,7 @@
 
 import "mojo/public/mojom/base/time.mojom";
 import "mojo/public/mojom/base/unguessable_token.mojom";
-import "services/network/public/mojom/network_context.mojom";
+import "services/network/public/mojom/cross_origin_embedder_policy.mojom";
 import "services/network/public/mojom/url_loader.mojom";
 import "third_party/blink/public/mojom/service_worker/controller_service_worker_mode.mojom";
 import "third_party/blink/public/mojom/service_worker/dispatch_fetch_event_params.mojom";
diff --git a/third_party/blink/public/platform/web_rtc_peer_connection_handler.h b/third_party/blink/public/platform/web_rtc_peer_connection_handler.h
index cd1b7c5d..b8bb076 100644
--- a/third_party/blink/public/platform/web_rtc_peer_connection_handler.h
+++ b/third_party/blink/public/platform/web_rtc_peer_connection_handler.h
@@ -61,7 +61,7 @@
 class WebMediaStreamTrack;
 class WebRTCStatsRequest;
 class WebString;
-struct WebRTCDataChannelInit;
+struct RTCDataChannelInitPlatform;
 
 class WebRTCPeerConnectionHandler {
  public:
@@ -125,7 +125,7 @@
                         const WebVector<webrtc::NonStandardGroupId>&) = 0;
   virtual scoped_refptr<webrtc::DataChannelInterface> CreateDataChannel(
       const WebString& label,
-      const WebRTCDataChannelInit&) = 0;
+      const RTCDataChannelInitPlatform&) = 0;
   virtual webrtc::RTCErrorOr<std::unique_ptr<WebRTCRtpTransceiver>>
   AddTransceiverWithTrack(const WebMediaStreamTrack&,
                           const webrtc::RtpTransceiverInit&) = 0;
diff --git a/third_party/blink/renderer/bindings/scripts/v8_attributes.py b/third_party/blink/renderer/bindings/scripts/v8_attributes.py
index d3074d3..e58cc614 100644
--- a/third_party/blink/renderer/bindings/scripts/v8_attributes.py
+++ b/third_party/blink/renderer/bindings/scripts/v8_attributes.py
@@ -544,7 +544,8 @@
         'is_setter_raises_exception': is_setter_raises_exception,
         'use_common_reflection_setter': use_common_reflection_setter,
         'v8_value_to_local_cpp_value': idl_type.v8_value_to_local_cpp_value(
-            extended_attributes, 'v8_value', 'cpp_value'),
+            extended_attributes, 'v8_value', 'cpp_value',
+            code_generation_target='attribute_set'),
     })
 
     # setter_expression() depends on context values we set above.
diff --git a/third_party/blink/renderer/bindings/scripts/v8_types.py b/third_party/blink/renderer/bindings/scripts/v8_types.py
index e14b6b5..3738673 100644
--- a/third_party/blink/renderer/bindings/scripts/v8_types.py
+++ b/third_party/blink/renderer/bindings/scripts/v8_types.py
@@ -712,7 +712,8 @@
 
 # FIXME: this function should be refactored, as this takes too many flags.
 def v8_value_to_local_cpp_value(idl_type, extended_attributes, v8_value, variable_name, declare_variable=True,
-                                isolate='info.GetIsolate()', bailout_return_value=None, use_exception_state=False):
+                                isolate='info.GetIsolate()', bailout_return_value=None, use_exception_state=False,
+                                code_generation_target=None):
     """Returns an expression that converts a V8 value to a C++ value and stores it as a local value."""
 
     this_cpp_type = idl_type.cpp_type_args(extended_attributes=extended_attributes, raw_type=True)
@@ -762,6 +763,13 @@
     # Types that don't need error handling, and simply assign a value to the
     # local variable.
 
+    if (idl_type.is_explicit_nullable
+            and code_generation_target == 'attribute_set'):
+        assign_expression = (
+            "is_null "
+            "? {cpp_type}() "
+            ": {expr}".format(cpp_type=this_cpp_type, expr=assign_expression))
+
     return {
         'assign_expression': assign_expression,
         'check_expression': check_expression,
diff --git a/third_party/blink/renderer/bindings/templates/attributes.cc.tmpl b/third_party/blink/renderer/bindings/templates/attributes.cc.tmpl
index 9033623d..d616eaab 100644
--- a/third_party/blink/renderer/bindings/templates/attributes.cc.tmpl
+++ b/third_party/blink/renderer/bindings/templates/attributes.cc.tmpl
@@ -414,6 +414,10 @@
   CEReactionsScope ce_reactions_scope;
   {% endif %}
 
+  {% if attribute.is_explicit_nullable %}
+  bool is_null = IsUndefinedOrNull(v8_value);
+  {% endif %}
+
   // Prepare the value to be set.
   {% if attribute.idl_type != 'EventHandler' %}
   {{v8_value_to_local_cpp_value(attribute) | trim | indent(2)}}
@@ -465,9 +469,6 @@
   {% if attribute.is_replaceable %}
   v8::Local<v8::String> property_name = V8AtomicString(isolate, "{{attribute.name}}");
   {% endif %}
-  {% if attribute.is_explicit_nullable %}
-  bool is_null = IsUndefinedOrNull(v8_value);
-  {% endif %}
   {{attribute.cpp_setter | indent(2)}};
 
   {% if attribute.cached_attribute_validation_method %}
diff --git a/third_party/blink/renderer/bindings/tests/results/core/v8_test_object.cc b/third_party/blink/renderer/bindings/tests/results/core/v8_test_object.cc
index 439f8e9a..23908835e 100644
--- a/third_party/blink/renderer/bindings/tests/results/core/v8_test_object.cc
+++ b/third_party/blink/renderer/bindings/tests/results/core/v8_test_object.cc
@@ -1387,12 +1387,13 @@
 
   ExceptionState exception_state(isolate, ExceptionState::kSetterContext, "TestObject", "booleanOrNullAttribute");
 
+  bool is_null = IsUndefinedOrNull(v8_value);
+
   // Prepare the value to be set.
-  bool cpp_value = NativeValueTraits<IDLBoolean>::NativeValue(info.GetIsolate(), v8_value, exception_state);
+  bool cpp_value = is_null ? bool() : NativeValueTraits<IDLBoolean>::NativeValue(info.GetIsolate(), v8_value, exception_state);
   if (exception_state.HadException())
     return;
 
-  bool is_null = IsUndefinedOrNull(v8_value);
   impl->setBooleanOrNullAttribute(cpp_value, is_null);
 }
 
@@ -1451,12 +1452,13 @@
 
   ExceptionState exception_state(isolate, ExceptionState::kSetterContext, "TestObject", "longOrNullAttribute");
 
+  bool is_null = IsUndefinedOrNull(v8_value);
+
   // Prepare the value to be set.
-  int32_t cpp_value = NativeValueTraits<IDLLong>::NativeValue(info.GetIsolate(), v8_value, exception_state);
+  int32_t cpp_value = is_null ? int32_t() : NativeValueTraits<IDLLong>::NativeValue(info.GetIsolate(), v8_value, exception_state);
   if (exception_state.HadException())
     return;
 
-  bool is_null = IsUndefinedOrNull(v8_value);
   impl->setLongOrNullAttribute(cpp_value, is_null);
 }
 
diff --git a/third_party/blink/renderer/core/animation/animation.cc b/third_party/blink/renderer/core/animation/animation.cc
index e83b708..b744cbe 100644
--- a/third_party/blink/renderer/core/animation/animation.cc
+++ b/third_party/blink/renderer/core/animation/animation.cc
@@ -158,7 +158,6 @@
     : ContextLifecycleObserver(execution_context),
       internal_play_state_(kIdle),
       reported_play_state_(kIdle),
-      animation_play_state_(kIdle),
       playback_rate_(1),
       start_time_(),
       hold_time_(),
@@ -284,8 +283,7 @@
   UpdateFinishedState(UpdateType::kDiscontinuous, NotificationType::kAsync);
 
   SetCompositorPending(/*effect_changed=*/false);
-  animation_play_state_ = CalculateAnimationPlayState();
-  internal_play_state_ = CalculatePlayState();
+  internal_play_state_ = CalculateExtendedPlayState();
 
   // Notify of potential state change.
   NotifyProbe();
@@ -530,8 +528,7 @@
   ClearOutdated();
 
   // TODO(crbug.com/960944): deprecate use of these flags.
-  internal_play_state_ = CalculatePlayState();
-  animation_play_state_ = CalculateAnimationPlayState();
+  internal_play_state_ = CalculateExtendedPlayState();
 
   // Notify of change to play state.
   NotifyProbe();
@@ -758,8 +755,7 @@
   UpdateFinishedState(UpdateType::kDiscontinuous, NotificationType::kAsync);
 
   // TODO(crbug.com/960944): prune use of legacy flags.
-  internal_play_state_ = CalculatePlayState();
-  animation_play_state_ = CalculateAnimationPlayState();
+  internal_play_state_ = CalculateExtendedPlayState();
 
   // Update user agent.
   base::Optional<double> new_current_time = CurrentTimeInternal();
@@ -816,12 +812,14 @@
   }
 }
 
+// TODO(crbug.com/960944): Deprecate.
 Animation::AnimationPlayState Animation::PlayStateInternal() const {
   DCHECK_NE(internal_play_state_, kUnset);
   return internal_play_state_;
 }
 
-Animation::AnimationPlayState Animation::CalculatePlayState() const {
+// TODO(crbug.com/960944): Deprecate.
+Animation::AnimationPlayState Animation::CalculateExtendedPlayState() const {
   if (paused_ && !current_time_pending_)
     return kPaused;
   if (internal_play_state_ == kIdle)
@@ -833,11 +831,6 @@
   return kRunning;
 }
 
-Animation::AnimationPlayState Animation::GetPlayState() const {
-  DCHECK_NE(animation_play_state_, kUnset);
-  return animation_play_state_;
-}
-
 // https://drafts.csswg.org/web-animations/#play-states
 Animation::AnimationPlayState Animation::CalculateAnimationPlayState() const {
   // 1. All of the following conditions are true:
@@ -953,8 +946,7 @@
   UpdateFinishedState(UpdateType::kContinuous, NotificationType::kAsync);
 
   // TODO(crbug.com/958433): Deprecate.
-  internal_play_state_ = CalculatePlayState();
-  animation_play_state_ = CalculateAnimationPlayState();
+  internal_play_state_ = CalculateExtendedPlayState();
 
   NotifyProbe();
 }
@@ -1070,8 +1062,7 @@
   UpdateFinishedState(UpdateType::kContinuous, NotificationType::kAsync);
 
   // TODO(crbug.com/960944): Deprecate.
-  animation_play_state_ = CalculateAnimationPlayState();
-  internal_play_state_ = CalculatePlayState();
+  internal_play_state_ = CalculateExtendedPlayState();
 
   // Notify change to pending play or finished state.
   NotifyProbe();
@@ -1171,8 +1162,7 @@
 
   SetOutdated();
   UpdateFinishedState(UpdateType::kDiscontinuous, NotificationType::kSync);
-  animation_play_state_ = kFinished;
-  internal_play_state_ = kFinished;
+  internal_play_state_ = CalculateExtendedPlayState();
 
   // Notify of change to finished state.
   NotifyProbe();
@@ -1275,14 +1265,14 @@
 
   pending_play_ = false;
   pending_pause_ = false;
-  animation_play_state_ = kFinished;
 
   // TODO(crbug.com/960944) Deprecate following flags.
   current_time_pending_ = false;
   internal_play_state_ = kFinished;
 
-  // If start_time_ is not set, then CalculatePlayState will return pending
-  // rather than finished.  Force synchronous resolution of the start time.
+  // If start_time_ is not set, then CalculateAnimationPlayState will return
+  // pending rather than finished.  Force synchronous resolution of the start
+  // time.
   if (!start_time_ && hold_time_ && timeline_ && timeline_->IsActive())
     start_time_ = CalculateStartTime(hold_time_.value());
 
@@ -1817,8 +1807,6 @@
   internal_play_state_ = kIdle;
   current_time_pending_ = false;
 
-  animation_play_state_ = kIdle;
-
   // Apply changes synchronously.
   SetCompositorPending(/*effect_changed=*/false);
   SetOutdated();
@@ -1917,9 +1905,8 @@
 
 Animation::PlayStateUpdateScope::~PlayStateUpdateScope() {
   AnimationPlayState old_play_state = initial_play_state_;
-  AnimationPlayState new_play_state = animation_->CalculatePlayState();
+  AnimationPlayState new_play_state = animation_->CalculateExtendedPlayState();
   animation_->internal_play_state_ = new_play_state;
-  animation_->animation_play_state_ = animation_->CalculateAnimationPlayState();
 
   // Ordering is important, the ready promise should resolve/reject before
   // the finished promise.
diff --git a/third_party/blink/renderer/core/animation/animation.h b/third_party/blink/renderer/core/animation/animation.h
index 13c40ae..f7ebe39 100644
--- a/third_party/blink/renderer/core/animation/animation.h
+++ b/third_party/blink/renderer/core/animation/animation.h
@@ -128,8 +128,12 @@
                       ExceptionState& = ASSERT_NO_EXCEPTION);
   base::Optional<double> UnlimitedCurrentTimeInternal() const;
 
+  // https://drafts.csswg.org/web-animations/#play-states
   static const char* PlayStateString(AnimationPlayState);
-  String playState() const { return PlayStateString(animation_play_state_); }
+  AnimationPlayState CalculateAnimationPlayState() const;
+  String playState() const {
+    return PlayStateString(CalculateAnimationPlayState());
+  }
 
   bool pending() const;
 
@@ -144,11 +148,12 @@
   ScriptPromise ready(ScriptState*);
 
   bool Paused() const {
-    return GetPlayState() == kPaused && !is_paused_for_testing_;
+    return CalculateAnimationPlayState() == kPaused && !is_paused_for_testing_;
   }
 
   bool Playing() const override {
-    return GetPlayState() == kRunning && !Limited() && !is_paused_for_testing_;
+    return CalculateAnimationPlayState() == kRunning && !Limited() &&
+           !is_paused_for_testing_;
   }
 
   // Indicates if the animation is out of sync with the compositor. A change to
@@ -159,8 +164,6 @@
     return internal_play_state_ == kPending;
   }
 
-  AnimationPlayState GetPlayState() const;
-
   bool Limited() const { return Limited(CurrentTimeInternal()); }
   bool FinishedInternal() const { return finished_; }
 
@@ -279,12 +282,9 @@
   // similar purpose to micro-tasks in the spec. This additional state is for
   // internal flow control only and should not be reported via
   // animation.playState.
-  // TODO(crbug.com/958433): Cleanup implementation to better align with the
-  // spec.
-  AnimationPlayState CalculatePlayState() const;
-  // Spec compliant variant of play state calculation that is reported via
-  // animation.playState.
-  AnimationPlayState CalculateAnimationPlayState() const;
+  // TODO(crbug.com/958433): Deprecate this method in favor of the
+  // spec-compliant GetPlayState().
+  AnimationPlayState CalculateExtendedPlayState() const;
 
   base::Optional<double> CalculateStartTime(double current_time) const;
   base::Optional<double> CalculateCurrentTime() const;
@@ -353,8 +353,6 @@
   // additional pending state that is not part of the spec by expected by dev
   // tools.
   AnimationPlayState reported_play_state_;
-  // Web exposed play state, which does not have pending state.
-  AnimationPlayState animation_play_state_;
   double playback_rate_;
   // The pending playback rate is not currently in effect. It typically takes
   // effect when running a scheduled task in response to the animation being
diff --git a/third_party/blink/renderer/core/animation/compositor_animations.cc b/third_party/blink/renderer/core/animation/compositor_animations.cc
index e928a71..3ac089f8 100644
--- a/third_party/blink/renderer/core/animation/compositor_animations.cc
+++ b/third_party/blink/renderer/core/animation/compositor_animations.cc
@@ -77,7 +77,7 @@
   if (animation.NeedsCompositorTimeSync())
     return true;
 
-  switch (animation.GetPlayState()) {
+  switch (animation.CalculateAnimationPlayState()) {
     case Animation::kIdle:
       return false;
     case Animation::kRunning:
diff --git a/third_party/blink/renderer/core/core_initializer.h b/third_party/blink/renderer/core/core_initializer.h
index 5e67f46..3f6d8de 100644
--- a/third_party/blink/renderer/core/core_initializer.h
+++ b/third_party/blink/renderer/core/core_initializer.h
@@ -31,6 +31,8 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_CORE_INITIALIZER_H_
 #define THIRD_PARTY_BLINK_RENDERER_CORE_CORE_INITIALIZER_H_
 
+#include <memory>
+
 #include "base/macros.h"
 #include "third_party/blink/public/common/dom_storage/session_storage_namespace_id.h"
 #include "third_party/blink/renderer/core/core_export.h"
diff --git a/third_party/blink/renderer/core/html/html_object_element.cc b/third_party/blink/renderer/core/html/html_object_element.cc
index f5fe415..a1c2309 100644
--- a/third_party/blink/renderer/core/html/html_object_element.cc
+++ b/third_party/blink/renderer/core/html/html_object_element.cc
@@ -194,7 +194,7 @@
     if (child_text_node) {
       if (!child_text_node->ContainsOnlyWhitespaceOrEmpty())
         return true;
-    } else if (!IsHTMLParamElement(*child)) {
+    } else if (!IsA<HTMLParamElement>(*child)) {
       return true;
     }
   }
@@ -394,7 +394,7 @@
     return true;
 
   for (HTMLElement& child : Traversal<HTMLElement>::ChildrenOf(*this)) {
-    if (IsHTMLParamElement(child) &&
+    if (IsA<HTMLParamElement>(child) &&
         DeprecatedEqualIgnoringCase(child.GetNameAttribute(), "type") &&
         MIMETypeRegistry::IsJavaAppletMIMEType(
             child.FastGetAttribute(html_names::kValueAttr).GetString()))
diff --git a/third_party/blink/renderer/core/layout/layout_shift_tracker_test.cc b/third_party/blink/renderer/core/layout/layout_shift_tracker_test.cc
index 4fdd2a34..7d60704 100644
--- a/third_party/blink/renderer/core/layout/layout_shift_tracker_test.cc
+++ b/third_party/blink/renderer/core/layout/layout_shift_tracker_test.cc
@@ -60,41 +60,6 @@
                   .InSecondsF() > 0.0);
 }
 
-TEST_F(LayoutShiftTrackerTest, CompositedElementMovement) {
-  SetBodyInnerHTML(R"HTML(
-    <style>
-    #shift {
-      position: relative;
-      width: 500px;
-      height: 200px;
-      background: yellow;
-    }
-    #container {
-      position: absolute;
-      width: 400px;
-      height: 400px;
-      left: 400px;
-      top: 100px;
-      background: #ccc;
-    }
-    .tr { will-change: transform; }
-    </style>
-    <div id='container' class='tr'>
-      <div id='space'></div>
-      <div id='shift' class='tr'></div>
-    </div>
-  )HTML");
-
-  GetDocument().getElementById("space")->setAttribute(
-      html_names::kStyleAttr, AtomicString("height: 100px"));
-  UpdateAllLifecyclePhases();
-
-  // #shift is 400x200 after viewport intersection with correct application of
-  // composited #container offset, and 100px lower after shifting, so shift
-  // score is (400 * 300) * (100 / 800) / (viewport size 800 * 600)
-  EXPECT_FLOAT_EQ(0.25 * (100.0 / 800.0), GetLayoutShiftTracker().Score());
-}
-
 TEST_F(LayoutShiftTrackerTest, CompositedShiftBeforeFirstPaint) {
   // Tests that we don't crash if a new layer shifts during a second compositing
   // update before prepaint sets up property tree state.  See crbug.com/881735
@@ -122,37 +87,6 @@
   UpdateAllLifecyclePhases();
 }
 
-TEST_F(LayoutShiftTrackerTest, IgnoreFixedAndSticky) {
-  SetBodyInnerHTML(R"HTML(
-    <style>
-    body { height: 1000px; }
-    #f1, #f2 {
-      position: fixed;
-      width: 300px;
-      height: 100px;
-      left: 100px;
-    }
-    #f1 { top: 0; }
-    #f2 { top: 150px; will-change: transform; }
-    #s1 {
-      position: sticky;
-      width: 200px;
-      height: 100px;
-      left: 450px;
-      top: 0;
-    }
-    </style>
-    <div id='f1'>fixed</div>
-    <div id='f2'>fixed composited</div>
-    <div id='s1'>sticky</div>
-    normal
-  )HTML");
-
-  GetDocument().scrollingElement()->setScrollTop(50);
-  UpdateAllLifecyclePhases();
-  EXPECT_FLOAT_EQ(0, GetLayoutShiftTracker().Score());
-}
-
 TEST_F(LayoutShiftTrackerTest, IgnoreSVG) {
   SetBodyInnerHTML(R"HTML(
     <svg>
@@ -166,164 +100,6 @@
   EXPECT_FLOAT_EQ(0, GetLayoutShiftTracker().Score());
 }
 
-TEST_F(LayoutShiftTrackerTest, ShiftWhileScrolled) {
-  SetBodyInnerHTML(R"HTML(
-    <style>
-      body { height: 1000px; margin: 0; }
-      #j { position: relative; width: 300px; height: 200px; }
-    </style>
-    <div id='j'></div>
-  )HTML");
-
-  GetDocument().scrollingElement()->setScrollTop(100);
-  EXPECT_EQ(0.0, GetLayoutShiftTracker().Score());
-  EXPECT_EQ(0.0, GetLayoutShiftTracker().OverallMaxDistance());
-
-  GetDocument().getElementById("j")->setAttribute(html_names::kStyleAttr,
-                                                  AtomicString("top: 60px"));
-  UpdateAllLifecyclePhases();
-  // 300 * (height 200 - scrollY 100 + movement 60) * (60 / 800) / (800 * 600)
-  EXPECT_FLOAT_EQ(0.1 * (60.0 / 800.0), GetLayoutShiftTracker().Score());
-}
-
-TEST_F(LayoutShiftTrackerTest, FullyClippedVisualRect) {
-  SetBodyInnerHTML(R"HTML(
-    <style>
-      body { margin: 0; }
-      #clip { width: 0px; height: 600px; overflow: hidden; }
-      #j { position: relative; width: 300px; height: 200px; }
-    </style>
-    <div id='clip'><div id='j'></div></div>
-  )HTML");
-
-  GetDocument().getElementById("j")->setAttribute(html_names::kStyleAttr,
-                                                  AtomicString("top: 200px"));
-  UpdateAllLifecyclePhases();
-  EXPECT_FLOAT_EQ(0.0, GetLayoutShiftTracker().Score());
-}
-
-TEST_F(LayoutShiftTrackerTest, PartiallyClippedVisualRect) {
-  SetBodyInnerHTML(R"HTML(
-    <style>
-      body { margin: 0; }
-      #clip { width: 150px; height: 600px; overflow: hidden; }
-      #j { position: relative; width: 300px; height: 200px; }
-    </style>
-    <div id='clip'><div id='j'></div></div>
-  )HTML");
-
-  GetDocument().getElementById("j")->setAttribute(html_names::kStyleAttr,
-                                                  AtomicString("top: 200px"));
-  UpdateAllLifecyclePhases();
-  // (clipped width 150px) * (height 200 + movement 200) * (200 / 800) /
-  // (800 * 600)
-  EXPECT_FLOAT_EQ(0.125 * (200.0 / 800.0), GetLayoutShiftTracker().Score());
-}
-
-TEST_F(LayoutShiftTrackerTest, MultiClipVisualRect) {
-  SetBodyInnerHTML(R"HTML(
-    <style>
-      body { margin: 0; }
-      #outer { width: 200px; height: 600px; overflow: hidden; }
-      #inner { width: 300px; height: 150px; overflow: hidden; }
-      #j { position: relative; width: 300px; height: 600px; }
-    </style>
-    <div id='outer'><div id='inner'><div id='j'></div></div></div>
-  )HTML");
-
-  GetDocument().getElementById("j")->setAttribute(html_names::kStyleAttr,
-                                                  AtomicString("top: -200px"));
-  UpdateAllLifecyclePhases();
-  // Note that, while the element moves up 200px, its visibility is
-  // clipped at 0px,150px height, so the additional 200px of vertical
-  // move distance is not included in the score.
-  // (clip width 200) * (clip height 150) * (200 / 800) / (800 * 600 viewport)
-  EXPECT_FLOAT_EQ(0.0625 * (200.0 / 800.0), GetLayoutShiftTracker().Score());
-  EXPECT_FLOAT_EQ(200.0, GetLayoutShiftTracker().OverallMaxDistance());
-}
-
-TEST_F(LayoutShiftTrackerTest, ShiftOutsideViewport) {
-  SetBodyInnerHTML(R"HTML(
-    <style>
-      body { margin: 0; }
-      #j { position: relative; width: 600px; height: 200px; top: 600px; }
-    </style>
-    <div id='j'></div>
-  )HTML");
-
-  GetDocument().getElementById("j")->setAttribute(html_names::kStyleAttr,
-                                                  AtomicString("top: 800px"));
-  UpdateAllLifecyclePhases();
-  // Since the element moves entirely outside of the viewport, it shouldn't
-  // generate a score.
-  EXPECT_FLOAT_EQ(0.0, GetLayoutShiftTracker().Score());
-}
-
-TEST_F(LayoutShiftTrackerTest, ShiftInToViewport) {
-  SetBodyInnerHTML(R"HTML(
-    <style>
-      body { margin: 0; }
-      #j { position: relative; width: 600px; height: 200px; top: 600px; }
-    </style>
-    <div id='j'></div>
-  )HTML");
-
-  GetDocument().getElementById("j")->setAttribute(html_names::kStyleAttr,
-                                                  AtomicString("top: 400px"));
-  UpdateAllLifecyclePhases();
-  // The element moves from outside the viewport to within the viewport, which
-  // should generate a shift.
-  // (width 600) * (height 0 + move 200) * (200 / 800) / (800 * 600 viewport)
-  EXPECT_FLOAT_EQ(0.25 * (200.0 / 800.0), GetLayoutShiftTracker().Score());
-}
-
-TEST_F(LayoutShiftTrackerTest, ClipWithoutPaintLayer) {
-  SetBodyInnerHTML(R"HTML(
-    <style>
-      #scroller { overflow: scroll; width: 200px; height: 500px; }
-      #space { height: 1000px; margin-bottom: -500px; }
-      #j { width: 150px; height: 150px; background: yellow; }
-    </style>
-    <div id='scroller'>
-      <div id='space'></div>
-      <div id='j'></div>
-    </div>
-  )HTML");
-
-  // Increase j's top margin by 100px. Since j is clipped by the scroller, this
-  // should not generate a shift. However, due to the issue in crbug.com/971639,
-  // this case was erroneously reported as shifting, before that bug was fixed.
-  // This test ensures we do not regress this behavior.
-  GetDocument().getElementById("j")->setAttribute(
-      html_names::kStyleAttr, AtomicString("margin-top: 100px"));
-
-  UpdateAllLifecyclePhases();
-  // Make sure no shift score is reported, since the element that moved is fully
-  // clipped by the scroller.
-  EXPECT_FLOAT_EQ(0.0, GetLayoutShiftTracker().Score());
-}
-
-TEST_F(LayoutShiftTrackerTest, LocalShiftWithoutViewportShift) {
-  SetBodyInnerHTML(R"HTML(
-    <style>
-      #c { position: relative; width: 300px; height: 100px; transform: scale(0.1); }
-      #j { position: relative; width: 100px; height: 10px; }
-    </style>
-    <div id='c'>
-      <div id='j'></div>
-    </div>
-    </div>
-  )HTML");
-
-  GetDocument().getElementById("j")->setAttribute(html_names::kStyleAttr,
-                                                  AtomicString("top: 4px"));
-
-  UpdateAllLifecyclePhases();
-  // Make sure no shift score is reported, since the element didn't move in the
-  // viewport.
-  EXPECT_FLOAT_EQ(0.0, GetLayoutShiftTracker().Score());
-}
-
 class LayoutShiftTrackerSimTest : public SimTest {
  protected:
   void SetUp() override {
@@ -614,46 +390,4 @@
   EXPECT_FLOAT_EQ(0.09 * (490.0 / 800.0), GetLayoutShiftTracker().Score());
 }
 
-TEST_F(LayoutShiftTrackerTest, CounterscrollAllowed) {
-  SetBodyInnerHTML(R"HTML(
-    <style>
-      #s {
-        overflow: scroll;
-        position: absolute;
-        left: 20px;
-        top: 20px;
-        width: 200px;
-        height: 200px;
-      }
-      #sp {
-        width: 170px;
-        height: 600px;
-      }
-      #ch {
-        position: relative;
-        background: yellow;
-        left: 10px;
-        top: 100px;
-        width: 150px;
-        height: 150px;
-      }
-    </style>
-    <div id="s">
-      <div id="sp">
-        <div id="ch"></div>
-      </div>
-    </div>
-  )HTML");
-  UpdateAllLifecyclePhases();
-
-  Element* scroller = GetDocument().getElementById("s");
-  Element* changer = GetDocument().getElementById("ch");
-
-  changer->setAttribute(html_names::kStyleAttr, AtomicString("top: 200px"));
-  scroller->setScrollTop(100.0);
-
-  UpdateAllLifecyclePhases();
-  EXPECT_FLOAT_EQ(0, GetLayoutShiftTracker().Score());
-}
-
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/layout/ng/inline/ng_inline_items_builder.cc b/third_party/blink/renderer/core/layout/ng/inline/ng_inline_items_builder.cc
index 3384d37..744cff0 100644
--- a/third_party/blink/renderer/core/layout/ng/inline/ng_inline_items_builder.cc
+++ b/third_party/blink/renderer/core/layout/ng/inline/ng_inline_items_builder.cc
@@ -1203,7 +1203,7 @@
         if (i == open_item_index) {
           DCHECK_EQ(i, current_box->item_index);
           // TODO(kojii): <area> element fails to hit-test when we don't cull.
-          if (!IsHTMLAreaElement(item.GetLayoutObject()->GetNode()))
+          if (!IsA<HTMLAreaElement>(item.GetLayoutObject()->GetNode()))
             item.SetShouldCreateBoxFragment();
           break;
         }
diff --git a/third_party/blink/renderer/core/paint/object_paint_invalidator.cc b/third_party/blink/renderer/core/paint/object_paint_invalidator.cc
index a92a6cab..d7e46c2 100644
--- a/third_party/blink/renderer/core/paint/object_paint_invalidator.cc
+++ b/third_party/blink/renderer/core/paint/object_paint_invalidator.cc
@@ -240,6 +240,11 @@
     return PaintInvalidationReason::kOutline;
   }
 
+  // Force full paint invalidation if the object has background-clip:text to
+  // update the background on any change in the subtree.
+  if (object_.StyleRef().BackgroundClip() == EFillBox::kText)
+    return PaintInvalidationReason::kBackground;
+
   // If the size is zero on one of our bounds then we know we're going to have
   // to do a full invalidation of either old bounds or new bounds.
   if (context_.old_visual_rect.IsEmpty())
diff --git a/third_party/blink/renderer/core/typed_arrays/array_buffer/array_buffer_view.h b/third_party/blink/renderer/core/typed_arrays/array_buffer/array_buffer_view.h
index 05b2d1c..bd9f5802 100644
--- a/third_party/blink/renderer/core/typed_arrays/array_buffer/array_buffer_view.h
+++ b/third_party/blink/renderer/core/typed_arrays/array_buffer/array_buffer_view.h
@@ -66,7 +66,7 @@
 
   size_t ByteOffset() const { return byte_offset_; }
 
-  virtual unsigned ByteLength() const = 0;
+  virtual size_t ByteLengthAsSizeT() const = 0;
   virtual unsigned TypeSize() const = 0;
 
   void SetDetachable(bool flag) { is_detachable_ = flag; }
diff --git a/third_party/blink/renderer/core/typed_arrays/array_buffer/array_piece.cc b/third_party/blink/renderer/core/typed_arrays/array_buffer/array_piece.cc
index c3935130..abfaead 100644
--- a/third_party/blink/renderer/core/typed_arrays/array_buffer/array_piece.cc
+++ b/third_party/blink/renderer/core/typed_arrays/array_buffer/array_piece.cc
@@ -56,7 +56,7 @@
 
 void ArrayPiece::InitWithArrayBufferView(ArrayBufferView* buffer) {
   if (buffer) {
-    InitWithData(buffer->BaseAddress(), buffer->ByteLength());
+    InitWithData(buffer->BaseAddress(), buffer->ByteLengthAsSizeT());
     is_detached_ = buffer->Buffer() ? buffer->Buffer()->IsDetached() : true;
   } else {
     InitNull();
diff --git a/third_party/blink/renderer/core/typed_arrays/array_buffer/typed_array.h b/third_party/blink/renderer/core/typed_arrays/array_buffer/typed_array.h
index fb9c5b0..e44982b 100644
--- a/third_party/blink/renderer/core/typed_arrays/array_buffer/typed_array.h
+++ b/third_party/blink/renderer/core/typed_arrays/array_buffer/typed_array.h
@@ -39,11 +39,11 @@
  public:
   typedef T ValueType;
 
-  static inline scoped_refptr<TypedArray<T, clamped>> Create(unsigned length);
+  static inline scoped_refptr<TypedArray<T, clamped>> Create(size_t length);
   static inline scoped_refptr<TypedArray<T, clamped>> Create(const T* array,
-                                                             unsigned length);
+                                                             size_t length);
   static inline scoped_refptr<TypedArray<T, clamped>>
-  Create(scoped_refptr<ArrayBuffer>, unsigned byte_offset, unsigned length);
+  Create(scoped_refptr<ArrayBuffer>, size_t byte_offset, size_t length);
 
   T* Data() const { return static_cast<T*>(BaseAddress()); }
 
@@ -51,26 +51,26 @@
     return static_cast<T*>(BaseAddressMaybeShared());
   }
 
-  unsigned length() const { return length_; }
+  size_t length() const { return length_; }
 
-  unsigned ByteLength() const final { return length_ * sizeof(T); }
+  size_t ByteLengthAsSizeT() const final { return length_ * sizeof(T); }
 
   unsigned TypeSize() const final { return sizeof(T); }
 
-  inline void Set(unsigned index, double value);
+  inline void Set(size_t index, double value);
 
-  inline void Set(unsigned index, uint64_t value);
+  inline void Set(size_t index, uint64_t value);
 
   ArrayBufferView::ViewType GetType() const override;
 
   TypedArray(scoped_refptr<ArrayBuffer> buffer,
-             unsigned byte_offset,
-             unsigned length)
+             size_t byte_offset,
+             size_t length)
       : ArrayBufferView(std::move(buffer), byte_offset), length_(length) {}
 
   // Invoked by the indexed getter. Does not perform range checks; caller
   // is responsible for doing so and returning undefined as necessary.
-  T Item(unsigned index) const {
+  T Item(size_t index) const {
     SECURITY_DCHECK(index < length_);
     return Data()[index];
   }
@@ -81,12 +81,12 @@
     length_ = 0;
   }
 
-  unsigned length_;
+  size_t length_;
 };
 
 template <typename T, bool clamped>
 scoped_refptr<TypedArray<T, clamped>> TypedArray<T, clamped>::Create(
-    unsigned length) {
+    size_t length) {
   scoped_refptr<ArrayBuffer> buffer = ArrayBuffer::Create(length, sizeof(T));
   return Create(std::move(buffer), 0, length);
 }
@@ -94,10 +94,10 @@
 template <typename T, bool clamped>
 scoped_refptr<TypedArray<T, clamped>> TypedArray<T, clamped>::Create(
     const T* array,
-    unsigned length) {
+    size_t length) {
   auto a = Create(length);
   if (a) {
-    std::memcpy(a->Data(), array, a->ByteLength());
+    std::memcpy(a->Data(), array, a->ByteLengthAsSizeT());
   }
   return a;
 }
@@ -125,15 +125,15 @@
 template <typename T, bool clamped>
 scoped_refptr<TypedArray<T, clamped>> TypedArray<T, clamped>::Create(
     scoped_refptr<ArrayBuffer> buffer,
-    unsigned byte_offset,
-    unsigned length) {
+    size_t byte_offset,
+    size_t length) {
   CHECK(VerifySubRange<T>(buffer.get(), byte_offset, length));
   return base::AdoptRef(
       new TypedArray<T, clamped>(std::move(buffer), byte_offset, length));
 }
 
 template <typename T, bool clamped>
-inline void TypedArray<T, clamped>::Set(unsigned index, double value) {
+inline void TypedArray<T, clamped>::Set(size_t index, double value) {
   if (index >= length_)
     return;
   if (std::isnan(value))  // Clamp NaN to 0
@@ -144,7 +144,7 @@
 }
 
 template <>
-inline void TypedArray<uint8_t, true>::Set(unsigned index, double value) {
+inline void TypedArray<uint8_t, true>::Set(size_t index, double value) {
   if (index >= length_) {
     return;
   }
@@ -158,49 +158,49 @@
 }
 
 template <>
-inline void TypedArray<float, false>::Set(unsigned index, double value) {
+inline void TypedArray<float, false>::Set(size_t index, double value) {
   if (index >= length_)
     return;
   Data()[index] = static_cast<float>(value);
 }
 
 template <>
-inline void TypedArray<double, false>::Set(unsigned index, double value) {
+inline void TypedArray<double, false>::Set(size_t index, double value) {
   if (index >= length_)
     return;
   Data()[index] = value;
 }
 
 template <>
-inline void TypedArray<int64_t, false>::Set(unsigned index, uint64_t value) {
+inline void TypedArray<int64_t, false>::Set(size_t index, uint64_t value) {
   if (index >= length_)
     return;
   Data()[index] = static_cast<int64_t>(value);
 }
 
 template <>
-inline void TypedArray<uint64_t, false>::Set(unsigned index, uint64_t value) {
+inline void TypedArray<uint64_t, false>::Set(size_t index, uint64_t value) {
   if (index >= length_)
     return;
   Data()[index] = value;
 }
 
 template <>
-inline void TypedArray<int64_t, false>::Set(unsigned index, double value) {
+inline void TypedArray<int64_t, false>::Set(size_t index, double value) {
   // This version of {Set} is not supposed to be used for a TypedArray of type
   // int64_t.
   NOTREACHED();
 }
 
 template <>
-inline void TypedArray<uint64_t, false>::Set(unsigned index, double value) {
+inline void TypedArray<uint64_t, false>::Set(size_t index, double value) {
   // This version of {Set} is not supposed to be used for a TypedArray of type
   // uint64_t.
   NOTREACHED();
 }
 
 template <typename T, bool clamped>
-inline void TypedArray<T, clamped>::Set(unsigned index, uint64_t value) {
+inline void TypedArray<T, clamped>::Set(size_t index, uint64_t value) {
   // This version of {Set} is only supposed to be used for a TypedArrays of type
   // int64_t or uint64_t.
   NOTREACHED();
diff --git a/third_party/blink/renderer/core/typed_arrays/dom_array_buffer_view.h b/third_party/blink/renderer/core/typed_arrays/dom_array_buffer_view.h
index 4e846a8..1d786cd 100644
--- a/third_party/blink/renderer/core/typed_arrays/dom_array_buffer_view.h
+++ b/third_party/blink/renderer/core/typed_arrays/dom_array_buffer_view.h
@@ -66,7 +66,9 @@
   unsigned deprecatedByteOffsetAsUnsigned() const {
     return base::checked_cast<unsigned>(View()->ByteOffset());
   }
-  unsigned byteLength() const { return View()->ByteLength(); }
+  unsigned byteLength() const {
+    return base::checked_cast<unsigned>(View()->ByteLengthAsSizeT());
+  }
   unsigned TypeSize() const { return View()->TypeSize(); }
   void SetDetachable(bool flag) { return View()->SetDetachable(flag); }
   bool IsShared() const { return View()->IsShared(); }
diff --git a/third_party/blink/renderer/core/typed_arrays/dom_data_view.cc b/third_party/blink/renderer/core/typed_arrays/dom_data_view.cc
index ccb6c48..a955ed6 100644
--- a/third_party/blink/renderer/core/typed_arrays/dom_data_view.cc
+++ b/third_party/blink/renderer/core/typed_arrays/dom_data_view.cc
@@ -17,14 +17,14 @@
  public:
   static scoped_refptr<DataView> Create(ArrayBuffer* buffer,
                                         unsigned byte_offset,
-                                        unsigned byte_length) {
+                                        size_t byte_length) {
     base::CheckedNumeric<uint32_t> checked_max = byte_offset;
     checked_max += byte_length;
     CHECK_LE(checked_max.ValueOrDie(), buffer->ByteLengthAsUnsigned());
     return base::AdoptRef(new DataView(buffer, byte_offset, byte_length));
   }
 
-  unsigned ByteLength() const override { return byte_length_; }
+  size_t ByteLengthAsSizeT() const override { return byte_length_; }
   ViewType GetType() const override { return kTypeDataView; }
   unsigned TypeSize() const override { return 1; }
 
@@ -35,10 +35,10 @@
   }
 
  private:
-  DataView(ArrayBuffer* buffer, unsigned byte_offset, unsigned byte_length)
+  DataView(ArrayBuffer* buffer, unsigned byte_offset, size_t byte_length)
       : ArrayBufferView(buffer, byte_offset), byte_length_(byte_length) {}
 
-  unsigned byte_length_;
+  size_t byte_length_;
 };
 
 }  // anonymous namespace
diff --git a/third_party/blink/renderer/core/typed_arrays/dom_typed_array.h b/third_party/blink/renderer/core/typed_arrays/dom_typed_array.h
index fa531ac..b987702b 100644
--- a/third_party/blink/renderer/core/typed_arrays/dom_typed_array.h
+++ b/third_party/blink/renderer/core/typed_arrays/dom_typed_array.h
@@ -71,7 +71,9 @@
 
   ValueType* Data() const { return View()->Data(); }
   ValueType* DataMaybeShared() const { return View()->DataMaybeShared(); }
-  unsigned length() const { return View()->length(); }
+  unsigned length() const {
+    return base::checked_cast<unsigned>(View()->length());
+  }
   // Invoked by the indexed getter. Does not perform range checks; caller
   // is responsible for doing so and returning undefined as necessary.
   ValueType Item(unsigned index) const { return View()->Item(index); }
diff --git a/third_party/blink/renderer/modules/accessibility/testing/accessibility_test.h b/third_party/blink/renderer/modules/accessibility/testing/accessibility_test.h
index a6ebd50..872004e8 100644
--- a/third_party/blink/renderer/modules/accessibility/testing/accessibility_test.h
+++ b/third_party/blink/renderer/modules/accessibility/testing/accessibility_test.h
@@ -63,7 +63,7 @@
   bool LayoutNGEnabled() const { return GetParam(); }
 };
 
-INSTANTIATE_TEST_SUITE_P(, ParameterizedAccessibilityTest, testing::Bool());
+INSTANTIATE_TEST_SUITE_P(All, ParameterizedAccessibilityTest, testing::Bool());
 
 }  // namespace test
 }  // namespace blink
diff --git a/third_party/blink/renderer/modules/cache_storage/cache_storage.cc b/third_party/blink/renderer/modules/cache_storage/cache_storage.cc
index 8c247989..c0be2e9 100644
--- a/third_party/blink/renderer/modules/cache_storage/cache_storage.cc
+++ b/third_party/blink/renderer/modules/cache_storage/cache_storage.cc
@@ -8,7 +8,7 @@
 
 #include "base/memory/ptr_util.h"
 #include "base/metrics/histogram_macros.h"
-#include "services/service_manager/public/cpp/interface_provider.h"
+#include "third_party/blink/public/common/browser_interface_broker_proxy.h"
 #include "third_party/blink/public/common/cache_storage/cache_storage_utils.h"
 #include "third_party/blink/public/mojom/cache_storage/cache_storage.mojom-blink.h"
 #include "third_party/blink/public/platform/web_content_settings_client.h"
@@ -478,7 +478,7 @@
     }
   }
 
-  context->GetInterfaceProvider()->GetInterface(
+  context->GetBrowserInterfaceBroker().GetInterface(
       cache_storage_remote_.BindNewPipeAndPassReceiver(task_runner));
 }
 
diff --git a/third_party/blink/renderer/modules/cache_storage/inspector_cache_storage_agent.cc b/third_party/blink/renderer/modules/cache_storage/inspector_cache_storage_agent.cc
index 7d6572d..1509e73f 100644
--- a/third_party/blink/renderer/modules/cache_storage/inspector_cache_storage_agent.cc
+++ b/third_party/blink/renderer/modules/cache_storage/inspector_cache_storage_agent.cc
@@ -12,7 +12,7 @@
 #include "mojo/public/cpp/bindings/associated_remote.h"
 #include "mojo/public/cpp/bindings/pending_associated_remote.h"
 #include "services/network/public/mojom/fetch_api.mojom-blink.h"
-#include "services/service_manager/public/cpp/interface_provider.h"
+#include "third_party/blink/public/common/browser_interface_broker_proxy.h"
 #include "third_party/blink/public/common/cache_storage/cache_storage_utils.h"
 #include "third_party/blink/public/mojom/cache_storage/cache_storage.mojom-blink.h"
 #include "third_party/blink/public/platform/platform.h"
@@ -124,7 +124,7 @@
 
   if (it == caches->end()) {
     mojo::Remote<mojom::blink::CacheStorage> cache_storage_remote;
-    context->GetInterfaceProvider()->GetInterface(
+    context->GetBrowserInterfaceBroker().GetInterface(
         cache_storage_remote.BindNewPipeAndPassReceiver());
     *result = cache_storage_remote.get();
     caches->Set(security_origin, std::move(cache_storage_remote));
diff --git a/third_party/blink/renderer/modules/geolocation/geolocation.cc b/third_party/blink/renderer/modules/geolocation/geolocation.cc
index 65952f5e..1ccff0471 100644
--- a/third_party/blink/renderer/modules/geolocation/geolocation.cc
+++ b/third_party/blink/renderer/modules/geolocation/geolocation.cc
@@ -28,7 +28,7 @@
 #include "third_party/blink/renderer/modules/geolocation/geolocation.h"
 
 #include "services/device/public/mojom/geoposition.mojom-blink.h"
-#include "services/service_manager/public/cpp/interface_provider.h"
+#include "third_party/blink/public/common/browser_interface_broker_proxy.h"
 #include "third_party/blink/public/mojom/feature_policy/feature_policy.mojom-blink.h"
 #include "third_party/blink/public/platform/platform.h"
 #include "third_party/blink/renderer/bindings/core/v8/source_location.h"
@@ -464,7 +464,7 @@
   // See https://bit.ly/2S0zRAS for task types.
   scoped_refptr<base::SingleThreadTaskRunner> task_runner =
       GetExecutionContext()->GetTaskRunner(TaskType::kMiscPlatformAPI);
-  GetFrame()->GetInterfaceProvider().GetInterface(
+  GetFrame()->GetBrowserInterfaceBroker().GetInterface(
       geolocation_service_.BindNewPipeAndPassReceiver(task_runner));
   geolocation_service_->CreateGeolocation(
       geolocation_.BindNewPipeAndPassReceiver(std::move(task_runner)),
diff --git a/third_party/blink/renderer/modules/mediacapturefromelement/canvas_capture_handler_unittest.cc b/third_party/blink/renderer/modules/mediacapturefromelement/canvas_capture_handler_unittest.cc
index 5e2cac3..06ed007 100644
--- a/third_party/blink/renderer/modules/mediacapturefromelement/canvas_capture_handler_unittest.cc
+++ b/third_party/blink/renderer/modules/mediacapturefromelement/canvas_capture_handler_unittest.cc
@@ -233,7 +233,7 @@
 }
 
 INSTANTIATE_TEST_SUITE_P(
-    ,
+    All,
     CanvasCaptureHandlerTest,
     ::testing::Combine(::testing::Bool(),
                        ::testing::Values(kTestCanvasCaptureFrameEvenSize,
diff --git a/third_party/blink/renderer/modules/mediacapturefromelement/html_video_element_capturer_source_unittest.cc b/third_party/blink/renderer/modules/mediacapturefromelement/html_video_element_capturer_source_unittest.cc
index 29453289..26c87156 100644
--- a/third_party/blink/renderer/modules/mediacapturefromelement/html_video_element_capturer_source_unittest.cc
+++ b/third_party/blink/renderer/modules/mediacapturefromelement/html_video_element_capturer_source_unittest.cc
@@ -192,7 +192,7 @@
   Mock::VerifyAndClearExpectations(this);
 }
 
-INSTANTIATE_TEST_SUITE_P(,
+INSTANTIATE_TEST_SUITE_P(All,
                          HTMLVideoElementCapturerSourceTest,
                          ::testing::Bool());
 
diff --git a/third_party/blink/renderer/modules/nfc/ndef_record.cc b/third_party/blink/renderer/modules/nfc/ndef_record.cc
index ea6fbac..d2c46a67 100644
--- a/third_party/blink/renderer/modules/nfc/ndef_record.cc
+++ b/third_party/blink/renderer/modules/nfc/ndef_record.cc
@@ -213,19 +213,16 @@
                                         ExceptionState& exception_state) {
   // TODO(https://crbug.com/520391): Add support in case of |data| being an
   // NDEFMessageInit.
+
   // https://w3c.github.io/web-nfc/#dfn-map-external-data-to-ndef
-  if (data.IsEmpty() || !data.V8Value()->IsArrayBuffer()) {
+  if (!IsBufferSource(data)) {
     exception_state.ThrowTypeError(
-        "The data for external type NDEFRecord must be an ArrayBuffer.");
+        "The data for external type NDEFRecord must be a BufferSource.");
     return nullptr;
   }
 
-  DOMArrayBuffer* array_buffer =
-      V8ArrayBuffer::ToImpl(data.V8Value().As<v8::Object>());
-  WTF::Vector<uint8_t> bytes;
-  bytes.Append(static_cast<uint8_t*>(array_buffer->Data()),
-               array_buffer->DeprecatedByteLengthAsUnsigned());
-  return MakeGarbageCollected<NDEFRecord>(custom_type, std::move(bytes));
+  return MakeGarbageCollected<NDEFRecord>(custom_type,
+                                          GetBytesOfBufferSource(data));
 }
 
 }  // namespace
diff --git a/third_party/blink/renderer/modules/payments/OWNERS b/third_party/blink/renderer/modules/payments/OWNERS
index 27254a0e..253e2d8 100644
--- a/third_party/blink/renderer/modules/payments/OWNERS
+++ b/third_party/blink/renderer/modules/payments/OWNERS
@@ -6,3 +6,4 @@
 mek@chromium.org
 rouslan@chromium.org
 danyao@chromium.org
+sahel@chromium.org
\ No newline at end of file
diff --git a/third_party/blink/renderer/modules/peerconnection/mock_web_rtc_peer_connection_handler.cc b/third_party/blink/renderer/modules/peerconnection/mock_web_rtc_peer_connection_handler.cc
index 2f58e80..afbe8c0 100644
--- a/third_party/blink/renderer/modules/peerconnection/mock_web_rtc_peer_connection_handler.cc
+++ b/third_party/blink/renderer/modules/peerconnection/mock_web_rtc_peer_connection_handler.cc
@@ -389,7 +389,7 @@
 scoped_refptr<webrtc::DataChannelInterface>
 MockWebRTCPeerConnectionHandler::CreateDataChannel(
     const WebString& label,
-    const WebRTCDataChannelInit&) {
+    const RTCDataChannelInitPlatform&) {
   return nullptr;
 }
 
diff --git a/third_party/blink/renderer/modules/peerconnection/mock_web_rtc_peer_connection_handler.h b/third_party/blink/renderer/modules/peerconnection/mock_web_rtc_peer_connection_handler.h
index 1a1cb98..815e64c 100644
--- a/third_party/blink/renderer/modules/peerconnection/mock_web_rtc_peer_connection_handler.h
+++ b/third_party/blink/renderer/modules/peerconnection/mock_web_rtc_peer_connection_handler.h
@@ -72,7 +72,7 @@
       RTCRtpSenderPlatform*) override;
   scoped_refptr<webrtc::DataChannelInterface> CreateDataChannel(
       const WebString& label,
-      const WebRTCDataChannelInit&) override;
+      const RTCDataChannelInitPlatform&) override;
   void Stop() override;
   webrtc::PeerConnectionInterface* NativePeerConnection() override;
   void RunSynchronousOnceClosureOnSignalingThread(
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection.cc b/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection.cc
index 78cac0d..68e26e76 100644
--- a/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection.cc
+++ b/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection.cc
@@ -45,7 +45,6 @@
 #include "third_party/blink/public/platform/task_type.h"
 #include "third_party/blink/public/platform/web_crypto_algorithm_params.h"
 #include "third_party/blink/public/platform/web_media_stream.h"
-#include "third_party/blink/public/platform/web_rtc_data_channel_init.h"
 #include "third_party/blink/public/platform/web_rtc_stats_request.h"
 #include "third_party/blink/public/web/web_local_frame.h"
 #include "third_party/blink/renderer/bindings/core/v8/script_promise_resolver.h"
@@ -113,6 +112,7 @@
 #include "third_party/blink/renderer/platform/instrumentation/instance_counters.h"
 #include "third_party/blink/renderer/platform/instrumentation/use_counter.h"
 #include "third_party/blink/renderer/platform/peerconnection/rtc_answer_options_platform.h"
+#include "third_party/blink/renderer/platform/peerconnection/rtc_data_channel_init_platform.h"
 #include "third_party/blink/renderer/platform/peerconnection/rtc_ice_candidate_platform.h"
 #include "third_party/blink/renderer/platform/peerconnection/rtc_offer_options_platform.h"
 #include "third_party/blink/renderer/platform/peerconnection/rtc_session_description_platform.h"
@@ -2331,7 +2331,7 @@
   if (ThrowExceptionIfSignalingStateClosed(signaling_state_, &exception_state))
     return nullptr;
 
-  WebRTCDataChannelInit init;
+  RTCDataChannelInitPlatform init;
   init.ordered = data_channel_dict->ordered();
   ExecutionContext* context = ExecutionContext::From(script_state);
   if (data_channel_dict->hasMaxPacketLifeTime()) {
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_handler.cc b/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_handler.cc
index 5943137..1190e10 100644
--- a/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_handler.cc
+++ b/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_handler.cc
@@ -27,7 +27,6 @@
 #include "third_party/blink/public/platform/modules/mediastream/web_platform_media_stream_track.h"
 #include "third_party/blink/public/platform/platform.h"
 #include "third_party/blink/public/platform/web_media_constraints.h"
-#include "third_party/blink/public/platform/web_rtc_data_channel_init.h"
 #include "third_party/blink/public/platform/web_rtc_legacy_stats.h"
 #include "third_party/blink/public/platform/web_rtc_rtp_transceiver.h"
 #include "third_party/blink/public/platform/web_rtc_stats.h"
@@ -42,6 +41,7 @@
 #include "third_party/blink/renderer/modules/webrtc/webrtc_audio_device_impl.h"
 #include "third_party/blink/renderer/platform/mediastream/webrtc_uma_histograms.h"
 #include "third_party/blink/renderer/platform/peerconnection/rtc_answer_options_platform.h"
+#include "third_party/blink/renderer/platform/peerconnection/rtc_data_channel_init_platform.h"
 #include "third_party/blink/renderer/platform/peerconnection/rtc_event_log_output_sink.h"
 #include "third_party/blink/renderer/platform/peerconnection/rtc_event_log_output_sink_proxy.h"
 #include "third_party/blink/renderer/platform/peerconnection/rtc_ice_candidate_platform.h"
@@ -2051,7 +2051,7 @@
 
 scoped_refptr<DataChannelInterface> RTCPeerConnectionHandler::CreateDataChannel(
     const blink::WebString& label,
-    const blink::WebRTCDataChannelInit& init) {
+    const RTCDataChannelInitPlatform& init) {
   DCHECK(task_runner_->RunsTasksInCurrentSequence());
   TRACE_EVENT0("webrtc", "RTCPeerConnectionHandler::createDataChannel");
   DVLOG(1) << "createDataChannel label " << label.Utf8();
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_handler.h b/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_handler.h
index 29850d74..a63ed47 100644
--- a/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_handler.h
+++ b/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_handler.h
@@ -161,7 +161,7 @@
 
   scoped_refptr<webrtc::DataChannelInterface> CreateDataChannel(
       const blink::WebString& label,
-      const blink::WebRTCDataChannelInit& init) override;
+      const RTCDataChannelInitPlatform& init) override;
   void Stop() override;
   webrtc::PeerConnectionInterface* NativePeerConnection() override;
   void RunSynchronousOnceClosureOnSignalingThread(
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_handler_test.cc b/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_handler_test.cc
index 64aa2aa..f5197c2 100644
--- a/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_handler_test.cc
+++ b/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_handler_test.cc
@@ -29,7 +29,6 @@
 #include "third_party/blink/public/platform/web_media_stream.h"
 #include "third_party/blink/public/platform/web_media_stream_source.h"
 #include "third_party/blink/public/platform/web_media_stream_track.h"
-#include "third_party/blink/public/platform/web_rtc_data_channel_init.h"
 #include "third_party/blink/public/platform/web_rtc_peer_connection_handler_client.h"
 #include "third_party/blink/public/platform/web_rtc_rtp_receiver.h"
 #include "third_party/blink/public/platform/web_rtc_stats.h"
@@ -48,6 +47,7 @@
 #include "third_party/blink/renderer/modules/peerconnection/peer_connection_tracker.h"
 #include "third_party/blink/renderer/modules/webrtc/webrtc_audio_device_impl.h"
 #include "third_party/blink/renderer/platform/mediastream/media_stream_audio_source.h"
+#include "third_party/blink/renderer/platform/peerconnection/rtc_data_channel_init_platform.h"
 #include "third_party/blink/renderer/platform/peerconnection/rtc_dtmf_sender_handler.h"
 #include "third_party/blink/renderer/platform/peerconnection/rtc_ice_candidate_platform.h"
 #include "third_party/blink/renderer/platform/peerconnection/rtc_session_description_platform.h"
@@ -1275,7 +1275,7 @@
               TrackCreateDataChannel(pc_handler_.get(), testing::NotNull(),
                                      PeerConnectionTracker::SOURCE_LOCAL));
   scoped_refptr<webrtc::DataChannelInterface> channel =
-      pc_handler_->CreateDataChannel("d1", blink::WebRTCDataChannelInit());
+      pc_handler_->CreateDataChannel("d1", RTCDataChannelInitPlatform());
   EXPECT_TRUE(channel.get());
   EXPECT_EQ(label.Utf8(), channel->label());
 }
diff --git a/third_party/blink/renderer/modules/webusb/usb_device.cc b/third_party/blink/renderer/modules/webusb/usb_device.cc
index 1a993ba..80ad5f4c 100644
--- a/third_party/blink/renderer/modules/webusb/usb_device.cc
+++ b/third_party/blink/renderer/modules/webusb/usb_device.cc
@@ -40,6 +40,7 @@
 
 namespace {
 
+const char kBufferTooBig[] = "The data buffer exceeded its maximum size.";
 const char kDetachedBuffer[] = "The data buffer has been detached.";
 const char kDeviceStateChangeInProgress[] =
     "An operation that changes the device state is in progress.";
@@ -114,9 +115,15 @@
           DOMExceptionCode::kInvalidStateError, kDetachedBuffer));
       return false;
     }
+    if (array_buffer->ByteLengthAsSizeT() >
+        std::numeric_limits<wtf_size_t>::max()) {
+      resolver->Reject(MakeGarbageCollected<DOMException>(
+          DOMExceptionCode::kDataError, kBufferTooBig));
+      return false;
+    }
 
     vector->Append(static_cast<uint8_t*>(array_buffer->Data()),
-                   array_buffer->ByteLengthAsUnsigned());
+                   static_cast<wtf_size_t>(array_buffer->ByteLengthAsSizeT()));
   } else {
     ArrayBufferView* view = buffer_source.GetAsArrayBufferView().View()->View();
     if (!view->Buffer() || view->Buffer()->IsDetached()) {
@@ -124,9 +131,14 @@
           DOMExceptionCode::kInvalidStateError, kDetachedBuffer));
       return false;
     }
+    if (view->ByteLengthAsSizeT() > std::numeric_limits<wtf_size_t>::max()) {
+      resolver->Reject(MakeGarbageCollected<DOMException>(
+          DOMExceptionCode::kDataError, kBufferTooBig));
+      return false;
+    }
 
     vector->Append(static_cast<uint8_t*>(view->BaseAddress()),
-                   view->ByteLength());
+                   static_cast<wtf_size_t>(view->ByteLengthAsSizeT()));
   }
   return true;
 }
diff --git a/third_party/blink/renderer/platform/BUILD.gn b/third_party/blink/renderer/platform/BUILD.gn
index 3df9675..92975fc 100644
--- a/third_party/blink/renderer/platform/BUILD.gn
+++ b/third_party/blink/renderer/platform/BUILD.gn
@@ -1257,6 +1257,7 @@
     "peerconnection/audio_codec_factory.cc",
     "peerconnection/audio_codec_factory.h",
     "peerconnection/rtc_answer_options_platform.h",
+    "peerconnection/rtc_data_channel_init_platform.h",
     "peerconnection/rtc_dtmf_sender_handler.cc",
     "peerconnection/rtc_dtmf_sender_handler.h",
     "peerconnection/rtc_event_log_output_sink.h",
diff --git a/third_party/blink/renderer/platform/graphics/logging_canvas.cc b/third_party/blink/renderer/platform/graphics/logging_canvas.cc
index 2e8405e2..97eb0f0b 100644
--- a/third_party/blink/renderer/platform/graphics/logging_canvas.cc
+++ b/third_party/blink/renderer/platform/graphics/logging_canvas.cc
@@ -185,13 +185,13 @@
   };
 }
 
-String ConvexityName(SkPath::Convexity convexity) {
+String ConvexityName(SkPathConvexityType convexity) {
   switch (convexity) {
-    case SkPath::kUnknown_Convexity:
+    case SkPathConvexityType::kUnknown:
       return "Unknown";
-    case SkPath::kConvex_Convexity:
+    case SkPathConvexityType::kConvex:
       return "Convex";
-    case SkPath::kConcave_Convexity:
+    case SkPathConvexityType::kConcave:
       return "Concave";
     default:
       NOTREACHED();
@@ -224,7 +224,7 @@
 std::unique_ptr<JSONObject> ObjectForSkPath(const SkPath& path) {
   auto path_item = std::make_unique<JSONObject>();
   path_item->SetString("fillType", FillTypeName(path.getFillType()));
-  path_item->SetString("convexity", ConvexityName(path.getConvexity()));
+  path_item->SetString("convexity", ConvexityName(path.getConvexityType()));
   path_item->SetBoolean("isRect", path.isRect(nullptr));
   SkPath::Iter iter(path, false);
   SkPoint points[4];
diff --git a/third_party/blink/renderer/platform/graphics/path.cc b/third_party/blink/renderer/platform/graphics/path.cc
index b1a93cf..a116f6f4 100644
--- a/third_party/blink/renderer/platform/graphics/path.cc
+++ b/third_party/blink/renderer/platform/graphics/path.cc
@@ -337,7 +337,7 @@
               WebCoreFloatToSkScalar(r.Height()),
               WebCoreFloatToSkScalar(x_rotate),
               large_arc ? SkPath::kLarge_ArcSize : SkPath::kSmall_ArcSize,
-              sweep ? SkPath::kCW_Direction : SkPath::kCCW_Direction,
+              sweep ? SkPathDirection::kCW : SkPathDirection::kCCW,
               WebCoreFloatToSkScalar(p.X()), WebCoreFloatToSkScalar(p.Y()));
 }
 
@@ -399,7 +399,7 @@
 
 void Path::AddRect(const FloatRect& rect) {
   // Start at upper-left, add clock-wise.
-  path_.addRect(rect, SkPath::kCW_Direction, 0);
+  path_.addRect(rect, SkPathDirection::kCW, 0);
 }
 
 void Path::AddEllipse(const FloatPoint& p,
@@ -430,7 +430,7 @@
 
 void Path::AddEllipse(const FloatRect& rect) {
   // Start at 3 o'clock, add clock-wise.
-  path_.addOval(rect, SkPath::kCW_Direction, 1);
+  path_.addOval(rect, SkPathDirection::kCW, 1);
 }
 
 void Path::AddRoundedRect(const FloatRoundedRect& r) {
@@ -502,7 +502,7 @@
   // Start at upper-left (after corner radii), add clock-wise.
   path_.addRRect(FloatRoundedRect(rect, top_left_radius, top_right_radius,
                                   bottom_left_radius, bottom_right_radius),
-                 SkPath::kCW_Direction, 0);
+                 SkPathDirection::kCW, 0);
 }
 
 void Path::AddPath(const Path& src, const AffineTransform& transform) {
diff --git a/third_party/blink/public/platform/web_rtc_data_channel_init.h b/third_party/blink/renderer/platform/peerconnection/rtc_data_channel_init_platform.h
similarity index 80%
rename from third_party/blink/public/platform/web_rtc_data_channel_init.h
rename to third_party/blink/renderer/platform/peerconnection/rtc_data_channel_init_platform.h
index 3241b23..e714410 100644
--- a/third_party/blink/public/platform/web_rtc_data_channel_init.h
+++ b/third_party/blink/renderer/platform/peerconnection/rtc_data_channel_init_platform.h
@@ -28,16 +28,16 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-#ifndef THIRD_PARTY_BLINK_PUBLIC_PLATFORM_WEB_RTC_DATA_CHANNEL_INIT_H_
-#define THIRD_PARTY_BLINK_PUBLIC_PLATFORM_WEB_RTC_DATA_CHANNEL_INIT_H_
+#ifndef THIRD_PARTY_BLINK_RENDERER_PLATFORM_PEERCONNECTION_RTC_DATA_CHANNEL_INIT_PLATFORM_H_
+#define THIRD_PARTY_BLINK_RENDERER_PLATFORM_PEERCONNECTION_RTC_DATA_CHANNEL_INIT_PLATFORM_H_
 
-#include "third_party/blink/public/platform/web_string.h"
+#include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"
 
 namespace blink {
 
-struct WebRTCDataChannelInit {
+struct RTCDataChannelInitPlatform {
  public:
-  WebRTCDataChannelInit()
+  RTCDataChannelInitPlatform()
       : ordered(true),
         max_retransmit_time(-1),
         max_retransmits(-1),
@@ -46,11 +46,11 @@
   bool ordered;
   int max_retransmit_time;
   int max_retransmits;
-  WebString protocol;
+  String protocol;
   bool negotiated;
   int id;
 };
 
 }  // namespace blink
 
-#endif  // THIRD_PARTY_BLINK_PUBLIC_PLATFORM_WEB_RTC_DATA_CHANNEL_INIT_H_
+#endif  // THIRD_PARTY_BLINK_RENDERER_PLATFORM_PEERCONNECTION_RTC_DATA_CHANNEL_INIT_PLATFORM_H_
diff --git a/third_party/blink/web_tests/FlagExpectations/disable-layout-ng b/third_party/blink/web_tests/FlagExpectations/disable-layout-ng
index b44b390..512cc16 100644
--- a/third_party/blink/web_tests/FlagExpectations/disable-layout-ng
+++ b/third_party/blink/web_tests/FlagExpectations/disable-layout-ng
@@ -435,3 +435,6 @@
 Bug(none) virtual/controls-refresh-hc/virtual/controls-refresh/color-scheme/suggestion-picker/time-suggestion-picker-appearance.html [ Failure ]
 Bug(none) virtual/controls-refresh/color-scheme/suggestion-picker/datetimelocal-suggestion-picker-appearance.html [ Failure ]
 Bug(none) virtual/controls-refresh/color-scheme/suggestion-picker/time-suggestion-picker-appearance.html [ Failure ]
+
+# MathML depends on LayoutNG.
+crbug.com/6606 external/wpt/mathml/ [ Skip ]
diff --git a/third_party/blink/web_tests/SlowTests b/third_party/blink/web_tests/SlowTests
index 21f5815..055c8879 100644
--- a/third_party/blink/web_tests/SlowTests
+++ b/third_party/blink/web_tests/SlowTests
@@ -640,16 +640,6 @@
 crbug.com/980804 virtual/scroll_customization/fast/scrolling/scrollbars/mouse-autoscrolling-on-scrollbar.html [ Slow ]
 crbug.com/980804 virtual/threaded-prefer-compositing/fast/scrolling/scrollbars/mouse-autoscrolling-on-scrollbar.html [ Slow ]
 
-crbug.com/980804 fast/scrolling/scrollbars/mouse-scrolling-on-div-scrollbar.html [ Slow ]
-crbug.com/980804 virtual/compositor_threaded_scrollbar_scrolling/fast/scrolling/scrollbars/mouse-scrolling-on-div-scrollbar.html [ Slow ]
-crbug.com/980804 virtual/scroll_customization/fast/scrolling/scrollbars/mouse-scrolling-on-div-scrollbar.html [ Slow ]
-crbug.com/980804 virtual/threaded-prefer-compositing/fast/scrolling/scrollbars/mouse-scrolling-on-div-scrollbar.html [ Slow ]
-
-crbug.com/980804 fast/scrolling/scrollbars/mouse-scrolling-on-root-scrollbar.html [ Slow ]
-crbug.com/980804 virtual/compositor_threaded_scrollbar_scrolling/fast/scrolling/scrollbars/mouse-scrolling-on-root-scrollbar.html [ Slow ]
-crbug.com/980804 virtual/scroll_customization/fast/scrolling/scrollbars/mouse-scrolling-on-root-scrollbar.html [ Slow ]
-crbug.com/980804 virtual/threaded-prefer-compositing/fast/scrolling/scrollbars/mouse-scrolling-on-root-scrollbar.html [ Slow ]
-
 crbug.com/983642 virtual/gpu/fast/canvas/canvas-composite-alpha.html [ Slow ]
 crbug.com/983642 [ Mac Debug ] fast/canvas/canvas-composite-alpha.html [ Slow ]
 crbug.com/983642 virtual/gpu/fast/canvas/canvas-composite-text-alpha.html [ Slow ]
diff --git a/third_party/blink/web_tests/TestExpectations b/third_party/blink/web_tests/TestExpectations
index 6116404..52c55fc 100644
--- a/third_party/blink/web_tests/TestExpectations
+++ b/third_party/blink/web_tests/TestExpectations
@@ -5883,3 +5883,35 @@
 
 # Sheriff 2019-11-21
 crbug.com/1027287 css3/filters/effect-reference-image-lazy-attach.html [ Pass Failure ]
+
+# Temporary suppression to allow Skia change to opaqueness tracking
+crbug.com/1028116 virtual/gpu-rasterization-disable-yuv/images/yuv-decode-eligible/color-profile-border-radius.html [ Pass Failure ]
+crbug.com/1028116 virtual/gpu-rasterization-disable-yuv/images/yuv-decode-eligible/color-profile-filter.html [ Pass Failure ]
+crbug.com/1028116 virtual/gpu-rasterization-disable-yuv/images/yuv-decode-eligible/color-profile-image.html [ Pass Failure ]
+crbug.com/1028116 virtual/gpu-rasterization-disable-yuv/images/yuv-decode-eligible/webp-color-profile-lossy.html [ Pass Failure ]
+crbug.com/1028116 virtual/gpu-rasterization/images/color-jpeg-with-color-profile.html [ Pass Failure ]
+crbug.com/1028116 virtual/gpu-rasterization/images/color-profile-animate-rotate.html [ Pass Failure ]
+crbug.com/1028116 virtual/gpu-rasterization/images/color-profile-animate.html [ Pass Failure ]
+crbug.com/1028116 virtual/gpu-rasterization/images/color-profile-background-image-cover.html [ Pass Failure ]
+crbug.com/1028116 virtual/gpu-rasterization/images/color-profile-background-image-repeat.html [ Pass Failure ]
+crbug.com/1028116 virtual/gpu-rasterization/images/color-profile-background-image-space.html [ Pass Failure ]
+crbug.com/1028116 virtual/gpu-rasterization/images/color-profile-border-fade.html [ Pass Failure ]
+crbug.com/1028116 virtual/gpu-rasterization/images/color-profile-clip.html [ Pass Failure ]
+crbug.com/1028116 virtual/gpu-rasterization/images/color-profile-iframe.html [ Pass Failure ]
+crbug.com/1028116 virtual/gpu-rasterization/images/color-profile-image-canvas-pattern.html [ Pass Failure ]
+crbug.com/1028116 virtual/gpu-rasterization/images/color-profile-image-canvas-svg.html [ Pass Failure ]
+crbug.com/1028116 virtual/gpu-rasterization/images/color-profile-image-canvas.html [ Pass Failure ]
+crbug.com/1028116 virtual/gpu-rasterization/images/color-profile-image-pseudo-content.html [ Pass Failure ]
+crbug.com/1028116 virtual/gpu-rasterization/images/color-profile-image-svg-resource-url.html [ Pass Failure ]
+crbug.com/1028116 virtual/gpu-rasterization/images/color-profile-mask-image-svg.html [ Pass Failure ]
+crbug.com/1028116 virtual/gpu-rasterization/images/color-profile-munsell-adobe-to-srgb-webgl.html [ Pass Failure ]
+crbug.com/1028116 virtual/gpu-rasterization/images/color-profile-munsell-adobe-to-srgb.html [ Pass Failure ]
+crbug.com/1028116 virtual/gpu-rasterization/images/color-profile-object.html [ Pass Failure ]
+crbug.com/1028116 virtual/gpu-rasterization/images/color-profile-svg-foreign-object.html [ Pass Failure ]
+crbug.com/1028116 virtual/gpu-rasterization/images/jpeg-with-color-profile.html [ Pass Failure ]
+crbug.com/1028116 virtual/gpu-rasterization/images/png-with-color-profile.html [ Pass Failure ]
+crbug.com/1028116 virtual/gpu-rasterization/images/webp-color-profile-lossless.html [ Pass Failure ]
+crbug.com/1028116 virtual/gpu-rasterization/images/webp-color-profile-lossy-alpha.html [ Pass Failure ]
+crbug.com/1028116 virtual/gpu-rasterization/images/yuv-decode-eligible/color-profile-filter.html [ Pass Failure ]
+crbug.com/1028116 virtual/gpu-rasterization/images/yuv-decode-eligible/color-profile-image.html [ Pass Failure ]
+crbug.com/1028116 virtual/gpu-rasterization/images/yuv-decode-eligible/webp-color-profile-lossy.html [ Pass Failure ]
diff --git a/third_party/blink/web_tests/animations/web-animations/animation-null-timeline.html b/third_party/blink/web_tests/animations/web-animations/animation-null-timeline.html
index a3ad3f9..a23b9603 100644
--- a/third_party/blink/web_tests/animations/web-animations/animation-null-timeline.html
+++ b/third_party/blink/web_tests/animations/web-animations/animation-null-timeline.html
@@ -16,7 +16,7 @@
   animation.finish();
   assert_equals(animation.startTime, null);
   assert_equals(animation.currentTime, 1000);
-  assert_equals(animation.playState, 'finished');
+  assert_equals(animation.playState, 'paused');
 }, 'Animation finished with a null timeline');
 
 // crbug.com/967507
diff --git a/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_6.json b/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_6.json
index f6f59c1..99721ed 100644
--- a/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_6.json
+++ b/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_6.json
@@ -178951,9 +178951,6 @@
    "web-nfc/NDEFReader-document-hidden-manual.https-expected.txt": [
     []
    ],
-   "web-nfc/NDEFRecord_constructor.https-expected.txt": [
-    []
-   ],
    "web-nfc/NDEFWriter-document-hidden-manual.https-expected.txt": [
     []
    ],
@@ -260581,6 +260578,24 @@
      {}
     ]
    ],
+   "layout-instability/clip-negative-bottom-margin.html": [
+    [
+     "layout-instability/clip-negative-bottom-margin.html",
+     {}
+    ]
+   ],
+   "layout-instability/composited-element-movement.html": [
+    [
+     "layout-instability/composited-element-movement.html",
+     {}
+    ]
+   ],
+   "layout-instability/fully-clipped-visual-rect.html": [
+    [
+     "layout-instability/fully-clipped-visual-rect.html",
+     {}
+    ]
+   ],
    "layout-instability/idlharness.window.js": [
     [
      "layout-instability/idlharness.window.html",
@@ -260598,6 +260613,24 @@
      }
     ]
    ],
+   "layout-instability/ignore-fixed-and-sticky.html": [
+    [
+     "layout-instability/ignore-fixed-and-sticky.html",
+     {}
+    ]
+   ],
+   "layout-instability/local-shift-without-viewport-shift.html": [
+    [
+     "layout-instability/local-shift-without-viewport-shift.html",
+     {}
+    ]
+   ],
+   "layout-instability/multi-clip-visual-rect.html": [
+    [
+     "layout-instability/multi-clip-visual-rect.html",
+     {}
+    ]
+   ],
    "layout-instability/observe-layout-shift.html": [
     [
      "layout-instability/observe-layout-shift.html",
@@ -260606,12 +260639,42 @@
      }
     ]
    ],
+   "layout-instability/partially-clipped-visual-rect.html": [
+    [
+     "layout-instability/partially-clipped-visual-rect.html",
+     {}
+    ]
+   ],
    "layout-instability/rtl-distance.html": [
     [
      "layout-instability/rtl-distance.html",
      {}
     ]
    ],
+   "layout-instability/shift-into-viewport.html": [
+    [
+     "layout-instability/shift-into-viewport.html",
+     {}
+    ]
+   ],
+   "layout-instability/shift-outside-viewport.html": [
+    [
+     "layout-instability/shift-outside-viewport.html",
+     {}
+    ]
+   ],
+   "layout-instability/shift-while-scrolled.html": [
+    [
+     "layout-instability/shift-while-scrolled.html",
+     {}
+    ]
+   ],
+   "layout-instability/shift-with-counterscroll.html": [
+    [
+     "layout-instability/shift-with-counterscroll.html",
+     {}
+    ]
+   ],
    "layout-instability/simple-block-movement.html": [
     [
      "layout-instability/simple-block-movement.html",
@@ -445138,7 +445201,7 @@
    "testharness"
   ],
   "fetch/metadata/portal.tentative.https.sub.html": [
-   "b9128944733b0301606a57087cb40c143d3cb99a",
+   "4e50b6b24b356dac6c6c7f5b7d17b7f4f01431c1",
    "testharness"
   ],
   "fetch/metadata/prefetch.tentative.https.sub.html": [
@@ -468914,7 +468977,7 @@
    "support"
   ],
   "interfaces/WebCryptoAPI.idl": [
-   "0b515fc12e701b4b20c616e2ae4ce29f50a205b6",
+   "fecb3b72d3afea791a0f0648bcefa6dc014fe330",
    "support"
   ],
   "interfaces/WebIDL.idl": [
@@ -469386,7 +469449,7 @@
    "support"
   ],
   "interfaces/web-nfc.idl": [
-   "340dab647d6c5156ada9af62b77f419063aeefa7",
+   "455720c641e69af2e68b9c9a0eb2cbd740267e26",
    "support"
   ],
   "interfaces/web-share.idl": [
@@ -470025,14 +470088,42 @@
    "dabc8068931ff3b15eb4b80481ed2102a7725a62",
    "testharness"
   ],
+  "layout-instability/clip-negative-bottom-margin.html": [
+   "2c329d9fcd66d86bf8c350c2ee419e28ef6596f4",
+   "testharness"
+  ],
+  "layout-instability/composited-element-movement.html": [
+   "c9906903358d8c2b94877f536e733320d0ada75b",
+   "testharness"
+  ],
+  "layout-instability/fully-clipped-visual-rect.html": [
+   "bfd74a2407e2d91cdb2a13b86945b040aeb6dcca",
+   "testharness"
+  ],
   "layout-instability/idlharness.window.js": [
    "7d97446a57808576722a823f604effa94bb95e76",
    "testharness"
   ],
+  "layout-instability/ignore-fixed-and-sticky.html": [
+   "1b39dc9e6e9320a7932986d3a0063b7a4e556129",
+   "testharness"
+  ],
+  "layout-instability/local-shift-without-viewport-shift.html": [
+   "37729f1c13c298b5a2d95c46b7a4f199d8943022",
+   "testharness"
+  ],
+  "layout-instability/multi-clip-visual-rect.html": [
+   "36475d4c826c11807e9c0a7fbf4457c33c92c2c0",
+   "testharness"
+  ],
   "layout-instability/observe-layout-shift.html": [
    "1c35fe2aa234c96fce8798e6a1c35362f418e6f1",
    "testharness"
   ],
+  "layout-instability/partially-clipped-visual-rect.html": [
+   "3b18b98dd93312c37b9e2f25918df50266a09243",
+   "testharness"
+  ],
   "layout-instability/resources/slow-image.py": [
    "ee7988c551f6429eea2b929af083ad30cbd5c73d",
    "support"
@@ -470045,6 +470136,22 @@
    "a6f0040e950649015119ecacc465e75303b5ff9b",
    "testharness"
   ],
+  "layout-instability/shift-into-viewport.html": [
+   "6ace93ad54c2f6b173df060e39be097eca4b6867",
+   "testharness"
+  ],
+  "layout-instability/shift-outside-viewport.html": [
+   "49242913760a76d124eac0eeb3de8bb4e8eb8a19",
+   "testharness"
+  ],
+  "layout-instability/shift-while-scrolled.html": [
+   "88eeedea87782939d0191c64f7771e7e4f8828c3",
+   "testharness"
+  ],
+  "layout-instability/shift-with-counterscroll.html": [
+   "8ad1a463443ef1b6b8b8ca06a9435157cb38a1f5",
+   "testharness"
+  ],
   "layout-instability/simple-block-movement.html": [
    "0f9257e27ce5d553d8176f084e537e47b331416e",
    "testharness"
@@ -512262,7 +512369,7 @@
    "support"
   ],
   "tools/wptrunner/wptrunner/browsers/servodriver.py": [
-   "ea345efa44fd4ec57cde5abc90c92d998c4a6c73",
+   "2953de18174ef75d505db0b8d518fe3339f7065e",
    "support"
   ],
   "tools/wptrunner/wptrunner/browsers/webkit.py": [
@@ -518297,10 +518404,6 @@
    "15ef6e466aab05e289cc93bb678fbda02ce253f7",
    "testharness"
   ],
-  "web-nfc/NDEFRecord_constructor.https-expected.txt": [
-   "f35d1e20d72c88b2827ca7fa9c35d817ef36d9bf",
-   "support"
-  ],
   "web-nfc/NDEFRecord_constructor.https.html": [
    "ea7b5e4950866ff7eeed5fd4ed127460b5ef6c33",
    "testharness"
diff --git a/third_party/blink/web_tests/external/wpt/css/css-masking/animations/mask-position-interpolation-expected.txt b/third_party/blink/web_tests/external/wpt/css/css-masking/animations/mask-position-interpolation-expected.txt
new file mode 100644
index 0000000..531d5bc
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-masking/animations/mask-position-interpolation-expected.txt
@@ -0,0 +1,200 @@
+This is a testharness.js-based test.
+Found 196 tests; 0 PASS, 196 FAIL, 0 TIMEOUT, 0 NOTRUN.
+FAIL CSS Transitions: property <mask-position> from neutral to [20px 20px] at (-0.25) should be [7.5px 32.5px] assert_true: 'to' value should be supported expected true got false
+FAIL CSS Transitions: property <mask-position> from neutral to [20px 20px] at (0) should be [10px 30px] assert_true: 'to' value should be supported expected true got false
+FAIL CSS Transitions: property <mask-position> from neutral to [20px 20px] at (0.25) should be [12.5px 27.5px] assert_true: 'to' value should be supported expected true got false
+FAIL CSS Transitions: property <mask-position> from neutral to [20px 20px] at (0.5) should be [15px 25px] assert_true: 'to' value should be supported expected true got false
+FAIL CSS Transitions: property <mask-position> from neutral to [20px 20px] at (0.75) should be [17.5px 22.5px] assert_true: 'to' value should be supported expected true got false
+FAIL CSS Transitions: property <mask-position> from neutral to [20px 20px] at (1) should be [20px 20px] assert_true: 'to' value should be supported expected true got false
+FAIL CSS Transitions: property <mask-position> from neutral to [20px 20px] at (1.25) should be [22.5px 17.5px] assert_true: 'to' value should be supported expected true got false
+FAIL CSS Transitions with transition: all: property <mask-position> from neutral to [20px 20px] at (-0.25) should be [7.5px 32.5px] assert_true: 'to' value should be supported expected true got false
+FAIL CSS Transitions with transition: all: property <mask-position> from neutral to [20px 20px] at (0) should be [10px 30px] assert_true: 'to' value should be supported expected true got false
+FAIL CSS Transitions with transition: all: property <mask-position> from neutral to [20px 20px] at (0.25) should be [12.5px 27.5px] assert_true: 'to' value should be supported expected true got false
+FAIL CSS Transitions with transition: all: property <mask-position> from neutral to [20px 20px] at (0.5) should be [15px 25px] assert_true: 'to' value should be supported expected true got false
+FAIL CSS Transitions with transition: all: property <mask-position> from neutral to [20px 20px] at (0.75) should be [17.5px 22.5px] assert_true: 'to' value should be supported expected true got false
+FAIL CSS Transitions with transition: all: property <mask-position> from neutral to [20px 20px] at (1) should be [20px 20px] assert_true: 'to' value should be supported expected true got false
+FAIL CSS Transitions with transition: all: property <mask-position> from neutral to [20px 20px] at (1.25) should be [22.5px 17.5px] assert_true: 'to' value should be supported expected true got false
+FAIL CSS Animations: property <mask-position> from neutral to [20px 20px] at (-0.25) should be [7.5px 32.5px] assert_true: 'to' value should be supported expected true got false
+FAIL CSS Animations: property <mask-position> from neutral to [20px 20px] at (0) should be [10px 30px] assert_true: 'to' value should be supported expected true got false
+FAIL CSS Animations: property <mask-position> from neutral to [20px 20px] at (0.25) should be [12.5px 27.5px] assert_true: 'to' value should be supported expected true got false
+FAIL CSS Animations: property <mask-position> from neutral to [20px 20px] at (0.5) should be [15px 25px] assert_true: 'to' value should be supported expected true got false
+FAIL CSS Animations: property <mask-position> from neutral to [20px 20px] at (0.75) should be [17.5px 22.5px] assert_true: 'to' value should be supported expected true got false
+FAIL CSS Animations: property <mask-position> from neutral to [20px 20px] at (1) should be [20px 20px] assert_true: 'to' value should be supported expected true got false
+FAIL CSS Animations: property <mask-position> from neutral to [20px 20px] at (1.25) should be [22.5px 17.5px] assert_true: 'to' value should be supported expected true got false
+FAIL Web Animations: property <mask-position> from neutral to [20px 20px] at (-0.25) should be [7.5px 32.5px] assert_true: 'to' value should be supported expected true got false
+FAIL Web Animations: property <mask-position> from neutral to [20px 20px] at (0) should be [10px 30px] assert_true: 'to' value should be supported expected true got false
+FAIL Web Animations: property <mask-position> from neutral to [20px 20px] at (0.25) should be [12.5px 27.5px] assert_true: 'to' value should be supported expected true got false
+FAIL Web Animations: property <mask-position> from neutral to [20px 20px] at (0.5) should be [15px 25px] assert_true: 'to' value should be supported expected true got false
+FAIL Web Animations: property <mask-position> from neutral to [20px 20px] at (0.75) should be [17.5px 22.5px] assert_true: 'to' value should be supported expected true got false
+FAIL Web Animations: property <mask-position> from neutral to [20px 20px] at (1) should be [20px 20px] assert_true: 'to' value should be supported expected true got false
+FAIL Web Animations: property <mask-position> from neutral to [20px 20px] at (1.25) should be [22.5px 17.5px] assert_true: 'to' value should be supported expected true got false
+FAIL CSS Transitions: property <mask-position> from [initial] to [20px 20px] at (-0.25) should be [calc(0% - 5px) calc(0% - 5px)] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Transitions: property <mask-position> from [initial] to [20px 20px] at (0) should be [0% 0%] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Transitions: property <mask-position> from [initial] to [20px 20px] at (0.25) should be [calc(0% + 5px) calc(0% + 5px)] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Transitions: property <mask-position> from [initial] to [20px 20px] at (0.5) should be [calc(0% + 10px) calc(0% + 10px)] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Transitions: property <mask-position> from [initial] to [20px 20px] at (0.75) should be [calc(0% + 15px) calc(0% + 15px)] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Transitions: property <mask-position> from [initial] to [20px 20px] at (1) should be [calc(0% + 20px) calc(0% + 20px)] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Transitions: property <mask-position> from [initial] to [20px 20px] at (1.25) should be [calc(0% + 25px) calc(0% + 25px)] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Transitions with transition: all: property <mask-position> from [initial] to [20px 20px] at (-0.25) should be [calc(0% - 5px) calc(0% - 5px)] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Transitions with transition: all: property <mask-position> from [initial] to [20px 20px] at (0) should be [0% 0%] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Transitions with transition: all: property <mask-position> from [initial] to [20px 20px] at (0.25) should be [calc(0% + 5px) calc(0% + 5px)] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Transitions with transition: all: property <mask-position> from [initial] to [20px 20px] at (0.5) should be [calc(0% + 10px) calc(0% + 10px)] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Transitions with transition: all: property <mask-position> from [initial] to [20px 20px] at (0.75) should be [calc(0% + 15px) calc(0% + 15px)] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Transitions with transition: all: property <mask-position> from [initial] to [20px 20px] at (1) should be [calc(0% + 20px) calc(0% + 20px)] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Transitions with transition: all: property <mask-position> from [initial] to [20px 20px] at (1.25) should be [calc(0% + 25px) calc(0% + 25px)] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Animations: property <mask-position> from [initial] to [20px 20px] at (-0.25) should be [calc(0% - 5px) calc(0% - 5px)] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Animations: property <mask-position> from [initial] to [20px 20px] at (0) should be [0% 0%] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Animations: property <mask-position> from [initial] to [20px 20px] at (0.25) should be [calc(0% + 5px) calc(0% + 5px)] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Animations: property <mask-position> from [initial] to [20px 20px] at (0.5) should be [calc(0% + 10px) calc(0% + 10px)] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Animations: property <mask-position> from [initial] to [20px 20px] at (0.75) should be [calc(0% + 15px) calc(0% + 15px)] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Animations: property <mask-position> from [initial] to [20px 20px] at (1) should be [calc(0% + 20px) calc(0% + 20px)] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Animations: property <mask-position> from [initial] to [20px 20px] at (1.25) should be [calc(0% + 25px) calc(0% + 25px)] assert_true: 'from' value should be supported expected true got false
+FAIL Web Animations: property <mask-position> from [initial] to [20px 20px] at (-0.25) should be [calc(0% - 5px) calc(0% - 5px)] assert_true: 'from' value should be supported expected true got false
+FAIL Web Animations: property <mask-position> from [initial] to [20px 20px] at (0) should be [0% 0%] assert_true: 'from' value should be supported expected true got false
+FAIL Web Animations: property <mask-position> from [initial] to [20px 20px] at (0.25) should be [calc(0% + 5px) calc(0% + 5px)] assert_true: 'from' value should be supported expected true got false
+FAIL Web Animations: property <mask-position> from [initial] to [20px 20px] at (0.5) should be [calc(0% + 10px) calc(0% + 10px)] assert_true: 'from' value should be supported expected true got false
+FAIL Web Animations: property <mask-position> from [initial] to [20px 20px] at (0.75) should be [calc(0% + 15px) calc(0% + 15px)] assert_true: 'from' value should be supported expected true got false
+FAIL Web Animations: property <mask-position> from [initial] to [20px 20px] at (1) should be [calc(0% + 20px) calc(0% + 20px)] assert_true: 'from' value should be supported expected true got false
+FAIL Web Animations: property <mask-position> from [initial] to [20px 20px] at (1.25) should be [calc(0% + 25px) calc(0% + 25px)] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Transitions: property <mask-position> from [inherit] to [20px 20px] at (-0.25) should be [32.5px 7.5px] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Transitions: property <mask-position> from [inherit] to [20px 20px] at (0) should be [30px 10px] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Transitions: property <mask-position> from [inherit] to [20px 20px] at (0.25) should be [27.5px 12.5px] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Transitions: property <mask-position> from [inherit] to [20px 20px] at (0.5) should be [25px 15px] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Transitions: property <mask-position> from [inherit] to [20px 20px] at (0.75) should be [22.5px 17.5px] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Transitions: property <mask-position> from [inherit] to [20px 20px] at (1) should be [20px 20px] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Transitions: property <mask-position> from [inherit] to [20px 20px] at (1.25) should be [17.5px 22.5px] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Transitions with transition: all: property <mask-position> from [inherit] to [20px 20px] at (-0.25) should be [32.5px 7.5px] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Transitions with transition: all: property <mask-position> from [inherit] to [20px 20px] at (0) should be [30px 10px] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Transitions with transition: all: property <mask-position> from [inherit] to [20px 20px] at (0.25) should be [27.5px 12.5px] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Transitions with transition: all: property <mask-position> from [inherit] to [20px 20px] at (0.5) should be [25px 15px] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Transitions with transition: all: property <mask-position> from [inherit] to [20px 20px] at (0.75) should be [22.5px 17.5px] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Transitions with transition: all: property <mask-position> from [inherit] to [20px 20px] at (1) should be [20px 20px] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Transitions with transition: all: property <mask-position> from [inherit] to [20px 20px] at (1.25) should be [17.5px 22.5px] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Animations: property <mask-position> from [inherit] to [20px 20px] at (-0.25) should be [32.5px 7.5px] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Animations: property <mask-position> from [inherit] to [20px 20px] at (0) should be [30px 10px] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Animations: property <mask-position> from [inherit] to [20px 20px] at (0.25) should be [27.5px 12.5px] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Animations: property <mask-position> from [inherit] to [20px 20px] at (0.5) should be [25px 15px] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Animations: property <mask-position> from [inherit] to [20px 20px] at (0.75) should be [22.5px 17.5px] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Animations: property <mask-position> from [inherit] to [20px 20px] at (1) should be [20px 20px] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Animations: property <mask-position> from [inherit] to [20px 20px] at (1.25) should be [17.5px 22.5px] assert_true: 'from' value should be supported expected true got false
+FAIL Web Animations: property <mask-position> from [inherit] to [20px 20px] at (-0.25) should be [32.5px 7.5px] assert_true: 'from' value should be supported expected true got false
+FAIL Web Animations: property <mask-position> from [inherit] to [20px 20px] at (0) should be [30px 10px] assert_true: 'from' value should be supported expected true got false
+FAIL Web Animations: property <mask-position> from [inherit] to [20px 20px] at (0.25) should be [27.5px 12.5px] assert_true: 'from' value should be supported expected true got false
+FAIL Web Animations: property <mask-position> from [inherit] to [20px 20px] at (0.5) should be [25px 15px] assert_true: 'from' value should be supported expected true got false
+FAIL Web Animations: property <mask-position> from [inherit] to [20px 20px] at (0.75) should be [22.5px 17.5px] assert_true: 'from' value should be supported expected true got false
+FAIL Web Animations: property <mask-position> from [inherit] to [20px 20px] at (1) should be [20px 20px] assert_true: 'from' value should be supported expected true got false
+FAIL Web Animations: property <mask-position> from [inherit] to [20px 20px] at (1.25) should be [17.5px 22.5px] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Transitions: property <mask-position> from [unset] to [20px 20px] at (-0.25) should be [calc(0% - 5px) calc(0% - 5px)] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Transitions: property <mask-position> from [unset] to [20px 20px] at (0) should be [0% 0%] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Transitions: property <mask-position> from [unset] to [20px 20px] at (0.25) should be [calc(0% + 5px) calc(0% + 5px)] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Transitions: property <mask-position> from [unset] to [20px 20px] at (0.5) should be [calc(0% + 10px) calc(0% + 10px)] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Transitions: property <mask-position> from [unset] to [20px 20px] at (0.75) should be [calc(0% + 15px) calc(0% + 15px)] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Transitions: property <mask-position> from [unset] to [20px 20px] at (1) should be [calc(0% + 20px) calc(0% + 20px)] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Transitions: property <mask-position> from [unset] to [20px 20px] at (1.25) should be [calc(0% + 25px) calc(0% + 25px)] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Transitions with transition: all: property <mask-position> from [unset] to [20px 20px] at (-0.25) should be [calc(0% - 5px) calc(0% - 5px)] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Transitions with transition: all: property <mask-position> from [unset] to [20px 20px] at (0) should be [0% 0%] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Transitions with transition: all: property <mask-position> from [unset] to [20px 20px] at (0.25) should be [calc(0% + 5px) calc(0% + 5px)] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Transitions with transition: all: property <mask-position> from [unset] to [20px 20px] at (0.5) should be [calc(0% + 10px) calc(0% + 10px)] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Transitions with transition: all: property <mask-position> from [unset] to [20px 20px] at (0.75) should be [calc(0% + 15px) calc(0% + 15px)] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Transitions with transition: all: property <mask-position> from [unset] to [20px 20px] at (1) should be [calc(0% + 20px) calc(0% + 20px)] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Transitions with transition: all: property <mask-position> from [unset] to [20px 20px] at (1.25) should be [calc(0% + 25px) calc(0% + 25px)] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Animations: property <mask-position> from [unset] to [20px 20px] at (-0.25) should be [calc(0% - 5px) calc(0% - 5px)] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Animations: property <mask-position> from [unset] to [20px 20px] at (0) should be [0% 0%] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Animations: property <mask-position> from [unset] to [20px 20px] at (0.25) should be [calc(0% + 5px) calc(0% + 5px)] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Animations: property <mask-position> from [unset] to [20px 20px] at (0.5) should be [calc(0% + 10px) calc(0% + 10px)] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Animations: property <mask-position> from [unset] to [20px 20px] at (0.75) should be [calc(0% + 15px) calc(0% + 15px)] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Animations: property <mask-position> from [unset] to [20px 20px] at (1) should be [calc(0% + 20px) calc(0% + 20px)] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Animations: property <mask-position> from [unset] to [20px 20px] at (1.25) should be [calc(0% + 25px) calc(0% + 25px)] assert_true: 'from' value should be supported expected true got false
+FAIL Web Animations: property <mask-position> from [unset] to [20px 20px] at (-0.25) should be [calc(0% - 5px) calc(0% - 5px)] assert_true: 'from' value should be supported expected true got false
+FAIL Web Animations: property <mask-position> from [unset] to [20px 20px] at (0) should be [0% 0%] assert_true: 'from' value should be supported expected true got false
+FAIL Web Animations: property <mask-position> from [unset] to [20px 20px] at (0.25) should be [calc(0% + 5px) calc(0% + 5px)] assert_true: 'from' value should be supported expected true got false
+FAIL Web Animations: property <mask-position> from [unset] to [20px 20px] at (0.5) should be [calc(0% + 10px) calc(0% + 10px)] assert_true: 'from' value should be supported expected true got false
+FAIL Web Animations: property <mask-position> from [unset] to [20px 20px] at (0.75) should be [calc(0% + 15px) calc(0% + 15px)] assert_true: 'from' value should be supported expected true got false
+FAIL Web Animations: property <mask-position> from [unset] to [20px 20px] at (1) should be [calc(0% + 20px) calc(0% + 20px)] assert_true: 'from' value should be supported expected true got false
+FAIL Web Animations: property <mask-position> from [unset] to [20px 20px] at (1.25) should be [calc(0% + 25px) calc(0% + 25px)] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Transitions: property <mask-position> from [0px 0px, 0px 0px, 0px 0px, 0px 0px] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (-0.25) should be [-20px -20px, -20px -20px, -20px -20px, -20px -20px] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Transitions: property <mask-position> from [0px 0px, 0px 0px, 0px 0px, 0px 0px] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0) should be [  0px   0px,   0px   0px,   0px   0px,   0px   0px] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Transitions: property <mask-position> from [0px 0px, 0px 0px, 0px 0px, 0px 0px] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0.25) should be [ 20px  20px,  20px  20px,  20px  20px,  20px  20px] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Transitions: property <mask-position> from [0px 0px, 0px 0px, 0px 0px, 0px 0px] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0.5) should be [ 40px  40px,  40px  40px,  40px  40px,  40px  40px] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Transitions: property <mask-position> from [0px 0px, 0px 0px, 0px 0px, 0px 0px] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0.75) should be [ 60px  60px,  60px  60px,  60px  60px,  60px  60px] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Transitions: property <mask-position> from [0px 0px, 0px 0px, 0px 0px, 0px 0px] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (1) should be [ 80px  80px,  80px  80px,  80px  80px,  80px  80px] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Transitions: property <mask-position> from [0px 0px, 0px 0px, 0px 0px, 0px 0px] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (1.25) should be [100px 100px, 100px 100px, 100px 100px, 100px 100px] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Transitions with transition: all: property <mask-position> from [0px 0px, 0px 0px, 0px 0px, 0px 0px] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (-0.25) should be [-20px -20px, -20px -20px, -20px -20px, -20px -20px] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Transitions with transition: all: property <mask-position> from [0px 0px, 0px 0px, 0px 0px, 0px 0px] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0) should be [  0px   0px,   0px   0px,   0px   0px,   0px   0px] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Transitions with transition: all: property <mask-position> from [0px 0px, 0px 0px, 0px 0px, 0px 0px] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0.25) should be [ 20px  20px,  20px  20px,  20px  20px,  20px  20px] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Transitions with transition: all: property <mask-position> from [0px 0px, 0px 0px, 0px 0px, 0px 0px] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0.5) should be [ 40px  40px,  40px  40px,  40px  40px,  40px  40px] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Transitions with transition: all: property <mask-position> from [0px 0px, 0px 0px, 0px 0px, 0px 0px] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0.75) should be [ 60px  60px,  60px  60px,  60px  60px,  60px  60px] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Transitions with transition: all: property <mask-position> from [0px 0px, 0px 0px, 0px 0px, 0px 0px] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (1) should be [ 80px  80px,  80px  80px,  80px  80px,  80px  80px] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Transitions with transition: all: property <mask-position> from [0px 0px, 0px 0px, 0px 0px, 0px 0px] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (1.25) should be [100px 100px, 100px 100px, 100px 100px, 100px 100px] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Animations: property <mask-position> from [0px 0px, 0px 0px, 0px 0px, 0px 0px] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (-0.25) should be [-20px -20px, -20px -20px, -20px -20px, -20px -20px] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Animations: property <mask-position> from [0px 0px, 0px 0px, 0px 0px, 0px 0px] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0) should be [  0px   0px,   0px   0px,   0px   0px,   0px   0px] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Animations: property <mask-position> from [0px 0px, 0px 0px, 0px 0px, 0px 0px] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0.25) should be [ 20px  20px,  20px  20px,  20px  20px,  20px  20px] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Animations: property <mask-position> from [0px 0px, 0px 0px, 0px 0px, 0px 0px] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0.5) should be [ 40px  40px,  40px  40px,  40px  40px,  40px  40px] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Animations: property <mask-position> from [0px 0px, 0px 0px, 0px 0px, 0px 0px] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0.75) should be [ 60px  60px,  60px  60px,  60px  60px,  60px  60px] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Animations: property <mask-position> from [0px 0px, 0px 0px, 0px 0px, 0px 0px] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (1) should be [ 80px  80px,  80px  80px,  80px  80px,  80px  80px] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Animations: property <mask-position> from [0px 0px, 0px 0px, 0px 0px, 0px 0px] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (1.25) should be [100px 100px, 100px 100px, 100px 100px, 100px 100px] assert_true: 'from' value should be supported expected true got false
+FAIL Web Animations: property <mask-position> from [0px 0px, 0px 0px, 0px 0px, 0px 0px] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (-0.25) should be [-20px -20px, -20px -20px, -20px -20px, -20px -20px] assert_true: 'from' value should be supported expected true got false
+FAIL Web Animations: property <mask-position> from [0px 0px, 0px 0px, 0px 0px, 0px 0px] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0) should be [  0px   0px,   0px   0px,   0px   0px,   0px   0px] assert_true: 'from' value should be supported expected true got false
+FAIL Web Animations: property <mask-position> from [0px 0px, 0px 0px, 0px 0px, 0px 0px] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0.25) should be [ 20px  20px,  20px  20px,  20px  20px,  20px  20px] assert_true: 'from' value should be supported expected true got false
+FAIL Web Animations: property <mask-position> from [0px 0px, 0px 0px, 0px 0px, 0px 0px] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0.5) should be [ 40px  40px,  40px  40px,  40px  40px,  40px  40px] assert_true: 'from' value should be supported expected true got false
+FAIL Web Animations: property <mask-position> from [0px 0px, 0px 0px, 0px 0px, 0px 0px] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0.75) should be [ 60px  60px,  60px  60px,  60px  60px,  60px  60px] assert_true: 'from' value should be supported expected true got false
+FAIL Web Animations: property <mask-position> from [0px 0px, 0px 0px, 0px 0px, 0px 0px] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (1) should be [ 80px  80px,  80px  80px,  80px  80px,  80px  80px] assert_true: 'from' value should be supported expected true got false
+FAIL Web Animations: property <mask-position> from [0px 0px, 0px 0px, 0px 0px, 0px 0px] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (1.25) should be [100px 100px, 100px 100px, 100px 100px, 100px 100px] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Transitions: property <mask-position> from [top 0px left 0px] to [left 80px top 80px] at (-0.25) should be [-20px -20px] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Transitions: property <mask-position> from [top 0px left 0px] to [left 80px top 80px] at (0) should be [  0px   0px] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Transitions: property <mask-position> from [top 0px left 0px] to [left 80px top 80px] at (0.25) should be [ 20px  20px] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Transitions: property <mask-position> from [top 0px left 0px] to [left 80px top 80px] at (0.5) should be [ 40px  40px] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Transitions: property <mask-position> from [top 0px left 0px] to [left 80px top 80px] at (0.75) should be [ 60px  60px] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Transitions: property <mask-position> from [top 0px left 0px] to [left 80px top 80px] at (1) should be [ 80px  80px] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Transitions: property <mask-position> from [top 0px left 0px] to [left 80px top 80px] at (1.25) should be [100px 100px] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Transitions with transition: all: property <mask-position> from [top 0px left 0px] to [left 80px top 80px] at (-0.25) should be [-20px -20px] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Transitions with transition: all: property <mask-position> from [top 0px left 0px] to [left 80px top 80px] at (0) should be [  0px   0px] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Transitions with transition: all: property <mask-position> from [top 0px left 0px] to [left 80px top 80px] at (0.25) should be [ 20px  20px] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Transitions with transition: all: property <mask-position> from [top 0px left 0px] to [left 80px top 80px] at (0.5) should be [ 40px  40px] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Transitions with transition: all: property <mask-position> from [top 0px left 0px] to [left 80px top 80px] at (0.75) should be [ 60px  60px] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Transitions with transition: all: property <mask-position> from [top 0px left 0px] to [left 80px top 80px] at (1) should be [ 80px  80px] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Transitions with transition: all: property <mask-position> from [top 0px left 0px] to [left 80px top 80px] at (1.25) should be [100px 100px] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Animations: property <mask-position> from [top 0px left 0px] to [left 80px top 80px] at (-0.25) should be [-20px -20px] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Animations: property <mask-position> from [top 0px left 0px] to [left 80px top 80px] at (0) should be [  0px   0px] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Animations: property <mask-position> from [top 0px left 0px] to [left 80px top 80px] at (0.25) should be [ 20px  20px] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Animations: property <mask-position> from [top 0px left 0px] to [left 80px top 80px] at (0.5) should be [ 40px  40px] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Animations: property <mask-position> from [top 0px left 0px] to [left 80px top 80px] at (0.75) should be [ 60px  60px] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Animations: property <mask-position> from [top 0px left 0px] to [left 80px top 80px] at (1) should be [ 80px  80px] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Animations: property <mask-position> from [top 0px left 0px] to [left 80px top 80px] at (1.25) should be [100px 100px] assert_true: 'from' value should be supported expected true got false
+FAIL Web Animations: property <mask-position> from [top 0px left 0px] to [left 80px top 80px] at (-0.25) should be [-20px -20px] assert_true: 'from' value should be supported expected true got false
+FAIL Web Animations: property <mask-position> from [top 0px left 0px] to [left 80px top 80px] at (0) should be [  0px   0px] assert_true: 'from' value should be supported expected true got false
+FAIL Web Animations: property <mask-position> from [top 0px left 0px] to [left 80px top 80px] at (0.25) should be [ 20px  20px] assert_true: 'from' value should be supported expected true got false
+FAIL Web Animations: property <mask-position> from [top 0px left 0px] to [left 80px top 80px] at (0.5) should be [ 40px  40px] assert_true: 'from' value should be supported expected true got false
+FAIL Web Animations: property <mask-position> from [top 0px left 0px] to [left 80px top 80px] at (0.75) should be [ 60px  60px] assert_true: 'from' value should be supported expected true got false
+FAIL Web Animations: property <mask-position> from [top 0px left 0px] to [left 80px top 80px] at (1) should be [ 80px  80px] assert_true: 'from' value should be supported expected true got false
+FAIL Web Animations: property <mask-position> from [top 0px left 0px] to [left 80px top 80px] at (1.25) should be [100px 100px] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Transitions: property <mask-position> from [0px 0px, 80px 0px] to [40px 40px, 80px 80px, 0px 80px] at (-0.25) should be [-10px -10px, 80px -20px, 0px -20px, 90px -10px, -20px -20px, 100px -20px] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Transitions: property <mask-position> from [0px 0px, 80px 0px] to [40px 40px, 80px 80px, 0px 80px] at (0) should be [  0px   0px, 80px   0px, 0px   0px, 80px   0px,   0px   0px,  80px   0px] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Transitions: property <mask-position> from [0px 0px, 80px 0px] to [40px 40px, 80px 80px, 0px 80px] at (0.25) should be [ 10px  10px, 80px  20px, 0px  20px, 70px  10px,  20px  20px,  60px  20px] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Transitions: property <mask-position> from [0px 0px, 80px 0px] to [40px 40px, 80px 80px, 0px 80px] at (0.5) should be [ 20px  20px, 80px  40px, 0px  40px, 60px  20px,  40px  40px,  40px  40px] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Transitions: property <mask-position> from [0px 0px, 80px 0px] to [40px 40px, 80px 80px, 0px 80px] at (0.75) should be [ 30px  30px, 80px  60px, 0px  60px, 50px  30px,  60px  60px,  20px  60px] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Transitions: property <mask-position> from [0px 0px, 80px 0px] to [40px 40px, 80px 80px, 0px 80px] at (1) should be [ 40px  40px, 80px  80px, 0px  80px, 40px  40px,  80px  80px,   0px  80px] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Transitions: property <mask-position> from [0px 0px, 80px 0px] to [40px 40px, 80px 80px, 0px 80px] at (1.25) should be [ 50px  50px, 80px 100px, 0px 100px, 30px  50px, 100px 100px, -20px 100px] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Transitions with transition: all: property <mask-position> from [0px 0px, 80px 0px] to [40px 40px, 80px 80px, 0px 80px] at (-0.25) should be [-10px -10px, 80px -20px, 0px -20px, 90px -10px, -20px -20px, 100px -20px] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Transitions with transition: all: property <mask-position> from [0px 0px, 80px 0px] to [40px 40px, 80px 80px, 0px 80px] at (0) should be [  0px   0px, 80px   0px, 0px   0px, 80px   0px,   0px   0px,  80px   0px] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Transitions with transition: all: property <mask-position> from [0px 0px, 80px 0px] to [40px 40px, 80px 80px, 0px 80px] at (0.25) should be [ 10px  10px, 80px  20px, 0px  20px, 70px  10px,  20px  20px,  60px  20px] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Transitions with transition: all: property <mask-position> from [0px 0px, 80px 0px] to [40px 40px, 80px 80px, 0px 80px] at (0.5) should be [ 20px  20px, 80px  40px, 0px  40px, 60px  20px,  40px  40px,  40px  40px] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Transitions with transition: all: property <mask-position> from [0px 0px, 80px 0px] to [40px 40px, 80px 80px, 0px 80px] at (0.75) should be [ 30px  30px, 80px  60px, 0px  60px, 50px  30px,  60px  60px,  20px  60px] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Transitions with transition: all: property <mask-position> from [0px 0px, 80px 0px] to [40px 40px, 80px 80px, 0px 80px] at (1) should be [ 40px  40px, 80px  80px, 0px  80px, 40px  40px,  80px  80px,   0px  80px] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Transitions with transition: all: property <mask-position> from [0px 0px, 80px 0px] to [40px 40px, 80px 80px, 0px 80px] at (1.25) should be [ 50px  50px, 80px 100px, 0px 100px, 30px  50px, 100px 100px, -20px 100px] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Animations: property <mask-position> from [0px 0px, 80px 0px] to [40px 40px, 80px 80px, 0px 80px] at (-0.25) should be [-10px -10px, 80px -20px, 0px -20px, 90px -10px, -20px -20px, 100px -20px] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Animations: property <mask-position> from [0px 0px, 80px 0px] to [40px 40px, 80px 80px, 0px 80px] at (0) should be [  0px   0px, 80px   0px, 0px   0px, 80px   0px,   0px   0px,  80px   0px] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Animations: property <mask-position> from [0px 0px, 80px 0px] to [40px 40px, 80px 80px, 0px 80px] at (0.25) should be [ 10px  10px, 80px  20px, 0px  20px, 70px  10px,  20px  20px,  60px  20px] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Animations: property <mask-position> from [0px 0px, 80px 0px] to [40px 40px, 80px 80px, 0px 80px] at (0.5) should be [ 20px  20px, 80px  40px, 0px  40px, 60px  20px,  40px  40px,  40px  40px] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Animations: property <mask-position> from [0px 0px, 80px 0px] to [40px 40px, 80px 80px, 0px 80px] at (0.75) should be [ 30px  30px, 80px  60px, 0px  60px, 50px  30px,  60px  60px,  20px  60px] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Animations: property <mask-position> from [0px 0px, 80px 0px] to [40px 40px, 80px 80px, 0px 80px] at (1) should be [ 40px  40px, 80px  80px, 0px  80px, 40px  40px,  80px  80px,   0px  80px] assert_true: 'from' value should be supported expected true got false
+FAIL CSS Animations: property <mask-position> from [0px 0px, 80px 0px] to [40px 40px, 80px 80px, 0px 80px] at (1.25) should be [ 50px  50px, 80px 100px, 0px 100px, 30px  50px, 100px 100px, -20px 100px] assert_true: 'from' value should be supported expected true got false
+FAIL Web Animations: property <mask-position> from [0px 0px, 80px 0px] to [40px 40px, 80px 80px, 0px 80px] at (-0.25) should be [-10px -10px, 80px -20px, 0px -20px, 90px -10px, -20px -20px, 100px -20px] assert_true: 'from' value should be supported expected true got false
+FAIL Web Animations: property <mask-position> from [0px 0px, 80px 0px] to [40px 40px, 80px 80px, 0px 80px] at (0) should be [  0px   0px, 80px   0px, 0px   0px, 80px   0px,   0px   0px,  80px   0px] assert_true: 'from' value should be supported expected true got false
+FAIL Web Animations: property <mask-position> from [0px 0px, 80px 0px] to [40px 40px, 80px 80px, 0px 80px] at (0.25) should be [ 10px  10px, 80px  20px, 0px  20px, 70px  10px,  20px  20px,  60px  20px] assert_true: 'from' value should be supported expected true got false
+FAIL Web Animations: property <mask-position> from [0px 0px, 80px 0px] to [40px 40px, 80px 80px, 0px 80px] at (0.5) should be [ 20px  20px, 80px  40px, 0px  40px, 60px  20px,  40px  40px,  40px  40px] assert_true: 'from' value should be supported expected true got false
+FAIL Web Animations: property <mask-position> from [0px 0px, 80px 0px] to [40px 40px, 80px 80px, 0px 80px] at (0.75) should be [ 30px  30px, 80px  60px, 0px  60px, 50px  30px,  60px  60px,  20px  60px] assert_true: 'from' value should be supported expected true got false
+FAIL Web Animations: property <mask-position> from [0px 0px, 80px 0px] to [40px 40px, 80px 80px, 0px 80px] at (1) should be [ 40px  40px, 80px  80px, 0px  80px, 40px  40px,  80px  80px,   0px  80px] assert_true: 'from' value should be supported expected true got false
+FAIL Web Animations: property <mask-position> from [0px 0px, 80px 0px] to [40px 40px, 80px 80px, 0px 80px] at (1.25) should be [ 50px  50px, 80px 100px, 0px 100px, 30px  50px, 100px 100px, -20px 100px] assert_true: 'from' value should be supported expected true got false
+Harness: the test ran to completion.
+
diff --git a/third_party/blink/web_tests/external/wpt/css/css-masking/animations/mask-position-interpolation.html b/third_party/blink/web_tests/external/wpt/css/css-masking/animations/mask-position-interpolation.html
new file mode 100644
index 0000000..d832048
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/css/css-masking/animations/mask-position-interpolation.html
@@ -0,0 +1,146 @@
+<!DOCTYPE html>
+<meta charset="UTF-8">
+<meta charset="UTF-8">
+<title>mask-position-interpolation</title>
+<link rel="help" href="https://drafts.fxtf.org/css-masking-1/#the-mask-position">
+<meta name="assert" content="mask-position supports animation">
+
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/css/support/interpolation-testcommon.js"></script>
+
+<style>
+.container {
+  display: inline-block;
+  border: 2px solid black;
+}
+.parent {
+  mask-position: 30px 10px;
+}
+.target {
+  width: 120px;
+  height: 120px;
+  mask-position: 10px 30px;
+}
+</style>
+
+<body>
+<template id="target-template">
+  <div class="container">
+    <div class="target"></div>
+  </div>
+</template>
+<script>
+// neutral
+test_interpolation({
+  property: 'mask-position',
+  from: neutralKeyframe,
+  to: '20px 20px',
+}, [
+  {at: -0.25, expect: '7.5px 32.5px'},
+  {at: 0, expect: '10px 30px'},
+  {at: 0.25, expect: '12.5px 27.5px'},
+  {at: 0.5, expect: '15px 25px'},
+  {at: 0.75, expect: '17.5px 22.5px'},
+  {at: 1, expect: '20px 20px'},
+  {at: 1.25, expect: '22.5px 17.5px'},
+]);
+
+// initial
+test_interpolation({
+  property: 'mask-position',
+  from: 'initial',
+  to: '20px 20px',
+}, [
+  {at: -0.25, expect: 'calc(0% - 5px) calc(0% - 5px)'},
+  {at: 0, expect: '0% 0%'},
+  {at: 0.25, expect: 'calc(0% + 5px) calc(0% + 5px)'},
+  {at: 0.5, expect: 'calc(0% + 10px) calc(0% + 10px)'},
+  {at: 0.75, expect: 'calc(0% + 15px) calc(0% + 15px)'},
+  {at: 1, expect: 'calc(0% + 20px) calc(0% + 20px)'},
+  {at: 1.25, expect:'calc(0% + 25px) calc(0% + 25px)'},
+]);
+
+// inherit
+test_interpolation({
+  property: 'mask-position',
+  from: 'inherit',
+  to: '20px 20px',
+}, [
+  {at: -0.25, expect: '32.5px 7.5px'},
+  {at: 0, expect: '30px 10px'},
+  {at: 0.25, expect: '27.5px 12.5px'},
+  {at: 0.5, expect: '25px 15px'},
+  {at: 0.75, expect: '22.5px 17.5px'},
+  {at: 1, expect: '20px 20px'},
+  {at: 1.25, expect: '17.5px 22.5px'},
+]);
+
+// unset
+test_interpolation({
+  property: 'mask-position',
+  from: 'unset',
+  to: '20px 20px',
+}, [
+  {at: -0.25, expect: 'calc(0% - 5px) calc(0% - 5px)'},
+  {at: 0, expect: '0% 0%'},
+  {at: 0.25, expect: 'calc(0% + 5px) calc(0% + 5px)'},
+  {at: 0.5, expect: 'calc(0% + 10px) calc(0% + 10px)'},
+  {at: 0.75, expect: 'calc(0% + 15px) calc(0% + 15px)'},
+  {at: 1, expect: 'calc(0% + 20px) calc(0% + 20px)'},
+  {at: 1.25, expect:'calc(0% + 25px) calc(0% + 25px)'},
+]);
+
+// Test equal number of position values as background images.
+test_interpolation({
+  property: 'mask-position',
+  from: '0px 0px, 0px 0px, 0px 0px, 0px 0px',
+  to: '80px 80px, 80px 80px, 80px 80px, 80px 80px',
+}, [
+  {at: -0.25, expect: '-20px -20px, -20px -20px, -20px -20px, -20px -20px'},
+  {at: 0, expect:     '  0px   0px,   0px   0px,   0px   0px,   0px   0px'},
+  {at: 0.25, expect:  ' 20px  20px,  20px  20px,  20px  20px,  20px  20px'},
+  {at: 0.5, expect:   ' 40px  40px,  40px  40px,  40px  40px,  40px  40px'},
+  {at: 0.75, expect:  ' 60px  60px,  60px  60px,  60px  60px,  60px  60px'},
+  {at: 1, expect:     ' 80px  80px,  80px  80px,  80px  80px,  80px  80px'},
+  {at: 1.25, expect:  '100px 100px, 100px 100px, 100px 100px, 100px 100px'},
+]);
+
+// Test single position value repeated over background images.
+test_interpolation({
+  property: 'mask-position',
+  from: 'top 0px left 0px',
+  to: 'left 80px top 80px',
+}, [
+  {at: -0.25, expect: '-20px -20px'},
+  {at: 0, expect:     '  0px   0px'},
+  {at: 0.25, expect:  ' 20px  20px'},
+  {at: 0.5, expect:   ' 40px  40px'},
+  {at: 0.75, expect:  ' 60px  60px'},
+  {at: 1, expect:     ' 80px  80px'},
+  {at: 1.25, expect:  '100px 100px'},
+]);
+
+// Test mismatched numbers of position values.
+test_interpolation({
+  property: 'mask-position',
+  from: '0px 0px, 80px 0px',
+  to: '40px 40px, 80px 80px, 0px 80px',
+}, [
+  {at: -0.25, expect:
+    '-10px -10px, 80px -20px, 0px -20px, 90px -10px, -20px -20px, 100px -20px'},
+  {at: 0, expect:
+    '  0px   0px, 80px   0px, 0px   0px, 80px   0px,   0px   0px,  80px   0px'},
+  {at: 0.25, expect:
+    ' 10px  10px, 80px  20px, 0px  20px, 70px  10px,  20px  20px,  60px  20px'},
+  {at: 0.5, expect:
+    ' 20px  20px, 80px  40px, 0px  40px, 60px  20px,  40px  40px,  40px  40px'},
+  {at: 0.75, expect:
+    ' 30px  30px, 80px  60px, 0px  60px, 50px  30px,  60px  60px,  20px  60px'},
+  {at: 1, expect:
+    ' 40px  40px, 80px  80px, 0px  80px, 40px  40px,  80px  80px,   0px  80px'},
+  {at: 1.25, expect:
+    ' 50px  50px, 80px 100px, 0px 100px, 30px  50px, 100px 100px, -20px 100px'},
+]);
+</script>
+</body>
diff --git a/third_party/blink/web_tests/external/wpt/fetch/metadata/portal.tentative.https.sub.html b/third_party/blink/web_tests/external/wpt/fetch/metadata/portal.tentative.https.sub.html
index b9128944..4e50b6b2 100644
--- a/third_party/blink/web_tests/external/wpt/fetch/metadata/portal.tentative.https.sub.html
+++ b/third_party/blink/web_tests/external/wpt/fetch/metadata/portal.tentative.https.sub.html
@@ -12,6 +12,8 @@
 
   function create_test(host, expectations) {
     async_test(t => {
+      assert_precondition("HTMLPortalElement" in window, "Portals are not supported.");
+
       let p = document.createElement('portal');
       p.addEventListener('message', t.step_func(e => {
         assert_header_equals(e.data, expectations, `{{host}} -> ${host} portal`);
diff --git a/third_party/blink/web_tests/external/wpt/interfaces/WebCryptoAPI.idl b/third_party/blink/web_tests/external/wpt/interfaces/WebCryptoAPI.idl
index 0b515fc..fecb3b72 100644
--- a/third_party/blink/web_tests/external/wpt/interfaces/WebCryptoAPI.idl
+++ b/third_party/blink/web_tests/external/wpt/interfaces/WebCryptoAPI.idl
@@ -4,7 +4,7 @@
 // Source: Web Cryptography API (https://w3c.github.io/webcrypto/Overview.html)
 
 partial interface mixin WindowOrWorkerGlobalScope {
-  readonly attribute Crypto crypto;
+  [SameObject] readonly attribute Crypto crypto;
 };
 
 [Exposed=(Window,Worker)]
@@ -160,7 +160,7 @@
 
 dictionary RsaPssParams : Algorithm {
   // The desired length of the random salt
-  [EnforceRange] required unsigned long saltLength;
+  required [EnforceRange] unsigned long saltLength;
 };
 
 dictionary RsaOaepParams : Algorithm {
@@ -206,7 +206,7 @@
   required BufferSource counter;
   // The length, in bits, of the rightmost part of the counter block
   // that is incremented.
-  [EnforceRange] required octet length;
+  required [EnforceRange] octet length;
 };
 
 dictionary AesKeyAlgorithm : KeyAlgorithm {
@@ -216,12 +216,12 @@
 
 dictionary AesKeyGenParams : Algorithm {
   // The length, in bits, of the key.
-  [EnforceRange] required unsigned short length;
+  required [EnforceRange] unsigned short length;
 };
 
 dictionary AesDerivedKeyParams : Algorithm {
   // The length, in bits, of the key.
-  [EnforceRange] required unsigned short length;
+  required [EnforceRange] unsigned short length;
 };
 
 dictionary AesCbcParams : Algorithm {
@@ -272,6 +272,6 @@
 
 dictionary Pbkdf2Params : Algorithm {
   required BufferSource salt;
-  [EnforceRange] required unsigned long iterations;
+  required [EnforceRange] unsigned long iterations;
   required HashAlgorithmIdentifier hash;
 };
diff --git a/third_party/blink/web_tests/external/wpt/interfaces/web-nfc.idl b/third_party/blink/web_tests/external/wpt/interfaces/web-nfc.idl
index 340dab6..455720c6 100644
--- a/third_party/blink/web_tests/external/wpt/interfaces/web-nfc.idl
+++ b/third_party/blink/web_tests/external/wpt/interfaces/web-nfc.idl
@@ -85,7 +85,7 @@
 };
 
 dictionary NDEFScanOptions {
-  USVString id = "";
+  USVString id;
   USVString recordType;
   USVString mediaType = "";
   AbortSignal? signal;
diff --git a/third_party/blink/web_tests/external/wpt/layout-instability/clip-negative-bottom-margin.html b/third_party/blink/web_tests/external/wpt/layout-instability/clip-negative-bottom-margin.html
new file mode 100644
index 0000000..2c329d9
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/layout-instability/clip-negative-bottom-margin.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html>
+<title>Layout Instability: clip with negative bottom margin</title>
+<link rel="help" href="https://wicg.github.io/layout-instability/" />
+<style>
+
+#scroller { overflow: scroll; width: 200px; height: 500px; }
+#space { height: 1000px; margin-bottom: -500px; }
+#j { width: 150px; height: 150px; background: yellow; }
+
+</style>
+<div id='scroller'>
+  <div id='space'></div>
+  <div id='j'></div>
+</div>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="resources/util.js"></script>
+<script>
+
+promise_test(async () => {
+  const watcher = new ScoreWatcher;
+
+  // Wait for the initial render to complete.
+  await waitForAnimationFrames(2);
+
+  // Increase j's top margin by 100px. Since j is fully clipped by the scroller,
+  // this should not generate a shift.
+  document.querySelector("#j").style.marginTop = "100px";
+
+  await waitForAnimationFrames(3);
+  assert_equals(watcher.score, 0);
+}, "Clip with negative bottom margin.");
+
+</script>
+
+
diff --git a/third_party/blink/web_tests/external/wpt/layout-instability/composited-element-movement.html b/third_party/blink/web_tests/external/wpt/layout-instability/composited-element-movement.html
new file mode 100644
index 0000000..c9906903
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/layout-instability/composited-element-movement.html
@@ -0,0 +1,52 @@
+<!DOCTYPE html>
+<title>Layout Instability: element with compositing layer hint</title>
+<link rel="help" href="https://wicg.github.io/layout-instability/" />
+<style>
+
+#shift {
+  position: relative;
+  width: 500px;
+  height: 200px;
+  background: yellow;
+}
+#container {
+  position: absolute;
+  width: 350px;
+  height: 400px;
+  right: 50px;
+  top: 100px;
+  background: #ccc;
+}
+.promote { will-change: transform; }
+
+</style>
+<div id="container" class="promote">
+  <div id="space"></div>
+  <div id="shift" class="promote"></div>
+</div>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="resources/util.js"></script>
+<script>
+
+promise_test(async () => {
+  const watcher = new ScoreWatcher;
+
+  // Wait for the initial render to complete.
+  await waitForAnimationFrames(2);
+
+  // Induce a shift.
+  document.querySelector("#space").style = "height: 100px";
+
+  // #shift is 400x200 after viewport intersection with correct application of
+  // composited #container offset, and 100px lower after shifting, so impact
+  // region is 400 * (200 + 100).
+  const expectedScore = computeExpectedScore(400 * (200 + 100), 100);
+
+  // Observer fires after the frame is painted.
+  assert_equals(watcher.score, 0);
+  await watcher.promise;
+  assert_equals(watcher.score, expectedScore);
+}, "Element with compositing layer hint.");
+
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/layout-instability/fully-clipped-visual-rect.html b/third_party/blink/web_tests/external/wpt/layout-instability/fully-clipped-visual-rect.html
new file mode 100644
index 0000000..bfd74a24
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/layout-instability/fully-clipped-visual-rect.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<title>Layout Instability: fully clipped visual rect</title>
+<link rel="help" href="https://wicg.github.io/layout-instability/" />
+<style>
+
+body { margin: 0; }
+#clip { width: 0px; height: 600px; overflow: hidden; }
+#j { position: relative; width: 300px; height: 200px; }
+
+</style>
+<div id='clip'><div id='j'></div></div>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="resources/util.js"></script>
+<script>
+
+promise_test(async () => {
+  const watcher = new ScoreWatcher;
+
+  // Wait for the initial render to complete.
+  await waitForAnimationFrames(2);
+
+  // Shift an element that is fully clipped by its container.
+  document.querySelector("#j").style.top = "200px";
+
+  await waitForAnimationFrames(3);
+  assert_equals(watcher.score, 0);
+}, "Fully clipped visual rect.");
+
+</script>
+
+
diff --git a/third_party/blink/web_tests/external/wpt/layout-instability/ignore-fixed-and-sticky.html b/third_party/blink/web_tests/external/wpt/layout-instability/ignore-fixed-and-sticky.html
new file mode 100644
index 0000000..1b39dc9
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/layout-instability/ignore-fixed-and-sticky.html
@@ -0,0 +1,52 @@
+<!DOCTYPE html>
+<title>Layout Instability: ignore fixed and sticky positioning</title>
+<link rel="help" href="https://wicg.github.io/layout-instability/" />
+<style>
+
+body { height: 2000px; }
+#f1, #f2 {
+  position: fixed;
+  width: 300px;
+  height: 100px;
+  left: 100px;
+}
+#f1 { top: 0; }
+#f2 { top: 150px; will-change: transform; }
+#s1 {
+  position: sticky;
+  width: 200px;
+  height: 100px;
+  left: 450px;
+  top: 0;
+}
+
+</style>
+<div id='f1'>fixed</div>
+<div id='f2'>fixed composited</div>
+<div id='s1'>sticky</div>
+normal
+
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="resources/util.js"></script>
+<script>
+
+promise_test(async () => {
+  const watcher = new ScoreWatcher;
+
+  // Wait for the initial render to complete.
+  await waitForAnimationFrames(2);
+
+  // Scroll down by 50px.
+  document.scrollingElement.scrollTop = 50;
+
+  // Force a layout.
+  document.body.style.height = "2500px";
+
+  // No layout shift should occur as a result of the scroll-triggered
+  // repositioning of fixed and sticky elements.
+  await waitForAnimationFrames(3);
+  assert_equals(watcher.score, 0);
+}, 'Ignore fixed and sticky.');
+
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/layout-instability/local-shift-without-viewport-shift.html b/third_party/blink/web_tests/external/wpt/layout-instability/local-shift-without-viewport-shift.html
new file mode 100644
index 0000000..37729f1c
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/layout-instability/local-shift-without-viewport-shift.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<title>Layout Instability: local shift without viewport shift</title>
+<link rel="help" href="https://wicg.github.io/layout-instability/" />
+<style>
+
+#c { position: relative; width: 300px; height: 100px; transform: scale(0.1); }
+#j { position: relative; width: 100px; height: 10px; }
+
+</style>
+<div id='c'>
+  <div id='j'></div>
+</div>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="resources/util.js"></script>
+<script>
+
+promise_test(async () => {
+  const watcher = new ScoreWatcher;
+
+  // Wait for the initial render to complete.
+  await waitForAnimationFrames(2);
+
+  document.querySelector("#j").style.top = "4px";
+
+  // Make sure no shift score is reported, since the element didn't move in the
+  // viewport.
+  await waitForAnimationFrames(3);
+  assert_equals(watcher.score, 0);
+}, "Local shift without viewport shift.");
+
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/layout-instability/multi-clip-visual-rect.html b/third_party/blink/web_tests/external/wpt/layout-instability/multi-clip-visual-rect.html
new file mode 100644
index 0000000..36475d4
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/layout-instability/multi-clip-visual-rect.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html>
+<title>Layout Instability: multi clip visual rect</title>
+<link rel="help" href="https://wicg.github.io/layout-instability/" />
+<style>
+
+body { margin: 0; }
+#outer { width: 200px; height: 600px; overflow: hidden; }
+#inner { width: 300px; height: 150px; overflow: hidden; }
+#j { position: relative; width: 300px; height: 600px; }
+
+</style>
+<div id='outer'><div id='inner'><div id='j'></div></div></div>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="resources/util.js"></script>
+<script>
+
+promise_test(async () => {
+  const watcher = new ScoreWatcher;
+
+  // Wait for the initial render to complete.
+  await waitForAnimationFrames(2);
+
+  document.querySelector("#j").style.top = "-200px";
+
+  // Note that, while the element moves up 200px, its visibility is
+  // clipped at 0px,150px height, so the additional 200px of vertical
+  // move distance is not included in the score.
+  // (clip width 200) * (clip height 150)
+  const expectedScore = computeExpectedScore(200 * 150, 200);
+
+  await watcher.promise;
+  assert_equals(watcher.score, expectedScore);
+}, "Multi clip visual rect.");
+
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/layout-instability/partially-clipped-visual-rect.html b/third_party/blink/web_tests/external/wpt/layout-instability/partially-clipped-visual-rect.html
new file mode 100644
index 0000000..3b18b98
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/layout-instability/partially-clipped-visual-rect.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<title>Layout Instability: partially clipped visual rect</title>
+<link rel="help" href="https://wicg.github.io/layout-instability/" />
+<style>
+
+body { margin: 0; }
+#clip { width: 150px; height: 600px; overflow: hidden; }
+#j { position: relative; width: 300px; height: 200px; }
+
+</style>
+<div id='clip'><div id='j'></div></div>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="resources/util.js"></script>
+<script>
+
+promise_test(async () => {
+  const watcher = new ScoreWatcher;
+
+  // Wait for the initial render to complete.
+  await waitForAnimationFrames(2);
+
+  document.querySelector("#j").style.top = "200px";
+
+  // (clipped width 150px) * (height 200 + movement 200)
+  const expectedScore = computeExpectedScore(150 * (200 + 200), 200);
+
+  await watcher.promise;
+  assert_equals(watcher.score, expectedScore);
+}, "Partially clipped visual rect.");
+
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/layout-instability/shift-into-viewport.html b/third_party/blink/web_tests/external/wpt/layout-instability/shift-into-viewport.html
new file mode 100644
index 0000000..6ace93ad
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/layout-instability/shift-into-viewport.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<title>Layout Instability: shift into viewport</title>
+<link rel="help" href="https://wicg.github.io/layout-instability/" />
+<style>
+
+body { margin: 0; }
+#j { position: relative; width: 600px; height: 200px; top: 600px; }
+
+</style>
+<div id='j'></div>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="resources/util.js"></script>
+<script>
+
+promise_test(async () => {
+  const watcher = new ScoreWatcher;
+
+  // Wait for the initial render to complete.
+  await waitForAnimationFrames(2);
+
+  document.querySelector("#j").style.top = "400px";
+
+  // The element moves from outside the viewport to within the viewport, which
+  // should generate a shift.
+  // (width 600) * (height 0 + move 200)
+  const expectedScore = computeExpectedScore(600 * 200, 200);
+
+  await watcher.promise;
+  assert_equals(watcher.score, expectedScore);
+}, "Shift into viewport.");
+
+</script>
+
diff --git a/third_party/blink/web_tests/external/wpt/layout-instability/shift-outside-viewport.html b/third_party/blink/web_tests/external/wpt/layout-instability/shift-outside-viewport.html
new file mode 100644
index 0000000..49242913
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/layout-instability/shift-outside-viewport.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<title>Layout Instability: shift outside viewport</title>
+<link rel="help" href="https://wicg.github.io/layout-instability/" />
+<style>
+
+body { margin: 0; }
+#j { position: relative; width: 600px; height: 200px; top: 600px; }
+
+</style>
+<div id='j'></div>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="resources/util.js"></script>
+<script>
+
+promise_test(async () => {
+  const watcher = new ScoreWatcher;
+
+  // Wait for the initial render to complete.
+  await waitForAnimationFrames(2);
+
+  document.querySelector("#j").style.top = "800px";
+
+  // Since the element moves entirely outside of the viewport, it shouldn't
+  // generate a score.
+  await waitForAnimationFrames(3);
+  assert_equals(watcher.score, 0);
+}, "Shift outside viewport.");
+
+</script>
+
+
diff --git a/third_party/blink/web_tests/external/wpt/layout-instability/shift-while-scrolled.html b/third_party/blink/web_tests/external/wpt/layout-instability/shift-while-scrolled.html
new file mode 100644
index 0000000..88eeede
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/layout-instability/shift-while-scrolled.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html>
+<title>Layout Instability: shift while scrolled</title>
+<link rel="help" href="https://wicg.github.io/layout-instability/" />
+<style>
+
+body { height: 2000px; margin: 0; }
+#shift { position: relative; width: 300px; height: 200px; }
+
+</style>
+<div id="shift"></div>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="resources/util.js"></script>
+<script>
+
+promise_test(async () => {
+  const watcher = new ScoreWatcher;
+
+  // Wait for the initial render to complete.
+  await waitForAnimationFrames(2);
+
+  // Scroll down by 100px.
+  document.scrollingElement.scrollTop = 100;
+  assert_equals(watcher.score, 0);
+
+  // Generate a layout shift.
+  document.querySelector("#shift").style = "top: 60px";
+
+  // Impact region: width * (height - scrollTop + moveDistance)
+  const expectedScore = computeExpectedScore(
+      300 * (200 - 100 + 60), 60);
+
+  await watcher.promise;
+  assert_equals(watcher.score, expectedScore);
+}, 'Layout shift with non-zero scroll offset.');
+
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/layout-instability/shift-with-counterscroll.html b/third_party/blink/web_tests/external/wpt/layout-instability/shift-with-counterscroll.html
new file mode 100644
index 0000000..8ad1a46
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/layout-instability/shift-with-counterscroll.html
@@ -0,0 +1,56 @@
+<!DOCTYPE html>
+<title>Layout Instability: shift with counterscroll not counted</title>
+<link rel="help" href="https://wicg.github.io/layout-instability/" />
+<style>
+
+#s {
+  overflow: scroll;
+  position: absolute;
+  left: 20px;
+  top: 20px;
+  width: 200px;
+  height: 200px;
+}
+#sp {
+  width: 170px;
+  height: 600px;
+}
+#ch {
+  position: relative;
+  background: yellow;
+  left: 10px;
+  top: 100px;
+  width: 150px;
+  height: 150px;
+}
+
+</style>
+<div id="s">
+  <div id="sp">
+    <div id="ch"></div>
+  </div>
+</div>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="resources/util.js"></script>
+<script>
+
+promise_test(async () => {
+  const watcher = new ScoreWatcher;
+
+  // Wait for the initial render to complete.
+  await waitForAnimationFrames(2);
+
+  let scroller = document.querySelector("#s");
+  let changer = document.querySelector("#ch");
+
+  changer.style.top = "200px";
+  scroller.scrollTop = 100;
+
+  await waitForAnimationFrames(3);
+  assert_equals(watcher.score, 0);
+}, "Shift with counterscroll not counted.");
+
+</script>
+
+
diff --git a/third_party/blink/web_tests/external/wpt/tools/wptrunner/wptrunner/browsers/servodriver.py b/third_party/blink/web_tests/external/wpt/tools/wptrunner/wptrunner/browsers/servodriver.py
index ea345ef..2953de18 100644
--- a/third_party/blink/web_tests/external/wpt/tools/wptrunner/wptrunner/browsers/servodriver.py
+++ b/third_party/blink/web_tests/external/wpt/tools/wptrunner/wptrunner/browsers/servodriver.py
@@ -163,9 +163,7 @@
                                    command=" ".join(self.command))
 
     def is_alive(self):
-        if self.runner:
-            return self.runner.is_running()
-        return False
+        return self.proc.poll() is None
 
     def cleanup(self):
         self.stop()
diff --git a/third_party/blink/web_tests/external/wpt/web-nfc/NDEFRecord_constructor.https-expected.txt b/third_party/blink/web_tests/external/wpt/web-nfc/NDEFRecord_constructor.https-expected.txt
deleted file mode 100644
index f35d1e2..0000000
--- a/third_party/blink/web_tests/external/wpt/web-nfc/NDEFRecord_constructor.https-expected.txt
+++ /dev/null
@@ -1,19 +0,0 @@
-This is a testharness.js-based test.
-PASS NDEFRecord constructor without init dict
-PASS NDEFRecord constructor with null init dict
-PASS NDEFRecord constructor should only accept mediaType for mime record type
-PASS NDEFRecord constructor with text record type and string data
-PASS NDEFRecord constructor with text record type and arrayBuffer data
-PASS NDEFRecord constructor with text record type and arrayBufferView data
-PASS NDEFRecord constructor with text record type, encoding, and lang
-PASS NDEFRecord constructor with text record type and custom document language
-PASS NDEFRecord constructor with url record type
-PASS NDEFRecord constructor with absolute-url record type
-PASS NDEFRecord constructor with mime record type and stream data
-PASS NDEFRecord constructor with mime record type and json data
-PASS NDEFRecord constructor with unknown record type
-FAIL NDEFRecord constructor with external record type Failed to construct 'NDEFRecord': The data for external type NDEFRecord must be an ArrayBuffer.
-PASS NDEFRecord constructor with record type string being treated as case sensitive
-PASS NDEFRecord constructor with invalid external record type
-Harness: the test ran to completion.
-
diff --git a/third_party/blink/web_tests/fast/scrolling/scrollbars/dsf-ready/mouse-interactions-dsf-2.html b/third_party/blink/web_tests/fast/scrolling/scrollbars/dsf-ready/mouse-interactions-dsf-2.html
index c1615dd8..871b08b 100644
--- a/third_party/blink/web_tests/fast/scrolling/scrollbars/dsf-ready/mouse-interactions-dsf-2.html
+++ b/third_party/blink/web_tests/fast/scrolling/scrollbars/dsf-ready/mouse-interactions-dsf-2.html
@@ -16,15 +16,9 @@
   top: 100px;
   left: 100px;
 }
-.customLocation {
-  position: absolute;
-  top: 250px;
-  left: 100px;
-}
-
 .space {
-  height: 1000px;
-  width: 1000px;
+  height: 200px;
+  width: 200px;
 }
 </style>
 
@@ -79,18 +73,18 @@
     // TODO(arakeri): crbug.com/1016188 has been filed to investigate the differences
     // in scroll offsets between platforms.
     if (onLinuxPlatform)
-      expected_offset = window.devicePixelRatio == 1 ? 732 : 457.5;
+      expected_offset = window.devicePixelRatio == 1 ? 92 : 73;
     else if (onMacPlatform)
-      expected_offset = 281;
+      expected_offset = 46;
     else
-      expected_offset = window.devicePixelRatio == 1 ? 481 : 362;
+      expected_offset = window.devicePixelRatio == 1 ? 71 : 73;
     assert_equals(standardDivFast.scrollTop, expected_offset, "Vertical thumb drag downwards did not scroll as expected.");
   }, "Test mouse drags on non-custom composited div scrollbar thumb.");
 
-  promise_test (async (test) => {
+  promise_test (async () => {
     // Since scrollbars on Mac don't have buttons, this test is irrelevant.
     if(onMacPlatform)
-      test.done();
+      return;
 
     resetScrollOffset(standardDivFast);
 
@@ -99,7 +93,7 @@
     assert_equals(standardDivFast.scrollTop, 40, "Pressing the down arrow didn't scroll.");
   }, "Test mouse click on non-custom composited div scrollbar arrows.");
 
-  promise_test (async (test) => {
+  promise_test (async () => {
     resetScrollOffset(standardDivFast);
 
     // Testing forward scroll on vertical scrollbar. Mac uses "Option" key
@@ -108,11 +102,11 @@
     await mouseClickOn(SCROLLBAR_BUTTON_FWD.x, standardRectFast.top + 50, /*left_click*/0, modifier);
     let expected_offset = 0;
     if (onLinuxPlatform)
-      expected_offset = window.devicePixelRatio == 1 ? 695 : 606;
+      expected_offset = window.devicePixelRatio == 1 ? 87 : 82;
     else if (onMacPlatform)
-      expected_offset = 549;
+      expected_offset = 74;
     else
-      expected_offset = window.devicePixelRatio == 1 ? 626 : 579.5;
+      expected_offset = 82;
 
     // TODO(arakeri): crbug.com/1019076 Option + click is off by 3-4 px.
     assert_approx_equals(standardDivFast.scrollTop, expected_offset, 3,
diff --git a/third_party/blink/web_tests/fast/scrolling/scrollbars/mouse-scrolling-on-div-custom-scrollbar.html b/third_party/blink/web_tests/fast/scrolling/scrollbars/mouse-scrolling-on-div-custom-scrollbar.html
new file mode 100644
index 0000000..a42e5c5
--- /dev/null
+++ b/third_party/blink/web_tests/fast/scrolling/scrollbars/mouse-scrolling-on-div-custom-scrollbar.html
@@ -0,0 +1,77 @@
+<!DOCTYPE html>
+<title>Tests mouse interactions on a custom composited div scrollbar.</title>
+<script src="../../../resources/testharness.js"></script>
+<script src="../../../resources/testharnessreport.js"></script>
+<script src="../../../resources/gesture-util.js"></script>
+<script src="../../../resources/scrollbar-util.js"></script>
+<style>
+.appearance {
+  width: 100px;
+  height: 100px;
+  overflow: scroll;
+  border: 1px solid black;
+}
+.customLocation {
+  position: absolute;
+  top: 250px;
+  left: 100px;
+}
+.fast {
+  will-change: transform;
+}
+.space {
+  height: 1000px;
+  width: 1000px;
+}
+
+#custom::-webkit-scrollbar {
+  height: 10px;
+  width: 10px;
+}
+
+#custom::-webkit-scrollbar-track {
+  background: #f5f5f5;
+}
+
+#custom::-webkit-scrollbar-thumb {
+  background: #ababab;
+}
+
+#custom::-webkit-scrollbar-thumb:hover {
+  background: #cdcdcd;
+}
+</style>
+
+<!-- Composited custom fast scroller -->
+<div id="custom" class="appearance customLocation fast">
+  <div class="space"></div>
+</div>
+
+<script>
+window.onload = () => {
+  promise_test (async () => {
+    await waitForCompositorCommit();
+    const customDivFast = document.getElementById("custom");
+    const customRectFast = customDivFast.getBoundingClientRect();
+
+    // Testing the vertical custom scrollbar click.
+    let x = customRectFast.right - 5;
+    let y = customRectFast.top + customRectFast.height / 2;
+
+    await mouseMoveTo(x, y);
+    await mouseDownAt(x, y);
+    await mouseMoveTo(x, y);
+
+    // Testing the horizontal custom scrollbar click.
+    x = customRectFast.left + customRectFast.width / 2;
+    y = customRectFast.bottom - 5;
+
+    await mouseMoveTo(x, y);
+    await mouseDownAt(x, y);
+    await mouseMoveTo(x, y);
+
+    // Test passes if renderer did not crash.
+
+  }, "Test mouse click on custom composited div scrollbars.");
+}
+</script>
diff --git a/third_party/blink/web_tests/fast/scrolling/scrollbars/mouse-scrolling-on-div-scrollbar-thumb-bounds.html b/third_party/blink/web_tests/fast/scrolling/scrollbars/mouse-scrolling-on-div-scrollbar-thumb-bounds.html
new file mode 100644
index 0000000..5178cde
--- /dev/null
+++ b/third_party/blink/web_tests/fast/scrolling/scrollbars/mouse-scrolling-on-div-scrollbar-thumb-bounds.html
@@ -0,0 +1,63 @@
+<!DOCTYPE html>
+<title>Tests mouse interactions on a non-custom composited div scrollbar thumb.</title>
+<script src="../../../resources/testharness.js"></script>
+<script src="../../../resources/testharnessreport.js"></script>
+<script src="../../../resources/gesture-util.js"></script>
+<script src="../../../resources/scrollbar-util.js"></script>
+<style>
+.appearance {
+  width: 100px;
+  height: 100px;
+  overflow: scroll;
+  border: 1px solid black;
+}
+.standardLocation {
+  position: absolute;
+  top: 100px;
+  left: 100px;
+}
+.fast {
+  will-change: transform;
+}
+.space {
+  height: 150px;
+  width: 150px;
+}
+</style>
+
+<!-- Composited non-custom fast scroller -->
+<div id="standard" class="appearance standardLocation fast">
+  <div class="space"></div>
+</div>
+
+<script>
+if (window.internals)
+    internals.settings.setScrollAnimatorEnabled(false);
+
+window.onload = () => {
+  const standardDivFast = document.getElementById("standard");
+  const standardRectFast = standardDivFast.getBoundingClientRect();
+
+  const TRACK_WIDTH = calculateScrollbarThickness();
+  const BUTTON_WIDTH = TRACK_WIDTH;
+
+  promise_test (async () => {
+    await waitForCompositorCommit();
+    resetScrollOffset(standardDivFast);
+
+    // Testing the vertical scrollbar thumb.
+    let x = standardRectFast.right - TRACK_WIDTH / 2;
+    let y = standardRectFast.top + BUTTON_WIDTH + 2;
+
+    await mouseMoveTo(x, y);
+    await mouseDownAt(x, y);
+    assert_equals(standardDivFast.scrollTop, 0, "Mousedown on vertical scrollbar thumb is not expected to scroll.");
+
+    await mouseMoveTo(x, y-10);
+    assert_equals(standardDivFast.scrollTop, 0, "Vertical thumb drag beyond the track should not cause a scroll.");
+
+    await mouseMoveTo(x, y);
+    assert_equals(standardDivFast.scrollTop, 0, "Vertical thumb drag beyond the track and back should not cause a scroll.");
+  }, "Test thumb drags beyond scrollbar track.");
+}
+</script>
diff --git a/third_party/blink/web_tests/fast/scrolling/scrollbars/mouse-scrolling-on-div-scrollbar-thumb.html b/third_party/blink/web_tests/fast/scrolling/scrollbars/mouse-scrolling-on-div-scrollbar-thumb.html
new file mode 100644
index 0000000..53f904a
--- /dev/null
+++ b/third_party/blink/web_tests/fast/scrolling/scrollbars/mouse-scrolling-on-div-scrollbar-thumb.html
@@ -0,0 +1,109 @@
+<!DOCTYPE html>
+<title>Tests mouse interactions on a non-custom composited div scrollbar thumb.</title>
+<script src="../../../resources/testharness.js"></script>
+<script src="../../../resources/testharnessreport.js"></script>
+<script src="../../../resources/gesture-util.js"></script>
+<script src="../../../resources/scrollbar-util.js"></script>
+<style>
+.appearance {
+  width: 100px;
+  height: 100px;
+  overflow: scroll;
+  border: 1px solid black;
+}
+.standardLocation {
+  position: absolute;
+  top: 100px;
+  left: 100px;
+}
+.fast {
+  will-change: transform;
+}
+.space {
+  height: 1000px;
+  width: 1000px;
+}
+</style>
+
+<!-- Composited non-custom fast scroller -->
+<div id="standard" class="appearance standardLocation fast">
+  <div class="space"></div>
+</div>
+
+<script>
+if (window.internals)
+    internals.settings.setScrollAnimatorEnabled(false);
+
+let platform = navigator.userAgent.includes("Linux") ? "linux" :
+               navigator.userAgent.includes("Windows") ? "win" :
+               navigator.userAgent.includes("Mac OS X") ? "mac" :
+               (() => { throw "Platform unsupported. See crbug.com/953847"; })();
+
+window.onload = () => {
+  const standardDivFast = document.getElementById("standard");
+  const standardRectFast = standardDivFast.getBoundingClientRect();
+
+  const TRACK_WIDTH = calculateScrollbarThickness();
+  const BUTTON_WIDTH = TRACK_WIDTH;
+  const SCROLL_CORNER = TRACK_WIDTH;
+  const SCROLL_DELTA = 50;
+
+  promise_test (async () => {
+    await waitForCompositorCommit();
+    resetScrollOffset(standardDivFast);
+
+    // Testing the vertical scrollbar thumb.
+    let x = standardRectFast.right - TRACK_WIDTH / 2;
+    let y = standardRectFast.top + (platform == "mac" ? 0 : BUTTON_WIDTH) + 2;
+
+    await mouseMoveTo(x, y);
+    await mouseDownAt(x, y);
+    assert_equals(standardDivFast.scrollTop, 0, "Mousedown on vertical scrollbar thumb is not expected to scroll.");
+
+    await mouseMoveTo(x, y-10);
+    assert_equals(standardDivFast.scrollTop, 0, "Vertical thumb drag beyond the track should not cause a scroll.");
+
+    await mouseMoveTo(x, y);
+    assert_equals(standardDivFast.scrollTop, 0, "Vertical thumb drag beyond the track and back should not cause a scroll.");
+  }, "Test thumb drags beyond scrollbar track.");
+
+  promise_test (async () => {
+    await waitForCompositorCommit();
+    resetScrollOffset(standardDivFast);
+
+    // Testing the vertical scrollbar thumb.
+    let x = standardRectFast.right - TRACK_WIDTH / 2;
+    let y = standardRectFast.top + (platform == "mac" ? 0 : BUTTON_WIDTH) + 2;
+    let asc_increments = [15, 10, 7, 6, 2];
+    let asc_offsets = {linux: [549, 915, 915, 915, 915], win: [361, 601, 770, 915, 915], mac: [211, 351, 450, 534, 563]}[platform];
+    let desc_increments = [3, 2, 5, 9, 21];
+    let desc_offsets = {linux: [915, 915, 915, 768, 0], win: [890, 842, 722, 505, 0], mac: [520, 492, 422, 295, 0]}[platform];
+
+    await mouseMoveTo(x, y);
+    await mouseDownAt(x, y);
+
+    // Scroll down
+    for (var i = 0; i < 5; i++){
+      y += asc_increments[i];
+      await mouseMoveTo(x, y);
+      // TODO(crbug.com/1009892): Sometimes there is 1px difference in threaded scrollbar scrolling mode.
+      // Change assert_approx_equals(..., 1, ...) to assert_equals(...) when the bug is fixed.
+      assert_approx_equals(standardDivFast.scrollTop, asc_offsets[i], 1, "Vertical thumb drag downwards did not scroll as expected at "+asc_increments[i]+" - ");
+    };
+
+    // Scroll up
+    for (var i = 0; i < 5; i++){
+      y -= desc_increments[i];
+      await mouseMoveTo(x, y);
+      // TODO(crbug.com/1009892): Ditto.
+      assert_approx_equals(standardDivFast.scrollTop, desc_offsets[i], 1, "Vertical thumb drag upwards did not scroll as expected at "+desc_increments[i]+" - ");
+    };
+
+    await mouseUpAt(x, y);
+    assert_equals(standardDivFast.scrollTop, 0, "Mouseup on vertical scrollbar thumb is not expected to scroll.");
+
+    // Since the horizontal scrolling is essentially the same codepath as vertical,
+    // this need not be tested in the interest of making the test run faster.
+  }, "Test mouse drags in intervals on non-custom composited div scrollbar thumb.");
+}
+</script>
diff --git a/third_party/blink/web_tests/fast/scrolling/scrollbars/mouse-scrolling-on-div-scrollbar.html b/third_party/blink/web_tests/fast/scrolling/scrollbars/mouse-scrolling-on-div-scrollbar.html
index 2d1f9b6..6cc7307 100644
--- a/third_party/blink/web_tests/fast/scrolling/scrollbars/mouse-scrolling-on-div-scrollbar.html
+++ b/third_party/blink/web_tests/fast/scrolling/scrollbars/mouse-scrolling-on-div-scrollbar.html
@@ -16,34 +16,12 @@
   top: 100px;
   left: 100px;
 }
-.customLocation {
-  position: absolute;
-  top: 250px;
-  left: 100px;
-}
 .fast {
   will-change: transform;
 }
 .space {
-  height: 1000px;
-  width: 1000px;
-}
-
-#custom::-webkit-scrollbar {
-  height: 10px;
-  width: 10px;
-}
-
-#custom::-webkit-scrollbar-track {
-  background: #f5f5f5;
-}
-
-#custom::-webkit-scrollbar-thumb {
-  background: #ababab;
-}
-
-#custom::-webkit-scrollbar-thumb:hover {
-  background: #cdcdcd;
+  height: 200px;
+  width: 200px;
 }
 </style>
 
@@ -52,20 +30,10 @@
   <div class="space"></div>
 </div>
 
-<!-- Composited custom fast scroller -->
-<div id="custom" class="appearance customLocation fast">
-  <div class="space"></div>
-</div>
-
 <script>
 if (window.internals)
     internals.settings.setScrollAnimatorEnabled(false);
 
-let platform = navigator.userAgent.includes("Linux") ? "linux" :
-               navigator.userAgent.includes("Windows") ? "win" :
-               navigator.userAgent.includes("Mac OS X") ? "mac" :
-               (() => { throw "Platform unsupported. See crbug.com/953847"; })();
-
 window.onload = () => {
   const standardDivFast = document.getElementById("standard");
   const standardRectFast = standardDivFast.getBoundingClientRect();
@@ -73,11 +41,10 @@
   const TRACK_WIDTH = calculateScrollbarThickness();
   const BUTTON_WIDTH = TRACK_WIDTH;
   const SCROLL_CORNER = TRACK_WIDTH;
-  const SCROLL_DELTA = 50;
 
   promise_test (async () => {
     // Scrollbars on Mac don't have arrows. This test is irrelevant.
-    if(platform == "mac")
+    if(navigator.userAgent.includes("Mac OS X"))
       return;
 
     await waitForCompositorCommit();
@@ -121,7 +88,7 @@
 
     // Click on the track part just below the up arrow.
     x = standardRectFast.right - BUTTON_WIDTH / 2;
-    y = standardRectFast.top + (platform == "mac" ? 0 : BUTTON_WIDTH) + 2;
+    y = standardRectFast.top + BUTTON_WIDTH + 2;
     await mouseClickOn(x, y);
     assert_equals(standardDivFast.scrollTop, 0, "Pressing the up trackpart didn't scroll.");
 
@@ -132,117 +99,10 @@
     assert_equals(standardDivFast.scrollLeft, 74, "Pressing the right trackpart didn't scroll.");
 
     // Click on the track part just to the right of the left arrow.
-    x = standardRectFast.left + (platform == "mac" ? 0 : BUTTON_WIDTH) + 2;
+    x = standardRectFast.left + BUTTON_WIDTH + 2;
     y = standardRectFast.bottom - BUTTON_WIDTH / 2;
     await mouseClickOn(x, y);
     assert_equals(standardDivFast.scrollLeft, 0, "Pressing the left trackpart didn't scroll.");
   }, "Test mouse click on non-custom composited div scrollbar empty trackparts.");
-
-  promise_test (async () => {
-    await waitForCompositorCommit();
-    resetScrollOffset(standardDivFast);
-
-    // Testing the vertical scrollbar thumb.
-    let x = standardRectFast.right - TRACK_WIDTH / 2;
-    let y = standardRectFast.top + (platform == "mac" ? 0 : BUTTON_WIDTH) + 2;
-
-    await mouseMoveTo(x, y);
-    await mouseDownAt(x, y);
-    assert_equals(standardDivFast.scrollTop, 0, "Mousedown on vertical scrollbar thumb is not expected to scroll.");
-
-    await mouseMoveTo(x, y-10);
-    assert_equals(standardDivFast.scrollTop, 0, "Vertical thumb drag beyond the track should not cause a scroll.");
-
-    await mouseMoveTo(x, y);
-    assert_equals(standardDivFast.scrollTop, 0, "Vertical thumb drag beyond the track and back should not cause a scroll.");
-  }, "Test thumb drags beyond scrollbar track.");
-
-  promise_test (async () => {
-    await waitForCompositorCommit();
-    resetScrollOffset(standardDivFast);
-
-    // Testing the vertical scrollbar thumb.
-    let x = standardRectFast.right - TRACK_WIDTH / 2;
-    let y = standardRectFast.top + (platform == "mac" ? 0 : BUTTON_WIDTH) + 2;
-    let asc_increments = [15, 10, 7, 6, 2];
-    let asc_offsets = {linux: [549, 915, 915, 915, 915], win: [361, 601, 770, 915, 915], mac: [211, 351, 450, 534, 563]}[platform];
-    let desc_increments = [3, 2, 5, 9, 21];
-    let desc_offsets = {linux: [915, 915, 915, 768, 0], win: [890, 842, 722, 505, 0], mac: [520, 492, 422, 295, 0]}[platform];
-
-    await mouseMoveTo(x, y);
-    await mouseDownAt(x, y);
-
-    // Scroll down
-    for (var i = 0; i < 5; i++){
-      y += asc_increments[i];
-      await mouseMoveTo(x, y);
-      // TODO(crbug.com/1009892): Sometimes there is 1px difference in threaded scrollbar scrolling mode.
-      // Change assert_approx_equals(..., 1, ...) to assert_equals(...) when the bug is fixed.
-      assert_approx_equals(standardDivFast.scrollTop, asc_offsets[i], 1, "Vertical thumb drag downwards did not scroll as expected at "+asc_increments[i]+" - ");
-    };
-
-    // Scroll up
-    for (var i = 0; i < 5; i++){
-      y -= desc_increments[i];
-      await mouseMoveTo(x, y);
-      // TODO(crbug.com/1009892): Ditto.
-      assert_approx_equals(standardDivFast.scrollTop, desc_offsets[i], 1, "Vertical thumb drag upwards did not scroll as expected at "+desc_increments[i]+" - ");
-    };
-
-    await mouseUpAt(x, y);
-    assert_equals(standardDivFast.scrollTop, 0, "Mouseup on vertical scrollbar thumb is not expected to scroll.");
-
-    // Testing the horizontal scrollbar thumb.
-    resetScrollOffset(standardDivFast);
-    x = standardRectFast.left + BUTTON_WIDTH + 5;
-    y = standardRectFast.bottom - TRACK_WIDTH / 2;
-    await mouseMoveTo(x, y);
-    await mouseDownAt(x, y);
-
-    // Scroll right
-    for (var i = 0; i < 5; i++){
-      x += asc_increments[i];
-      await mouseMoveTo(x, y);
-      // TODO(crbug.com/1009892): Ditto.
-      assert_approx_equals(standardDivFast.scrollLeft, asc_offsets[i], 1, "Horizontal thumb drag to the right did not scroll as expected at "+asc_increments[i]+" - ");
-    };
-
-    // Scroll left
-    for (var i = 0; i < 5; i++){
-      x -= desc_increments[i];
-      await mouseMoveTo(x, y);
-      // TODO(crbug.com/1009892): Ditto.
-      assert_approx_equals(standardDivFast.scrollLeft, desc_offsets[i], 1, "Horizontal thumb drag to the left did not scroll as expected at "+desc_increments[i]+" - ");
-    };
-
-    await mouseUpAt(x, y);
-    assert_equals(standardDivFast.scrollLeft, 0,  "Mouseup on horizontal scrollbar thumb is not expected to scroll.");
-
-  }, "Test mouse drags in intervals on non-custom composited div scrollbar thumb.");
-
-  promise_test (async () => {
-    await waitForCompositorCommit();
-    const customDivFast = document.getElementById("custom");
-    const customRectFast = customDivFast.getBoundingClientRect();
-
-    // Testing the vertical custom scrollbar click.
-    let x = customRectFast.right - 5;
-    let y = customRectFast.top + customRectFast.height / 2;
-
-    await mouseMoveTo(x, y);
-    await mouseDownAt(x, y);
-    await mouseMoveTo(x, y);
-
-    // Testing the horizontal custom scrollbar click.
-    x = customRectFast.left + customRectFast.width / 2;
-    y = customRectFast.bottom - 5;
-
-    await mouseMoveTo(x, y);
-    await mouseDownAt(x, y);
-    await mouseMoveTo(x, y);
-
-    // Test passes if renderer did not crash.
-
-  }, "Test mouse click on custom composited div scrollbars.");
 }
 </script>
diff --git a/third_party/blink/web_tests/fast/scrolling/scrollbars/mouse-scrolling-on-root-scrollbar-thumb-bounds.html b/third_party/blink/web_tests/fast/scrolling/scrollbars/mouse-scrolling-on-root-scrollbar-thumb-bounds.html
new file mode 100644
index 0000000..c10aa5a
--- /dev/null
+++ b/third_party/blink/web_tests/fast/scrolling/scrollbars/mouse-scrolling-on-root-scrollbar-thumb-bounds.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html>
+<title>Tests mouse interactions on a non-custom composited root scrollbar thumb.</title>
+<script src="../../../resources/testharness.js"></script>
+<script src="../../../resources/testharnessreport.js"></script>
+<script src="../../../resources/gesture-util.js"></script>
+<script src="../../../resources/scrollbar-util.js"></script>
+<body style="height: 1000px; width: 1000px">
+<script>
+if (window.internals)
+    internals.settings.setScrollAnimatorEnabled(false);
+
+window.onload = () => {
+  const TRACK_WIDTH = calculateScrollbarThickness();
+  const BUTTON_WIDTH = TRACK_WIDTH;
+
+  promise_test (async () => {
+    await waitForCompositorCommit();
+    resetScrollOffset(document.scrollingElement);
+
+    // Testing the vertical scrollbar thumb.
+    let x = window.innerWidth - TRACK_WIDTH / 2;
+    let y = BUTTON_WIDTH + 10;
+
+    await mouseMoveTo(x, y);
+    await mouseDownAt(x, y);
+    assert_equals(window.scrollY, 0, "Mousedown on vertical scrollbar thumb is not expected to scroll.");
+
+    await mouseMoveTo(x, y-10);
+    assert_equals(window.scrollY, 0, "Vertical thumb drag beyond the track should not cause a scroll.");
+
+    await mouseMoveTo(x, y);
+    assert_equals(window.scrollY, 0, "Vertical thumb drag beyond the track and back should not cause a scroll.");
+  }, "Test thumb drags beyond scrollbar track.");
+}
+</script>
+</body>
diff --git a/third_party/blink/web_tests/fast/scrolling/scrollbars/mouse-scrolling-on-root-scrollbar-thumb.html b/third_party/blink/web_tests/fast/scrolling/scrollbars/mouse-scrolling-on-root-scrollbar-thumb.html
new file mode 100644
index 0000000..8c0d627
--- /dev/null
+++ b/third_party/blink/web_tests/fast/scrolling/scrollbars/mouse-scrolling-on-root-scrollbar-thumb.html
@@ -0,0 +1,63 @@
+<!DOCTYPE html>
+<title>Tests mouse interactions on a non-custom composited root scrollbar thumb.</title>
+<script src="../../../resources/testharness.js"></script>
+<script src="../../../resources/testharnessreport.js"></script>
+<script src="../../../resources/gesture-util.js"></script>
+<script src="../../../resources/scrollbar-util.js"></script>
+<body style="height: 1000px; width: 1000px">
+<script>
+if (window.internals)
+    internals.settings.setScrollAnimatorEnabled(false);
+
+window.onload = () => {
+  const TRACK_WIDTH = calculateScrollbarThickness();
+  const BUTTON_WIDTH = TRACK_WIDTH;
+  const onMacPlatform =  navigator.userAgent.search(/\bMac OS X\b/) != -1;
+
+  promise_test (async () => {
+    await waitForCompositorCommit();
+    resetScrollOffset(document.scrollingElement);
+
+    // Testing the vertical scrollbar thumb.
+    let x = window.innerWidth - TRACK_WIDTH / 2;
+    let y = BUTTON_WIDTH + 10;
+    let asc_increments = [25, 10, 35, 7, 23];
+    let asc_offsets = [45, 64, 128, 141, 183];
+    let asc_offsets_mac = [43, 60, 121, 133, 173];
+
+    let desc_increments = [33, 11, 21, 5, 30];
+    let desc_offsets = [122, 102, 64, 55, 0];
+    let desc_offsets_mac = [116, 97, 60, 52, 0];
+
+    await mouseMoveTo(x, y);
+    await mouseDownAt(x, y);
+
+     // Scroll down
+    for (var i = 0; i < 5; i++){
+      y += asc_increments[i];
+      await mouseMoveTo(x, y);
+      const offset = onMacPlatform ? asc_offsets_mac[i] : asc_offsets[i];
+      assert_equals(window.scrollY, offset, "Vertical thumb drag downwards did not scroll as expected at "+asc_increments[i]+" - ");
+    };
+
+    // Scroll up
+    for (var i = 0; i < 5; i++){
+      y -= desc_increments[i];
+      await mouseMoveTo(x, y);
+      const offset = onMacPlatform ? desc_offsets_mac[i] : desc_offsets[i];
+      assert_equals(window.scrollY, offset, "Vertical thumb drag upwards did not scroll as expected at "+desc_increments[i]+" - ");
+    };
+
+    await mouseUpAt(x, y);
+    assert_equals(window.scrollY, 0, "Mouseup on vertical scrollbar thumb is not expected to scroll.");
+
+    // Since the horizontal scrolling is essentially the same codepath as vertical,
+    // this need not be tested in the interest of making the test run faster.
+
+    // TODO(sahir.vellani): Performing mouse interactions beyond this point 
+    // without calling resetScrollOffset may lead to test failures on linux.
+    // (probably due to crbug.com/979408)
+  }, "Test mouse drags in increments on non-custom composited root scrollbar thumb.");
+}
+</script>
+</body>
diff --git a/third_party/blink/web_tests/fast/scrolling/scrollbars/mouse-scrolling-on-root-scrollbar.html b/third_party/blink/web_tests/fast/scrolling/scrollbars/mouse-scrolling-on-root-scrollbar.html
index 5579d94..766c945 100644
--- a/third_party/blink/web_tests/fast/scrolling/scrollbars/mouse-scrolling-on-root-scrollbar.html
+++ b/third_party/blink/web_tests/fast/scrolling/scrollbars/mouse-scrolling-on-root-scrollbar.html
@@ -78,97 +78,6 @@
 	await mouseClickOn(x, y);
     assert_equals(window.scrollX, 0, "Pressing the left trackpart didn't scroll.");
   }, "Test mouse click on non-custom composited root scrollbar empty trackparts.");
-
-  promise_test (async () => {
-    await waitForCompositorCommit();
-    resetScrollOffset(document.scrollingElement);
-
-    // Testing the vertical scrollbar thumb.
-    let x = window.innerWidth - TRACK_WIDTH / 2;
-    let y = BUTTON_WIDTH + 10;
-
-    await mouseMoveTo(x, y);
-    await mouseDownAt(x, y);
-    assert_equals(window.scrollY, 0, "Mousedown on vertical scrollbar thumb is not expected to scroll.");
-
-    await mouseMoveTo(x, y-10);
-    assert_equals(window.scrollY, 0, "Vertical thumb drag beyond the track should not cause a scroll.");
-
-    await mouseMoveTo(x, y);
-    assert_equals(window.scrollY, 0, "Vertical thumb drag beyond the track and back should not cause a scroll.");
-  }, "Test thumb drags beyond scrollbar track.");
-
-  promise_test (async () => {
-    await waitForCompositorCommit();
-    resetScrollOffset(document.scrollingElement);
-
-    // Testing the vertical scrollbar thumb.
-    let x = window.innerWidth - TRACK_WIDTH / 2;
-    let y = BUTTON_WIDTH + 10;
-    let asc_increments = [25, 10, 35, 7, 23];
-    let asc_offsets = [45, 64, 128, 141, 183];
-    let asc_offsets_mac = [43, 60, 121, 133, 173];
-
-    let desc_increments = [33, 11, 21, 5, 30];
-    let desc_offsets = [122, 102, 64, 55, 0];
-    let desc_offsets_mac = [116, 97, 60, 52, 0];
-
-    await mouseMoveTo(x, y);
-    await mouseDownAt(x, y);
-
-     // Scroll down
-    for (var i = 0; i < 5; i++){
-      y += asc_increments[i];
-      await mouseMoveTo(x, y);
-      const offset = onMacPlatform ? asc_offsets_mac[i] : asc_offsets[i];
-      assert_equals(window.scrollY, offset, "Vertical thumb drag downwards did not scroll as expected at "+asc_increments[i]+" - ");
-    };
-
-    // Scroll up
-    for (var i = 0; i < 5; i++){
-      y -= desc_increments[i];
-      await mouseMoveTo(x, y);
-      const offset = onMacPlatform ? desc_offsets_mac[i] : desc_offsets[i];
-      assert_equals(window.scrollY, offset, "Vertical thumb drag upwards did not scroll as expected at "+desc_increments[i]+" - ");
-    };
-
-    await mouseUpAt(x, y);
-    assert_equals(window.scrollY, 0, "Mouseup on vertical scrollbar thumb is not expected to scroll.");
-
-    // Testing the horizontal scrollbar thumb.
-    // TODO(sahir.vellani) test fails only on linux without resetScrollOffset,
-    // probably due to crbug.com/979408.
-    resetScrollOffset(document.scrollingElement);
-    x = BUTTON_WIDTH + 10;
-    y = window.innerHeight - TRACK_WIDTH / 2;
-    asc_offsets = [33, 46, 93, 102, 133];
-    asc_offsets_mac = [32, 44, 89, 98, 128];
-    desc_offsets = [89, 74, 46, 40, 0];
-    desc_offsets_mac = [85, 71, 44, 38, 0];
-
-    await mouseMoveTo(x, y);
-    await mouseDownAt(x, y);
-    assert_equals(window.scrollX, 0, "Mousedown on horizontal scrollbar thumb is not expected to scroll.");
-
-    // Scroll right
-    for (var i = 0; i < 5; i++){
-      x += asc_increments[i];
-      await mouseMoveTo(x, y);
-      const offset = onMacPlatform ? asc_offsets_mac[i] : asc_offsets[i];
-      assert_equals(window.scrollX, offset, "Horizontal thumb drag to the right did not scroll as expected at "+asc_increments[i]+" - ");
-    };
-
-    // Scroll left
-    for (var i = 0; i < 5; i++){
-      x -= desc_increments[i];
-      await mouseMoveTo(x, y);
-      const offset = onMacPlatform ? desc_offsets_mac[i] : desc_offsets[i];
-      assert_equals(window.scrollX, offset, "Horizontal thumb drag to the left did not scroll as expected at "+desc_increments[i]+" - ");
-    };
-
-    await mouseUpAt(x, y);
-    assert_equals(window.scrollX, 0, "Mouseup on horizontal scrollbar thumb is not expected to scroll.");
-  }, "Test mouse drags in increments on non-custom composited root scrollbar thumb.");
 }
 </script>
 </body>
diff --git a/third_party/blink/web_tests/flag-specific/disable-layout-ng/http/tests/xmlviewer/dumpAsText/mathml-expected.txt b/third_party/blink/web_tests/flag-specific/disable-layout-ng/http/tests/xmlviewer/dumpAsText/mathml-expected.txt
new file mode 100644
index 0000000..337e9cd
--- /dev/null
+++ b/third_party/blink/web_tests/flag-specific/disable-layout-ng/http/tests/xmlviewer/dumpAsText/mathml-expected.txt
@@ -0,0 +1,16 @@
+This XML file does not appear to have any style information associated with it. The document tree is shown below.
+
+<!--
+ If you can see this, this test has failed, except if you are
+     not using a MathML-aware client. 
+-->
+<FAIL xmlns:a="http://www.w3.org/1998/Math/MathML">
+<header>
+This tests that xml viewer is not used when there is a tag in MATHML namespace.
+</header>
+<a:math>
+<a:mrow>
+<a:mi>SUCCESS</a:mi>
+</a:mrow>
+</a:math>
+</FAIL>
diff --git a/third_party/blink/web_tests/flag-specific/disable-layout-ng/webexposed/global-interface-listing-expected.txt b/third_party/blink/web_tests/flag-specific/disable-layout-ng/webexposed/global-interface-listing-expected.txt
new file mode 100644
index 0000000..f8fe5b4
--- /dev/null
+++ b/third_party/blink/web_tests/flag-specific/disable-layout-ng/webexposed/global-interface-listing-expected.txt
@@ -0,0 +1,11581 @@
+This test documents all interface attributes and methods on the global window object and element instances.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+[INTERFACES]
+interface AbortController
+    attribute @@toStringTag
+    getter signal
+    method abort
+    method constructor
+interface AbortSignal : EventTarget
+    attribute @@toStringTag
+    getter aborted
+    getter onabort
+    method constructor
+    setter onabort
+interface AbsoluteOrientationSensor : OrientationSensor
+    attribute @@toStringTag
+    method constructor
+interface Accelerometer : Sensor
+    attribute @@toStringTag
+    getter x
+    getter y
+    getter z
+    method constructor
+interface AccessibleNode : EventTarget
+    attribute @@toStringTag
+    getter activeDescendant
+    getter atomic
+    getter autocomplete
+    getter busy
+    getter checked
+    getter childNodes
+    getter colCount
+    getter colIndex
+    getter colSpan
+    getter controls
+    getter current
+    getter describedBy
+    getter details
+    getter disabled
+    getter errorMessage
+    getter expanded
+    getter flowTo
+    getter hasPopUp
+    getter hidden
+    getter invalid
+    getter keyShortcuts
+    getter label
+    getter labeledBy
+    getter level
+    getter live
+    getter modal
+    getter multiline
+    getter multiselectable
+    getter onaccessibleclick
+    getter onaccessiblecontextmenu
+    getter onaccessibledecrement
+    getter onaccessiblefocus
+    getter onaccessibleincrement
+    getter onaccessiblescrollintoview
+    getter orientation
+    getter owns
+    getter placeholder
+    getter posInSet
+    getter pressed
+    getter readOnly
+    getter relevant
+    getter required
+    getter role
+    getter roleDescription
+    getter rowCount
+    getter rowIndex
+    getter rowSpan
+    getter selected
+    getter setSize
+    getter sort
+    getter valueMax
+    getter valueMin
+    getter valueNow
+    getter valueText
+    method appendChild
+    method constructor
+    method removeChild
+    setter activeDescendant
+    setter atomic
+    setter autocomplete
+    setter busy
+    setter checked
+    setter colCount
+    setter colIndex
+    setter colSpan
+    setter controls
+    setter current
+    setter describedBy
+    setter details
+    setter disabled
+    setter errorMessage
+    setter expanded
+    setter flowTo
+    setter hasPopUp
+    setter hidden
+    setter invalid
+    setter keyShortcuts
+    setter label
+    setter labeledBy
+    setter level
+    setter live
+    setter modal
+    setter multiline
+    setter multiselectable
+    setter onaccessibleclick
+    setter onaccessiblecontextmenu
+    setter onaccessibledecrement
+    setter onaccessiblefocus
+    setter onaccessibleincrement
+    setter onaccessiblescrollintoview
+    setter orientation
+    setter owns
+    setter placeholder
+    setter posInSet
+    setter pressed
+    setter readOnly
+    setter relevant
+    setter required
+    setter role
+    setter roleDescription
+    setter rowCount
+    setter rowIndex
+    setter rowSpan
+    setter selected
+    setter setSize
+    setter sort
+    setter valueMax
+    setter valueMin
+    setter valueNow
+    setter valueText
+interface AccessibleNodeList
+    attribute @@toStringTag
+    getter length
+    method @@iterator
+    method add
+    method constructor
+    method item
+    method remove
+    setter length
+interface ActivateInvisibleEvent : Event
+    attribute @@toStringTag
+    getter activatedElement
+    method constructor
+interface AmbientLightSensor : Sensor
+    attribute @@toStringTag
+    getter illuminance
+    method constructor
+interface AnalyserNode : AudioNode
+    attribute @@toStringTag
+    getter fftSize
+    getter frequencyBinCount
+    getter maxDecibels
+    getter minDecibels
+    getter smoothingTimeConstant
+    method constructor
+    method getByteFrequencyData
+    method getByteTimeDomainData
+    method getFloatFrequencyData
+    method getFloatTimeDomainData
+    setter fftSize
+    setter maxDecibels
+    setter minDecibels
+    setter smoothingTimeConstant
+interface Animation : EventTarget
+    attribute @@toStringTag
+    getter currentTime
+    getter effect
+    getter finished
+    getter id
+    getter oncancel
+    getter onfinish
+    getter pending
+    getter playState
+    getter playbackRate
+    getter ready
+    getter startTime
+    getter timeline
+    method cancel
+    method constructor
+    method finish
+    method pause
+    method play
+    method reverse
+    method updatePlaybackRate
+    setter currentTime
+    setter effect
+    setter id
+    setter oncancel
+    setter onfinish
+    setter playbackRate
+    setter startTime
+interface AnimationEffect
+    attribute @@toStringTag
+    method constructor
+    method getComputedTiming
+    method getTiming
+    method updateTiming
+interface AnimationEvent : Event
+    attribute @@toStringTag
+    getter animationName
+    getter elapsedTime
+    getter pseudoElement
+    method constructor
+interface AnimationPlaybackEvent : Event
+    attribute @@toStringTag
+    getter currentTime
+    getter timelineTime
+    method constructor
+interface AnimationTimeline
+    attribute @@toStringTag
+    getter currentTime
+    method constructor
+interface ApplicationCache : EventTarget
+    attribute @@toStringTag
+    attribute CHECKING
+    attribute DOWNLOADING
+    attribute IDLE
+    attribute OBSOLETE
+    attribute UNCACHED
+    attribute UPDATEREADY
+    getter oncached
+    getter onchecking
+    getter ondownloading
+    getter onerror
+    getter onnoupdate
+    getter onobsolete
+    getter onprogress
+    getter onupdateready
+    getter status
+    method abort
+    method constructor
+    method swapCache
+    method update
+    setter oncached
+    setter onchecking
+    setter ondownloading
+    setter onerror
+    setter onnoupdate
+    setter onobsolete
+    setter onprogress
+    setter onupdateready
+interface ApplicationCacheErrorEvent : Event
+    attribute @@toStringTag
+    getter message
+    getter reason
+    getter status
+    getter url
+    method constructor
+interface Attr : Node
+    attribute @@toStringTag
+    getter localName
+    getter name
+    getter namespaceURI
+    getter ownerElement
+    getter prefix
+    getter specified
+    getter value
+    method constructor
+    setter value
+interface Audio
+    attribute @@toStringTag
+    method constructor
+interface AudioBuffer
+    attribute @@toStringTag
+    getter duration
+    getter length
+    getter numberOfChannels
+    getter sampleRate
+    method constructor
+    method copyFromChannel
+    method copyToChannel
+    method getChannelData
+interface AudioBufferSourceNode : AudioScheduledSourceNode
+    attribute @@toStringTag
+    getter buffer
+    getter detune
+    getter loop
+    getter loopEnd
+    getter loopStart
+    getter playbackRate
+    method constructor
+    method start
+    setter buffer
+    setter loop
+    setter loopEnd
+    setter loopStart
+interface AudioContext : BaseAudioContext
+    attribute @@toStringTag
+    getter baseLatency
+    method close
+    method constructor
+    method createMediaElementSource
+    method createMediaStreamDestination
+    method createMediaStreamSource
+    method getOutputTimestamp
+    method resume
+    method suspend
+interface AudioDestinationNode : AudioNode
+    attribute @@toStringTag
+    getter maxChannelCount
+    method constructor
+interface AudioListener
+    attribute @@toStringTag
+    getter forwardX
+    getter forwardY
+    getter forwardZ
+    getter positionX
+    getter positionY
+    getter positionZ
+    getter upX
+    getter upY
+    getter upZ
+    method constructor
+    method setOrientation
+    method setPosition
+interface AudioNode : EventTarget
+    attribute @@toStringTag
+    getter channelCount
+    getter channelCountMode
+    getter channelInterpretation
+    getter context
+    getter numberOfInputs
+    getter numberOfOutputs
+    method connect
+    method constructor
+    method disconnect
+    setter channelCount
+    setter channelCountMode
+    setter channelInterpretation
+interface AudioParam
+    attribute @@toStringTag
+    getter automationRate
+    getter defaultValue
+    getter maxValue
+    getter minValue
+    getter value
+    method cancelAndHoldAtTime
+    method cancelScheduledValues
+    method constructor
+    method exponentialRampToValueAtTime
+    method linearRampToValueAtTime
+    method setTargetAtTime
+    method setValueAtTime
+    method setValueCurveAtTime
+    setter automationRate
+    setter value
+interface AudioParamMap
+    attribute @@toStringTag
+    getter size
+    method @@iterator
+    method constructor
+    method entries
+    method forEach
+    method get
+    method has
+    method keys
+    method values
+interface AudioProcessingEvent : Event
+    attribute @@toStringTag
+    getter inputBuffer
+    getter outputBuffer
+    getter playbackTime
+    method constructor
+interface AudioScheduledSourceNode : AudioNode
+    attribute @@toStringTag
+    getter onended
+    method constructor
+    method start
+    method stop
+    setter onended
+interface AudioTrack
+    attribute @@toStringTag
+    getter enabled
+    getter id
+    getter kind
+    getter label
+    getter language
+    getter sourceBuffer
+    method constructor
+    setter enabled
+interface AudioTrackList : EventTarget
+    attribute @@toStringTag
+    getter length
+    getter onaddtrack
+    getter onchange
+    getter onremovetrack
+    method @@iterator
+    method constructor
+    method getTrackById
+    setter onaddtrack
+    setter onchange
+    setter onremovetrack
+interface AudioWorklet : Worklet
+    attribute @@toStringTag
+    method constructor
+interface AudioWorkletNode : AudioNode
+    attribute @@toStringTag
+    getter onprocessorerror
+    getter parameters
+    getter port
+    method constructor
+    setter onprocessorerror
+interface AuthenticatorAssertionResponse : AuthenticatorResponse
+    attribute @@toStringTag
+    getter authenticatorData
+    getter signature
+    getter userHandle
+    method constructor
+interface AuthenticatorAttestationResponse : AuthenticatorResponse
+    attribute @@toStringTag
+    getter attestationObject
+    method constructor
+    method getTransports
+interface AuthenticatorResponse
+    attribute @@toStringTag
+    getter clientDataJSON
+    method constructor
+interface BackgroundFetchManager
+    attribute @@toStringTag
+    method constructor
+    method fetch
+    method get
+    method getIds
+interface BackgroundFetchRecord
+    attribute @@toStringTag
+    getter request
+    getter responseReady
+    method constructor
+interface BackgroundFetchRegistration : EventTarget
+    attribute @@toStringTag
+    getter downloadTotal
+    getter downloaded
+    getter failureReason
+    getter id
+    getter onprogress
+    getter recordsAvailable
+    getter result
+    getter uploadTotal
+    getter uploaded
+    method abort
+    method constructor
+    method match
+    method matchAll
+    setter onprogress
+interface BarProp
+    attribute @@toStringTag
+    getter visible
+    method constructor
+interface BarcodeDetector
+    static method getSupportedFormats
+    attribute @@toStringTag
+    method constructor
+    method detect
+interface BaseAudioContext : EventTarget
+    attribute @@toStringTag
+    getter audioWorklet
+    getter currentTime
+    getter destination
+    getter listener
+    getter onstatechange
+    getter sampleRate
+    getter state
+    method constructor
+    method createAnalyser
+    method createBiquadFilter
+    method createBuffer
+    method createBufferSource
+    method createChannelMerger
+    method createChannelSplitter
+    method createConstantSource
+    method createConvolver
+    method createDelay
+    method createDynamicsCompressor
+    method createGain
+    method createIIRFilter
+    method createOscillator
+    method createPanner
+    method createPeriodicWave
+    method createScriptProcessor
+    method createStereoPanner
+    method createWaveShaper
+    method decodeAudioData
+    setter onstatechange
+interface BatteryManager : EventTarget
+    attribute @@toStringTag
+    getter charging
+    getter chargingTime
+    getter dischargingTime
+    getter level
+    getter onchargingchange
+    getter onchargingtimechange
+    getter ondischargingtimechange
+    getter onlevelchange
+    method constructor
+    setter onchargingchange
+    setter onchargingtimechange
+    setter ondischargingtimechange
+    setter onlevelchange
+interface BeforeInstallPromptEvent : Event
+    attribute @@toStringTag
+    getter platforms
+    getter userChoice
+    method constructor
+    method prompt
+interface BeforeUnloadEvent : Event
+    attribute @@toStringTag
+    getter returnValue
+    method constructor
+    setter returnValue
+interface BiquadFilterNode : AudioNode
+    attribute @@toStringTag
+    getter Q
+    getter detune
+    getter frequency
+    getter gain
+    getter type
+    method constructor
+    method getFrequencyResponse
+    setter type
+interface Blob
+    attribute @@toStringTag
+    getter size
+    getter type
+    method arrayBuffer
+    method constructor
+    method slice
+    method stream
+    method text
+interface BlobEvent : Event
+    attribute @@toStringTag
+    getter data
+    getter timecode
+    method constructor
+interface BluetoothAdvertisingEvent : Event
+    attribute @@toStringTag
+    getter appearance
+    getter device
+    getter manufacturerData
+    getter name
+    getter rssi
+    getter serviceData
+    getter txPower
+    getter uuids
+    method constructor
+interface BluetoothLEScan
+    attribute @@toStringTag
+    getter acceptAllAdvertisements
+    getter active
+    getter filters
+    getter keepRepeatedDevices
+    method constructor
+    method stop
+interface BluetoothManufacturerDataMap
+    attribute @@toStringTag
+    getter size
+    method @@iterator
+    method constructor
+    method entries
+    method forEach
+    method get
+    method has
+    method keys
+    method values
+interface BluetoothServiceDataMap
+    attribute @@toStringTag
+    getter size
+    method @@iterator
+    method constructor
+    method entries
+    method forEach
+    method get
+    method has
+    method keys
+    method values
+interface BroadcastChannel : EventTarget
+    attribute @@toStringTag
+    getter name
+    getter onmessage
+    getter onmessageerror
+    method close
+    method constructor
+    method postMessage
+    setter onmessage
+    setter onmessageerror
+interface ByteLengthQueuingStrategy
+    attribute @@toStringTag
+    getter highWaterMark
+    getter size
+    method constructor
+interface CDATASection : Text
+    attribute @@toStringTag
+    method constructor
+interface CSS
+    static getter animationWorklet
+    static getter layoutWorklet
+    static getter paintWorklet
+    static method Hz
+    static method Q
+    static method ch
+    static method cm
+    static method deg
+    static method dpcm
+    static method dpi
+    static method dppx
+    static method em
+    static method escape
+    static method ex
+    static method fr
+    static method grad
+    static method in
+    static method kHz
+    static method mm
+    static method ms
+    static method number
+    static method pc
+    static method percent
+    static method pt
+    static method px
+    static method rad
+    static method registerProperty
+    static method rem
+    static method s
+    static method supports
+    static method turn
+    static method vh
+    static method vmax
+    static method vmin
+    static method vw
+    attribute @@toStringTag
+    method constructor
+interface CSSAnimation : Animation
+    attribute @@toStringTag
+    getter animationName
+    method constructor
+interface CSSConditionRule : CSSGroupingRule
+    attribute @@toStringTag
+    getter conditionText
+    method constructor
+interface CSSFontFaceRule : CSSRule
+    attribute @@toStringTag
+    getter style
+    method constructor
+interface CSSGroupingRule : CSSRule
+    attribute @@toStringTag
+    getter cssRules
+    method constructor
+    method deleteRule
+    method insertRule
+interface CSSImageValue : CSSStyleValue
+    attribute @@toStringTag
+    method constructor
+interface CSSImportRule : CSSRule
+    attribute @@toStringTag
+    getter href
+    getter media
+    getter styleSheet
+    method constructor
+    setter media
+interface CSSKeyframeRule : CSSRule
+    attribute @@toStringTag
+    getter keyText
+    getter style
+    method constructor
+    setter keyText
+    setter style
+interface CSSKeyframesRule : CSSRule
+    attribute @@toStringTag
+    getter cssRules
+    getter name
+    method appendRule
+    method constructor
+    method deleteRule
+    method findRule
+    setter name
+interface CSSKeywordValue : CSSStyleValue
+    attribute @@toStringTag
+    getter value
+    method constructor
+    setter value
+interface CSSMathInvert : CSSMathValue
+    attribute @@toStringTag
+    getter value
+    method constructor
+interface CSSMathMax : CSSMathValue
+    attribute @@toStringTag
+    getter values
+    method constructor
+interface CSSMathMin : CSSMathValue
+    attribute @@toStringTag
+    getter values
+    method constructor
+interface CSSMathNegate : CSSMathValue
+    attribute @@toStringTag
+    getter value
+    method constructor
+interface CSSMathProduct : CSSMathValue
+    attribute @@toStringTag
+    getter values
+    method constructor
+interface CSSMathSum : CSSMathValue
+    attribute @@toStringTag
+    getter values
+    method constructor
+interface CSSMathValue : CSSNumericValue
+    attribute @@toStringTag
+    getter operator
+    method constructor
+interface CSSMatrixComponent : CSSTransformComponent
+    attribute @@toStringTag
+    getter matrix
+    method constructor
+    setter matrix
+interface CSSMediaRule : CSSConditionRule
+    attribute @@toStringTag
+    getter media
+    method constructor
+    setter media
+interface CSSNamespaceRule : CSSRule
+    attribute @@toStringTag
+    getter namespaceURI
+    getter prefix
+    method constructor
+interface CSSNumericArray
+    attribute @@toStringTag
+    getter length
+    method @@iterator
+    method constructor
+    method entries
+    method forEach
+    method keys
+    method values
+interface CSSNumericValue : CSSStyleValue
+    attribute @@toStringTag
+    method add
+    method constructor
+    method div
+    method equals
+    method max
+    method min
+    method mul
+    method sub
+    method to
+    method toSum
+    method type
+interface CSSPageRule : CSSRule
+    attribute @@toStringTag
+    getter selectorText
+    getter style
+    method constructor
+    setter selectorText
+    setter style
+interface CSSPerspective : CSSTransformComponent
+    attribute @@toStringTag
+    getter length
+    method constructor
+    setter length
+interface CSSPositionValue : CSSStyleValue
+    attribute @@toStringTag
+    getter x
+    getter y
+    method constructor
+    setter x
+    setter y
+interface CSSRotate : CSSTransformComponent
+    attribute @@toStringTag
+    getter angle
+    getter x
+    getter y
+    getter z
+    method constructor
+    setter angle
+    setter x
+    setter y
+    setter z
+interface CSSRule
+    attribute @@toStringTag
+    attribute CHARSET_RULE
+    attribute FONT_FACE_RULE
+    attribute IMPORT_RULE
+    attribute KEYFRAMES_RULE
+    attribute KEYFRAME_RULE
+    attribute MEDIA_RULE
+    attribute NAMESPACE_RULE
+    attribute PAGE_RULE
+    attribute STYLE_RULE
+    attribute SUPPORTS_RULE
+    attribute VIEWPORT_RULE
+    getter cssText
+    getter parentRule
+    getter parentStyleSheet
+    getter type
+    method constructor
+    setter cssText
+interface CSSRuleList
+    attribute @@toStringTag
+    getter length
+    method @@iterator
+    method constructor
+    method item
+interface CSSScale : CSSTransformComponent
+    attribute @@toStringTag
+    getter x
+    getter y
+    getter z
+    method constructor
+    setter x
+    setter y
+    setter z
+interface CSSSkew : CSSTransformComponent
+    attribute @@toStringTag
+    getter ax
+    getter ay
+    method constructor
+    setter ax
+    setter ay
+interface CSSSkewX : CSSTransformComponent
+    attribute @@toStringTag
+    getter ax
+    method constructor
+    setter ax
+interface CSSSkewY : CSSTransformComponent
+    attribute @@toStringTag
+    getter ay
+    method constructor
+    setter ay
+interface CSSStyleDeclaration
+    attribute @@toStringTag
+    getter cssFloat
+    getter cssText
+    getter length
+    getter parentRule
+    method @@iterator
+    method constructor
+    method getPropertyPriority
+    method getPropertyValue
+    method item
+    method removeProperty
+    method setProperty
+    setter cssFloat
+    setter cssText
+interface CSSStyleRule : CSSRule
+    attribute @@toStringTag
+    getter selectorText
+    getter style
+    getter styleMap
+    method constructor
+    setter selectorText
+    setter style
+interface CSSStyleSheet : StyleSheet
+    attribute @@toStringTag
+    getter cssRules
+    getter ownerRule
+    getter rules
+    method addRule
+    method constructor
+    method deleteRule
+    method insertRule
+    method removeRule
+    method replace
+    method replaceSync
+interface CSSStyleValue
+    static method parse
+    static method parseAll
+    attribute @@toStringTag
+    method constructor
+    method toString
+interface CSSSupportsRule : CSSConditionRule
+    attribute @@toStringTag
+    method constructor
+interface CSSTransformComponent
+    attribute @@toStringTag
+    getter is2D
+    method constructor
+    method toMatrix
+    method toString
+    setter is2D
+interface CSSTransformValue : CSSStyleValue
+    attribute @@toStringTag
+    getter is2D
+    getter length
+    method @@iterator
+    method constructor
+    method entries
+    method forEach
+    method keys
+    method toMatrix
+    method values
+interface CSSTransition : Animation
+    attribute @@toStringTag
+    getter transitionProperty
+    method constructor
+interface CSSTranslate : CSSTransformComponent
+    attribute @@toStringTag
+    getter x
+    getter y
+    getter z
+    method constructor
+    setter x
+    setter y
+    setter z
+interface CSSUnitValue : CSSNumericValue
+    attribute @@toStringTag
+    getter unit
+    getter value
+    method constructor
+    setter value
+interface CSSUnparsedValue : CSSStyleValue
+    attribute @@toStringTag
+    getter length
+    method @@iterator
+    method constructor
+    method entries
+    method forEach
+    method keys
+    method values
+interface CSSVariableReferenceValue
+    attribute @@toStringTag
+    getter fallback
+    getter variable
+    method constructor
+    setter variable
+interface CSSViewportRule : CSSRule
+    attribute @@toStringTag
+    getter style
+    method constructor
+interface Cache
+    attribute @@toStringTag
+    method add
+    method addAll
+    method constructor
+    method delete
+    method keys
+    method match
+    method matchAll
+    method put
+interface CacheStorage
+    attribute @@toStringTag
+    method constructor
+    method delete
+    method has
+    method keys
+    method match
+    method open
+interface CanvasCaptureMediaStreamTrack : MediaStreamTrack
+    attribute @@toStringTag
+    getter canvas
+    method constructor
+    method requestFrame
+interface CanvasGradient
+    attribute @@toStringTag
+    method addColorStop
+    method constructor
+interface CanvasPattern
+    attribute @@toStringTag
+    method constructor
+    method setTransform
+interface CanvasRenderingContext2D
+    attribute @@toStringTag
+    getter canvas
+    getter direction
+    getter fillStyle
+    getter filter
+    getter font
+    getter globalAlpha
+    getter globalCompositeOperation
+    getter imageSmoothingEnabled
+    getter imageSmoothingQuality
+    getter lineCap
+    getter lineDashOffset
+    getter lineJoin
+    getter lineWidth
+    getter miterLimit
+    getter shadowBlur
+    getter shadowColor
+    getter shadowOffsetX
+    getter shadowOffsetY
+    getter strokeStyle
+    getter textAlign
+    getter textBaseline
+    method addHitRegion
+    method arc
+    method arcTo
+    method beginPath
+    method bezierCurveTo
+    method clearHitRegions
+    method clearRect
+    method clip
+    method closePath
+    method constructor
+    method createImageData
+    method createLinearGradient
+    method createPattern
+    method createRadialGradient
+    method drawFocusIfNeeded
+    method drawImage
+    method ellipse
+    method fill
+    method fillRect
+    method fillText
+    method getContextAttributes
+    method getImageData
+    method getLineDash
+    method getTransform
+    method isContextLost
+    method isPointInPath
+    method isPointInStroke
+    method lineTo
+    method measureText
+    method moveTo
+    method putImageData
+    method quadraticCurveTo
+    method rect
+    method removeHitRegion
+    method resetTransform
+    method restore
+    method rotate
+    method save
+    method scale
+    method scrollPathIntoView
+    method setLineDash
+    method setTransform
+    method stroke
+    method strokeRect
+    method strokeText
+    method transform
+    method translate
+    setter direction
+    setter fillStyle
+    setter filter
+    setter font
+    setter globalAlpha
+    setter globalCompositeOperation
+    setter imageSmoothingEnabled
+    setter imageSmoothingQuality
+    setter lineCap
+    setter lineDashOffset
+    setter lineJoin
+    setter lineWidth
+    setter miterLimit
+    setter shadowBlur
+    setter shadowColor
+    setter shadowOffsetX
+    setter shadowOffsetY
+    setter strokeStyle
+    setter textAlign
+    setter textBaseline
+interface ChannelMergerNode : AudioNode
+    attribute @@toStringTag
+    method constructor
+interface ChannelSplitterNode : AudioNode
+    attribute @@toStringTag
+    method constructor
+interface CharacterData : Node
+    attribute @@toStringTag
+    attribute @@unscopables
+    getter data
+    getter length
+    getter nextElementSibling
+    getter previousElementSibling
+    method after
+    method appendData
+    method before
+    method constructor
+    method deleteData
+    method insertData
+    method remove
+    method replaceData
+    method replaceWith
+    method substringData
+    setter data
+interface Clipboard : EventTarget
+    attribute @@toStringTag
+    method constructor
+    method read
+    method readText
+    method write
+    method writeText
+interface ClipboardEvent : Event
+    attribute @@toStringTag
+    getter clipboardData
+    method constructor
+interface ClipboardItem
+    attribute @@toStringTag
+    getter types
+    method constructor
+    method getType
+interface CloseEvent : Event
+    attribute @@toStringTag
+    getter code
+    getter reason
+    getter wasClean
+    method constructor
+interface Comment : CharacterData
+    attribute @@toStringTag
+    method constructor
+interface CompositionEvent : UIEvent
+    attribute @@toStringTag
+    getter data
+    method constructor
+    method initCompositionEvent
+interface CompressionStream
+    attribute @@toStringTag
+    getter readable
+    getter writable
+    method constructor
+interface ComputedAccessibleNode
+    attribute @@toStringTag
+    getter atomic
+    getter autocomplete
+    getter busy
+    getter checked
+    getter colCount
+    getter colIndex
+    getter colSpan
+    getter disabled
+    getter expanded
+    getter firstChild
+    getter keyShortcuts
+    getter lastChild
+    getter level
+    getter modal
+    getter multiline
+    getter multiselectable
+    getter name
+    getter nextSibling
+    getter parent
+    getter placeholder
+    getter posInSet
+    getter previousSibling
+    getter readOnly
+    getter required
+    getter role
+    getter roleDescription
+    getter rowCount
+    getter rowIndex
+    getter rowSpan
+    getter selected
+    getter setSize
+    getter valueMax
+    getter valueMin
+    getter valueNow
+    getter valueText
+    method constructor
+    method ensureUpToDate
+interface ConstantSourceNode : AudioScheduledSourceNode
+    attribute @@toStringTag
+    getter offset
+    method constructor
+interface ContactAddress : PaymentAddress
+    attribute @@toStringTag
+    method constructor
+interface ContactsManager
+    attribute @@toStringTag
+    method constructor
+    method getProperties
+    method select
+interface ContentIndex
+    attribute @@toStringTag
+    method add
+    method constructor
+    method delete
+    method getAll
+interface ConvolverNode : AudioNode
+    attribute @@toStringTag
+    getter buffer
+    getter normalize
+    method constructor
+    setter buffer
+    setter normalize
+interface CookieChangeEvent : Event
+    attribute @@toStringTag
+    getter changed
+    getter deleted
+    method constructor
+interface CookieStore : EventTarget
+    attribute @@toStringTag
+    getter onchange
+    method constructor
+    method delete
+    method get
+    method getAll
+    method set
+    setter onchange
+interface CountQueuingStrategy
+    attribute @@toStringTag
+    getter highWaterMark
+    getter size
+    method constructor
+interface Credential
+    attribute @@toStringTag
+    getter id
+    getter type
+    method constructor
+interface CredentialsContainer
+    attribute @@toStringTag
+    method constructor
+    method create
+    method get
+    method preventSilentAccess
+    method store
+interface Crypto
+    attribute @@toStringTag
+    getter subtle
+    method constructor
+    method getRandomValues
+interface CryptoKey
+    attribute @@toStringTag
+    getter algorithm
+    getter extractable
+    getter type
+    getter usages
+    method constructor
+interface CustomElementRegistry
+    attribute @@toStringTag
+    method constructor
+    method define
+    method get
+    method upgrade
+    method whenDefined
+interface CustomEvent : Event
+    attribute @@toStringTag
+    getter detail
+    method constructor
+    method initCustomEvent
+interface DOMError
+    attribute @@toStringTag
+    getter message
+    getter name
+    method constructor
+interface DOMException
+    attribute @@toStringTag
+    attribute ABORT_ERR
+    attribute DATA_CLONE_ERR
+    attribute DOMSTRING_SIZE_ERR
+    attribute HIERARCHY_REQUEST_ERR
+    attribute INDEX_SIZE_ERR
+    attribute INUSE_ATTRIBUTE_ERR
+    attribute INVALID_ACCESS_ERR
+    attribute INVALID_CHARACTER_ERR
+    attribute INVALID_MODIFICATION_ERR
+    attribute INVALID_NODE_TYPE_ERR
+    attribute INVALID_STATE_ERR
+    attribute NAMESPACE_ERR
+    attribute NETWORK_ERR
+    attribute NOT_FOUND_ERR
+    attribute NOT_SUPPORTED_ERR
+    attribute NO_DATA_ALLOWED_ERR
+    attribute NO_MODIFICATION_ALLOWED_ERR
+    attribute QUOTA_EXCEEDED_ERR
+    attribute SECURITY_ERR
+    attribute SYNTAX_ERR
+    attribute TIMEOUT_ERR
+    attribute TYPE_MISMATCH_ERR
+    attribute URL_MISMATCH_ERR
+    attribute VALIDATION_ERR
+    attribute WRONG_DOCUMENT_ERR
+    getter code
+    getter message
+    getter name
+    method constructor
+interface DOMImplementation
+    attribute @@toStringTag
+    method constructor
+    method createDocument
+    method createDocumentType
+    method createHTMLDocument
+    method hasFeature
+interface DOMMatrix : DOMMatrixReadOnly
+    attribute @@toStringTag
+    getter a
+    getter b
+    getter c
+    getter d
+    getter e
+    getter f
+    getter m11
+    getter m12
+    getter m13
+    getter m14
+    getter m21
+    getter m22
+    getter m23
+    getter m24
+    getter m31
+    getter m32
+    getter m33
+    getter m34
+    getter m41
+    getter m42
+    getter m43
+    getter m44
+    method constructor
+    method invertSelf
+    method multiplySelf
+    method preMultiplySelf
+    method rotateAxisAngleSelf
+    method rotateFromVectorSelf
+    method rotateSelf
+    method scale3dSelf
+    method scaleSelf
+    method setMatrixValue
+    method skewXSelf
+    method skewYSelf
+    method translateSelf
+    setter a
+    setter b
+    setter c
+    setter d
+    setter e
+    setter f
+    setter m11
+    setter m12
+    setter m13
+    setter m14
+    setter m21
+    setter m22
+    setter m23
+    setter m24
+    setter m31
+    setter m32
+    setter m33
+    setter m34
+    setter m41
+    setter m42
+    setter m43
+    setter m44
+interface DOMMatrixReadOnly
+    static method fromFloat32Array
+    static method fromFloat64Array
+    static method fromMatrix
+    attribute @@toStringTag
+    getter a
+    getter b
+    getter c
+    getter d
+    getter e
+    getter f
+    getter is2D
+    getter isIdentity
+    getter m11
+    getter m12
+    getter m13
+    getter m14
+    getter m21
+    getter m22
+    getter m23
+    getter m24
+    getter m31
+    getter m32
+    getter m33
+    getter m34
+    getter m41
+    getter m42
+    getter m43
+    getter m44
+    method constructor
+    method flipX
+    method flipY
+    method inverse
+    method multiply
+    method rotate
+    method rotateAxisAngle
+    method rotateFromVector
+    method scale
+    method scale3d
+    method scaleNonUniform
+    method skewX
+    method skewY
+    method toFloat32Array
+    method toFloat64Array
+    method toJSON
+    method toString
+    method transformPoint
+    method translate
+interface DOMParser
+    attribute @@toStringTag
+    method constructor
+    method parseFromString
+interface DOMPoint : DOMPointReadOnly
+    attribute @@toStringTag
+    getter w
+    getter x
+    getter y
+    getter z
+    method constructor
+    setter w
+    setter x
+    setter y
+    setter z
+interface DOMPointReadOnly
+    static method fromPoint
+    attribute @@toStringTag
+    getter w
+    getter x
+    getter y
+    getter z
+    method constructor
+    method matrixTransform
+    method toJSON
+interface DOMQuad
+    static method fromQuad
+    static method fromRect
+    attribute @@toStringTag
+    getter p1
+    getter p2
+    getter p3
+    getter p4
+    method constructor
+    method getBounds
+    method toJSON
+interface DOMRect : DOMRectReadOnly
+    attribute @@toStringTag
+    getter height
+    getter width
+    getter x
+    getter y
+    method constructor
+    setter height
+    setter width
+    setter x
+    setter y
+interface DOMRectList
+    attribute @@toStringTag
+    getter length
+    method @@iterator
+    method constructor
+    method item
+interface DOMRectReadOnly
+    static method fromRect
+    attribute @@toStringTag
+    getter bottom
+    getter height
+    getter left
+    getter right
+    getter top
+    getter width
+    getter x
+    getter y
+    method constructor
+    method toJSON
+interface DOMStringList
+    attribute @@toStringTag
+    getter length
+    method @@iterator
+    method constructor
+    method contains
+    method item
+interface DOMStringMap
+    attribute @@toStringTag
+    method constructor
+interface DOMTokenList
+    attribute @@toStringTag
+    getter length
+    getter value
+    method @@iterator
+    method add
+    method constructor
+    method contains
+    method entries
+    method forEach
+    method item
+    method keys
+    method remove
+    method replace
+    method supports
+    method toString
+    method toggle
+    method values
+    setter value
+interface DataTransfer
+    attribute @@toStringTag
+    getter dropEffect
+    getter effectAllowed
+    getter files
+    getter items
+    getter types
+    method clearData
+    method constructor
+    method getData
+    method setData
+    method setDragImage
+    setter dropEffect
+    setter effectAllowed
+interface DataTransferItem
+    attribute @@toStringTag
+    getter kind
+    getter type
+    method constructor
+    method getAsFile
+    method getAsString
+    method webkitGetAsEntry
+interface DataTransferItemList
+    attribute @@toStringTag
+    getter length
+    method @@iterator
+    method add
+    method clear
+    method constructor
+    method remove
+interface DecompressionStream
+    attribute @@toStringTag
+    getter readable
+    getter writable
+    method constructor
+interface DelayNode : AudioNode
+    attribute @@toStringTag
+    getter delayTime
+    method constructor
+interface DetectedBarcode
+    attribute @@toStringTag
+    getter boundingBox
+    getter cornerPoints
+    getter format
+    getter rawValue
+    method constructor
+interface DetectedFace
+    attribute @@toStringTag
+    getter boundingBox
+    getter landmarks
+    method constructor
+interface DetectedText
+    attribute @@toStringTag
+    getter boundingBox
+    getter cornerPoints
+    getter rawValue
+    method constructor
+interface DeviceMotionEvent : Event
+    attribute @@toStringTag
+    getter acceleration
+    getter accelerationIncludingGravity
+    getter interval
+    getter rotationRate
+    method constructor
+interface DeviceMotionEventAcceleration
+    attribute @@toStringTag
+    getter x
+    getter y
+    getter z
+    method constructor
+interface DeviceMotionEventRotationRate
+    attribute @@toStringTag
+    getter alpha
+    getter beta
+    getter gamma
+    method constructor
+interface DeviceOrientationEvent : Event
+    attribute @@toStringTag
+    getter absolute
+    getter alpha
+    getter beta
+    getter gamma
+    method constructor
+interface Document : Node
+    attribute @@toStringTag
+    attribute @@unscopables
+    getter URL
+    getter activeElement
+    getter addressSpace
+    getter adoptedStyleSheets
+    getter alinkColor
+    getter all
+    getter anchors
+    getter applets
+    getter bgColor
+    getter body
+    getter characterSet
+    getter charset
+    getter childElementCount
+    getter children
+    getter compatMode
+    getter contentType
+    getter cookie
+    getter currentScript
+    getter defaultView
+    getter designMode
+    getter dir
+    getter doctype
+    getter documentElement
+    getter documentURI
+    getter domain
+    getter embeds
+    getter featurePolicy
+    getter fgColor
+    getter firstElementChild
+    getter fonts
+    getter forms
+    getter fullscreen
+    getter fullscreenElement
+    getter fullscreenEnabled
+    getter head
+    getter hidden
+    getter images
+    getter implementation
+    getter inputEncoding
+    getter lastElementChild
+    getter lastModified
+    getter linkColor
+    getter links
+    getter onabort
+    getter onactivateinvisible
+    getter onanimationend
+    getter onanimationiteration
+    getter onanimationstart
+    getter onauxclick
+    getter onbeforecopy
+    getter onbeforecut
+    getter onbeforepaste
+    getter onblur
+    getter oncancel
+    getter oncanplay
+    getter oncanplaythrough
+    getter onchange
+    getter onclick
+    getter onclose
+    getter oncontextmenu
+    getter oncopy
+    getter oncuechange
+    getter oncut
+    getter ondblclick
+    getter ondrag
+    getter ondragend
+    getter ondragenter
+    getter ondragleave
+    getter ondragover
+    getter ondragstart
+    getter ondrop
+    getter ondurationchange
+    getter onemptied
+    getter onended
+    getter onerror
+    getter onfocus
+    getter onformdata
+    getter onfreeze
+    getter onfullscreenchange
+    getter onfullscreenerror
+    getter ongotpointercapture
+    getter oninput
+    getter oninvalid
+    getter onkeydown
+    getter onkeypress
+    getter onkeyup
+    getter onload
+    getter onloadeddata
+    getter onloadedmetadata
+    getter onloadstart
+    getter onlostpointercapture
+    getter onmousedown
+    getter onmouseenter
+    getter onmouseleave
+    getter onmousemove
+    getter onmouseout
+    getter onmouseover
+    getter onmouseup
+    getter onmousewheel
+    getter onoverscroll
+    getter onpaste
+    getter onpause
+    getter onplay
+    getter onplaying
+    getter onpointercancel
+    getter onpointerdown
+    getter onpointerenter
+    getter onpointerleave
+    getter onpointerlockchange
+    getter onpointerlockerror
+    getter onpointermove
+    getter onpointerout
+    getter onpointerover
+    getter onpointerrawupdate
+    getter onpointerup
+    getter onprogress
+    getter onratechange
+    getter onreadystatechange
+    getter onrendersubtreeactivation
+    getter onreset
+    getter onresize
+    getter onresume
+    getter onscroll
+    getter onscrollend
+    getter onsearch
+    getter onsecuritypolicyviolation
+    getter onseeked
+    getter onseeking
+    getter onselect
+    getter onselectionchange
+    getter onselectstart
+    getter onstalled
+    getter onsubmit
+    getter onsuspend
+    getter ontimeupdate
+    getter ontoggle
+    getter ontouchcancel
+    getter ontouchend
+    getter ontouchmove
+    getter ontouchstart
+    getter ontransitionend
+    getter onvisibilitychange
+    getter onvolumechange
+    getter onwaiting
+    getter onwebkitfullscreenchange
+    getter onwebkitfullscreenerror
+    getter onwheel
+    getter pictureInPictureElement
+    getter pictureInPictureEnabled
+    getter plugins
+    getter pointerLockElement
+    getter readyState
+    getter referrer
+    getter rootElement
+    getter rootScroller
+    getter scripts
+    getter scrollingElement
+    getter styleSheets
+    getter timeline
+    getter title
+    getter visibilityState
+    getter vlinkColor
+    getter wasDiscarded
+    getter webkitCurrentFullScreenElement
+    getter webkitFullscreenElement
+    getter webkitFullscreenEnabled
+    getter webkitHidden
+    getter webkitIsFullScreen
+    getter webkitVisibilityState
+    getter xmlEncoding
+    getter xmlStandalone
+    getter xmlVersion
+    method adoptNode
+    method append
+    method captureEvents
+    method caretRangeFromPoint
+    method clear
+    method close
+    method constructor
+    method createAttribute
+    method createAttributeNS
+    method createCDATASection
+    method createComment
+    method createDocumentFragment
+    method createElement
+    method createElementNS
+    method createEvent
+    method createExpression
+    method createNSResolver
+    method createNodeIterator
+    method createProcessingInstruction
+    method createRange
+    method createTextNode
+    method createTreeWalker
+    method elementFromPoint
+    method elementsFromPoint
+    method evaluate
+    method execCommand
+    method exitFullscreen
+    method exitPictureInPicture
+    method exitPointerLock
+    method getAnimations
+    method getElementById
+    method getElementsByClassName
+    method getElementsByName
+    method getElementsByTagName
+    method getElementsByTagNameNS
+    method getSelection
+    method hasFocus
+    method hasStorageAccess
+    method importNode
+    method open
+    method prepend
+    method queryCommandEnabled
+    method queryCommandIndeterm
+    method queryCommandState
+    method queryCommandSupported
+    method queryCommandValue
+    method querySelector
+    method querySelectorAll
+    method registerElement
+    method releaseEvents
+    method requestStorageAccess
+    method webkitCancelFullScreen
+    method webkitExitFullscreen
+    method write
+    method writeln
+    setter adoptedStyleSheets
+    setter alinkColor
+    setter bgColor
+    setter body
+    setter cookie
+    setter designMode
+    setter dir
+    setter domain
+    setter fgColor
+    setter fullscreen
+    setter fullscreenElement
+    setter fullscreenEnabled
+    setter linkColor
+    setter onabort
+    setter onactivateinvisible
+    setter onanimationend
+    setter onanimationiteration
+    setter onanimationstart
+    setter onauxclick
+    setter onbeforecopy
+    setter onbeforecut
+    setter onbeforepaste
+    setter onblur
+    setter oncancel
+    setter oncanplay
+    setter oncanplaythrough
+    setter onchange
+    setter onclick
+    setter onclose
+    setter oncontextmenu
+    setter oncopy
+    setter oncuechange
+    setter oncut
+    setter ondblclick
+    setter ondrag
+    setter ondragend
+    setter ondragenter
+    setter ondragleave
+    setter ondragover
+    setter ondragstart
+    setter ondrop
+    setter ondurationchange
+    setter onemptied
+    setter onended
+    setter onerror
+    setter onfocus
+    setter onformdata
+    setter onfreeze
+    setter onfullscreenchange
+    setter onfullscreenerror
+    setter ongotpointercapture
+    setter oninput
+    setter oninvalid
+    setter onkeydown
+    setter onkeypress
+    setter onkeyup
+    setter onload
+    setter onloadeddata
+    setter onloadedmetadata
+    setter onloadstart
+    setter onlostpointercapture
+    setter onmousedown
+    setter onmouseenter
+    setter onmouseleave
+    setter onmousemove
+    setter onmouseout
+    setter onmouseover
+    setter onmouseup
+    setter onmousewheel
+    setter onoverscroll
+    setter onpaste
+    setter onpause
+    setter onplay
+    setter onplaying
+    setter onpointercancel
+    setter onpointerdown
+    setter onpointerenter
+    setter onpointerleave
+    setter onpointerlockchange
+    setter onpointerlockerror
+    setter onpointermove
+    setter onpointerout
+    setter onpointerover
+    setter onpointerrawupdate
+    setter onpointerup
+    setter onprogress
+    setter onratechange
+    setter onreadystatechange
+    setter onrendersubtreeactivation
+    setter onreset
+    setter onresize
+    setter onresume
+    setter onscroll
+    setter onscrollend
+    setter onsearch
+    setter onsecuritypolicyviolation
+    setter onseeked
+    setter onseeking
+    setter onselect
+    setter onselectionchange
+    setter onselectstart
+    setter onstalled
+    setter onsubmit
+    setter onsuspend
+    setter ontimeupdate
+    setter ontoggle
+    setter ontouchcancel
+    setter ontouchend
+    setter ontouchmove
+    setter ontouchstart
+    setter ontransitionend
+    setter onvisibilitychange
+    setter onvolumechange
+    setter onwaiting
+    setter onwebkitfullscreenchange
+    setter onwebkitfullscreenerror
+    setter onwheel
+    setter rootScroller
+    setter title
+    setter vlinkColor
+    setter xmlStandalone
+    setter xmlVersion
+interface DocumentFragment : Node
+    attribute @@toStringTag
+    attribute @@unscopables
+    getter childElementCount
+    getter children
+    getter firstElementChild
+    getter lastElementChild
+    method append
+    method constructor
+    method getElementById
+    method prepend
+    method querySelector
+    method querySelectorAll
+interface DocumentTimeline : AnimationTimeline
+    attribute @@toStringTag
+    method constructor
+interface DocumentType : Node
+    attribute @@toStringTag
+    attribute @@unscopables
+    getter name
+    getter publicId
+    getter systemId
+    method after
+    method before
+    method constructor
+    method remove
+    method replaceWith
+interface DragEvent : MouseEvent
+    attribute @@toStringTag
+    getter dataTransfer
+    method constructor
+interface DynamicsCompressorNode : AudioNode
+    attribute @@toStringTag
+    getter attack
+    getter knee
+    getter ratio
+    getter reduction
+    getter release
+    getter threshold
+    method constructor
+interface EditContext : EventTarget
+    attribute @@toStringTag
+    getter enterKeyHint
+    getter inputMode
+    getter inputPanelPolicy
+    getter oncompositionend
+    getter oncompositionstart
+    getter ontextformatupdate
+    getter ontextupdate
+    getter selectionEnd
+    getter selectionStart
+    getter text
+    method blur
+    method constructor
+    method focus
+    method updateLayout
+    method updateSelection
+    method updateText
+    setter enterKeyHint
+    setter inputMode
+    setter inputPanelPolicy
+    setter oncompositionend
+    setter oncompositionstart
+    setter ontextformatupdate
+    setter ontextupdate
+    setter selectionEnd
+    setter selectionStart
+    setter text
+interface Element : Node
+    attribute @@toStringTag
+    attribute @@unscopables
+    getter accessibleNode
+    getter ariaActiveDescendantElement
+    getter ariaAtomic
+    getter ariaAutoComplete
+    getter ariaBusy
+    getter ariaChecked
+    getter ariaColCount
+    getter ariaColIndex
+    getter ariaColSpan
+    getter ariaControlsElements
+    getter ariaCurrent
+    getter ariaDescribedByElements
+    getter ariaDetailsElement
+    getter ariaDisabled
+    getter ariaErrorMessageElement
+    getter ariaExpanded
+    getter ariaFlowToElements
+    getter ariaHasPopup
+    getter ariaHidden
+    getter ariaKeyShortcuts
+    getter ariaLabel
+    getter ariaLabelledByElements
+    getter ariaLevel
+    getter ariaLive
+    getter ariaModal
+    getter ariaMultiLine
+    getter ariaMultiSelectable
+    getter ariaOrientation
+    getter ariaOwnsElements
+    getter ariaPlaceholder
+    getter ariaPosInSet
+    getter ariaPressed
+    getter ariaReadOnly
+    getter ariaRelevant
+    getter ariaRequired
+    getter ariaRoleDescription
+    getter ariaRowCount
+    getter ariaRowIndex
+    getter ariaRowSpan
+    getter ariaSelected
+    getter ariaSort
+    getter ariaValueMax
+    getter ariaValueMin
+    getter ariaValueNow
+    getter ariaValueText
+    getter assignedSlot
+    getter attributeStyleMap
+    getter attributes
+    getter childElementCount
+    getter children
+    getter classList
+    getter className
+    getter clientHeight
+    getter clientLeft
+    getter clientTop
+    getter clientWidth
+    getter computedName
+    getter computedRole
+    getter elementTiming
+    getter firstElementChild
+    getter id
+    getter innerHTML
+    getter invisible
+    getter lastElementChild
+    getter localName
+    getter namespaceURI
+    getter nextElementSibling
+    getter onbeforecopy
+    getter onbeforecut
+    getter onbeforepaste
+    getter onfullscreenchange
+    getter onfullscreenerror
+    getter onsearch
+    getter onwebkitfullscreenchange
+    getter onwebkitfullscreenerror
+    getter outerHTML
+    getter part
+    getter prefix
+    getter previousElementSibling
+    getter renderSubtree
+    getter role
+    getter scrollHeight
+    getter scrollLeft
+    getter scrollTop
+    getter scrollWidth
+    getter shadowRoot
+    getter slot
+    getter tagName
+    method after
+    method animate
+    method append
+    method attachShadow
+    method before
+    method closest
+    method computedStyleMap
+    method constructor
+    method createShadowRoot
+    method getAnimations
+    method getAttribute
+    method getAttributeNS
+    method getAttributeNames
+    method getAttributeNode
+    method getAttributeNodeNS
+    method getBoundingClientRect
+    method getClientRects
+    method getDestinationInsertionPoints
+    method getElementsByClassName
+    method getElementsByTagName
+    method getElementsByTagNameNS
+    method hasAttribute
+    method hasAttributeNS
+    method hasAttributes
+    method hasPointerCapture
+    method insertAdjacentElement
+    method insertAdjacentHTML
+    method insertAdjacentText
+    method matches
+    method prepend
+    method querySelector
+    method querySelectorAll
+    method releasePointerCapture
+    method remove
+    method removeAttribute
+    method removeAttributeNS
+    method removeAttributeNode
+    method replaceWith
+    method requestFullscreen
+    method requestPointerLock
+    method resetSubtreeRendered
+    method scroll
+    method scrollBy
+    method scrollIntoView
+    method scrollIntoViewIfNeeded
+    method scrollTo
+    method setAttribute
+    method setAttributeNS
+    method setAttributeNode
+    method setAttributeNodeNS
+    method setPointerCapture
+    method toggleAttribute
+    method updateRendering
+    method webkitMatchesSelector
+    method webkitRequestFullScreen
+    method webkitRequestFullscreen
+    setter ariaActiveDescendantElement
+    setter ariaAtomic
+    setter ariaAutoComplete
+    setter ariaBusy
+    setter ariaChecked
+    setter ariaColCount
+    setter ariaColIndex
+    setter ariaColSpan
+    setter ariaControlsElements
+    setter ariaCurrent
+    setter ariaDescribedByElements
+    setter ariaDetailsElement
+    setter ariaDisabled
+    setter ariaErrorMessageElement
+    setter ariaExpanded
+    setter ariaFlowToElements
+    setter ariaHasPopup
+    setter ariaHidden
+    setter ariaKeyShortcuts
+    setter ariaLabel
+    setter ariaLabelledByElements
+    setter ariaLevel
+    setter ariaLive
+    setter ariaModal
+    setter ariaMultiLine
+    setter ariaMultiSelectable
+    setter ariaOrientation
+    setter ariaOwnsElements
+    setter ariaPlaceholder
+    setter ariaPosInSet
+    setter ariaPressed
+    setter ariaReadOnly
+    setter ariaRelevant
+    setter ariaRequired
+    setter ariaRoleDescription
+    setter ariaRowCount
+    setter ariaRowIndex
+    setter ariaRowSpan
+    setter ariaSelected
+    setter ariaSort
+    setter ariaValueMax
+    setter ariaValueMin
+    setter ariaValueNow
+    setter ariaValueText
+    setter classList
+    setter className
+    setter elementTiming
+    setter id
+    setter innerHTML
+    setter invisible
+    setter onbeforecopy
+    setter onbeforecut
+    setter onbeforepaste
+    setter onfullscreenchange
+    setter onfullscreenerror
+    setter onsearch
+    setter onwebkitfullscreenchange
+    setter onwebkitfullscreenerror
+    setter outerHTML
+    setter part
+    setter renderSubtree
+    setter role
+    setter scrollLeft
+    setter scrollTop
+    setter slot
+interface ElementInternals
+    attribute @@toStringTag
+    getter ariaActiveDescendantElement
+    getter ariaAtomic
+    getter ariaAutoComplete
+    getter ariaBusy
+    getter ariaChecked
+    getter ariaColCount
+    getter ariaColIndex
+    getter ariaColSpan
+    getter ariaControlsElements
+    getter ariaCurrent
+    getter ariaDescribedByElements
+    getter ariaDetailsElement
+    getter ariaDisabled
+    getter ariaErrorMessageElement
+    getter ariaExpanded
+    getter ariaFlowToElements
+    getter ariaHasPopup
+    getter ariaHidden
+    getter ariaKeyShortcuts
+    getter ariaLabel
+    getter ariaLabelledByElements
+    getter ariaLevel
+    getter ariaLive
+    getter ariaModal
+    getter ariaMultiLine
+    getter ariaMultiSelectable
+    getter ariaOrientation
+    getter ariaOwnsElements
+    getter ariaPlaceholder
+    getter ariaPosInSet
+    getter ariaPressed
+    getter ariaReadOnly
+    getter ariaRelevant
+    getter ariaRequired
+    getter ariaRoleDescription
+    getter ariaRowCount
+    getter ariaRowIndex
+    getter ariaRowSpan
+    getter ariaSelected
+    getter ariaSort
+    getter ariaValueMax
+    getter ariaValueMin
+    getter ariaValueNow
+    getter ariaValueText
+    getter form
+    getter labels
+    getter role
+    getter states
+    getter validationMessage
+    getter validity
+    getter willValidate
+    method checkValidity
+    method constructor
+    method reportValidity
+    method setFormValue
+    method setValidity
+    setter ariaActiveDescendantElement
+    setter ariaAtomic
+    setter ariaAutoComplete
+    setter ariaBusy
+    setter ariaChecked
+    setter ariaColCount
+    setter ariaColIndex
+    setter ariaColSpan
+    setter ariaControlsElements
+    setter ariaCurrent
+    setter ariaDescribedByElements
+    setter ariaDetailsElement
+    setter ariaDisabled
+    setter ariaErrorMessageElement
+    setter ariaExpanded
+    setter ariaFlowToElements
+    setter ariaHasPopup
+    setter ariaHidden
+    setter ariaKeyShortcuts
+    setter ariaLabel
+    setter ariaLabelledByElements
+    setter ariaLevel
+    setter ariaLive
+    setter ariaModal
+    setter ariaMultiLine
+    setter ariaMultiSelectable
+    setter ariaOrientation
+    setter ariaOwnsElements
+    setter ariaPlaceholder
+    setter ariaPosInSet
+    setter ariaPressed
+    setter ariaReadOnly
+    setter ariaRelevant
+    setter ariaRequired
+    setter ariaRoleDescription
+    setter ariaRowCount
+    setter ariaRowIndex
+    setter ariaRowSpan
+    setter ariaSelected
+    setter ariaSort
+    setter ariaValueMax
+    setter ariaValueMin
+    setter ariaValueNow
+    setter ariaValueText
+    setter role
+interface EnterPictureInPictureEvent : Event
+    attribute @@toStringTag
+    getter pictureInPictureWindow
+    method constructor
+interface ErrorEvent : Event
+    attribute @@toStringTag
+    getter colno
+    getter error
+    getter filename
+    getter lineno
+    getter message
+    method constructor
+interface Event
+    attribute @@toStringTag
+    attribute AT_TARGET
+    attribute BUBBLING_PHASE
+    attribute CAPTURING_PHASE
+    attribute NONE
+    getter bubbles
+    getter cancelBubble
+    getter cancelable
+    getter composed
+    getter currentTarget
+    getter defaultPrevented
+    getter eventPhase
+    getter path
+    getter returnValue
+    getter srcElement
+    getter target
+    getter timeStamp
+    getter type
+    method composedPath
+    method constructor
+    method initEvent
+    method preventDefault
+    method stopImmediatePropagation
+    method stopPropagation
+    setter cancelBubble
+    setter returnValue
+interface EventSource : EventTarget
+    attribute @@toStringTag
+    attribute CLOSED
+    attribute CONNECTING
+    attribute OPEN
+    getter onerror
+    getter onmessage
+    getter onopen
+    getter readyState
+    getter url
+    getter withCredentials
+    method close
+    method constructor
+    setter onerror
+    setter onmessage
+    setter onopen
+interface EventTarget
+    attribute @@toStringTag
+    method addEventListener
+    method constructor
+    method dispatchEvent
+    method removeEventListener
+interface External
+    attribute @@toStringTag
+    method AddSearchProvider
+    method IsSearchProviderInstalled
+    method constructor
+interface FaceDetector
+    attribute @@toStringTag
+    method constructor
+    method detect
+interface FederatedCredential : Credential
+    attribute @@toStringTag
+    getter iconURL
+    getter name
+    getter protocol
+    getter provider
+    method constructor
+interface File : Blob
+    attribute @@toStringTag
+    getter lastModified
+    getter lastModifiedDate
+    getter name
+    getter webkitRelativePath
+    method constructor
+interface FileList
+    attribute @@toStringTag
+    getter length
+    method @@iterator
+    method constructor
+    method item
+interface FileReader : EventTarget
+    attribute @@toStringTag
+    attribute DONE
+    attribute EMPTY
+    attribute LOADING
+    getter error
+    getter onabort
+    getter onerror
+    getter onload
+    getter onloadend
+    getter onloadstart
+    getter onprogress
+    getter readyState
+    getter result
+    method abort
+    method constructor
+    method readAsArrayBuffer
+    method readAsBinaryString
+    method readAsDataURL
+    method readAsText
+    setter onabort
+    setter onerror
+    setter onload
+    setter onloadend
+    setter onloadstart
+    setter onprogress
+interface FileSystemDirectoryHandle : FileSystemHandle
+    static method getSystemDirectory
+    attribute @@toStringTag
+    method constructor
+    method getDirectory
+    method getEntries
+    method getFile
+    method removeEntry
+interface FileSystemFileHandle : FileSystemHandle
+    attribute @@toStringTag
+    method constructor
+    method createWriter
+    method getFile
+interface FileSystemHandle
+    attribute @@toStringTag
+    getter isDirectory
+    getter isFile
+    getter name
+    method constructor
+    method queryPermission
+    method requestPermission
+interface FileSystemWriter
+    attribute @@toStringTag
+    method close
+    method constructor
+    method truncate
+    method write
+interface FocusEvent : UIEvent
+    attribute @@toStringTag
+    getter relatedTarget
+    method constructor
+interface FontFace
+    attribute @@toStringTag
+    getter display
+    getter family
+    getter featureSettings
+    getter loaded
+    getter status
+    getter stretch
+    getter style
+    getter unicodeRange
+    getter variant
+    getter weight
+    method constructor
+    method load
+    setter display
+    setter family
+    setter featureSettings
+    setter stretch
+    setter style
+    setter unicodeRange
+    setter variant
+    setter weight
+interface FontFaceSetLoadEvent : Event
+    attribute @@toStringTag
+    getter fontfaces
+    method constructor
+interface FormData
+    attribute @@toStringTag
+    method @@iterator
+    method append
+    method constructor
+    method delete
+    method entries
+    method forEach
+    method get
+    method getAll
+    method has
+    method keys
+    method set
+    method values
+interface FormDataEvent : Event
+    attribute @@toStringTag
+    getter formData
+    method constructor
+interface GainNode : AudioNode
+    attribute @@toStringTag
+    getter gain
+    method constructor
+interface Gamepad
+    attribute @@toStringTag
+    getter axes
+    getter buttons
+    getter connected
+    getter id
+    getter index
+    getter mapping
+    getter timestamp
+    getter vibrationActuator
+    method constructor
+interface GamepadAxisEvent : GamepadEvent
+    attribute @@toStringTag
+    getter axis
+    getter value
+    method constructor
+interface GamepadButton
+    attribute @@toStringTag
+    getter pressed
+    getter touched
+    getter value
+    method constructor
+interface GamepadButtonEvent : GamepadEvent
+    attribute @@toStringTag
+    getter button
+    getter value
+    method constructor
+interface GamepadEvent : Event
+    attribute @@toStringTag
+    getter gamepad
+    method constructor
+interface GamepadHapticActuator
+    attribute @@toStringTag
+    getter type
+    method constructor
+    method playEffect
+    method reset
+interface Geolocation
+    attribute @@toStringTag
+    method clearWatch
+    method constructor
+    method getCurrentPosition
+    method watchPosition
+interface GeolocationCoordinates
+    attribute @@toStringTag
+    getter accuracy
+    getter altitude
+    getter altitudeAccuracy
+    getter heading
+    getter latitude
+    getter longitude
+    getter speed
+    method constructor
+interface GeolocationPosition
+    attribute @@toStringTag
+    getter coords
+    getter timestamp
+    method constructor
+interface GeolocationPositionError
+    attribute @@toStringTag
+    attribute PERMISSION_DENIED
+    attribute POSITION_UNAVAILABLE
+    attribute TIMEOUT
+    getter code
+    getter message
+    method constructor
+interface Gyroscope : Sensor
+    attribute @@toStringTag
+    getter x
+    getter y
+    getter z
+    method constructor
+interface HID : EventTarget
+    attribute @@toStringTag
+    getter onconnect
+    getter ondisconnect
+    method constructor
+    method getDevices
+    method requestDevice
+    setter onconnect
+    setter ondisconnect
+interface HIDCollectionInfo
+    attribute @@toStringTag
+    getter children
+    getter featureReports
+    getter inputReports
+    getter outputReports
+    getter usage
+    getter usagePage
+    method constructor
+interface HIDConnectionEvent : Event
+    attribute @@toStringTag
+    getter device
+    method constructor
+interface HIDDevice : EventTarget
+    attribute @@toStringTag
+    getter collections
+    getter oninputreport
+    getter opened
+    getter productId
+    getter productName
+    getter vendorId
+    method close
+    method constructor
+    method open
+    method receiveFeatureReport
+    method sendFeatureReport
+    method sendReport
+    setter oninputreport
+interface HIDInputReportEvent : Event
+    attribute @@toStringTag
+    getter data
+    getter device
+    getter reportId
+    method constructor
+interface HIDReportInfo
+    attribute @@toStringTag
+    getter items
+    getter reportId
+    method constructor
+interface HIDReportItem
+    attribute @@toStringTag
+    getter hasNull
+    getter isAbsolute
+    getter isArray
+    getter isRange
+    getter logicalMaximum
+    getter logicalMinimum
+    getter physicalMaximum
+    getter physicalMinimum
+    getter reportCount
+    getter reportSize
+    getter strings
+    getter unitExponent
+    getter unitFactorCurrentExponent
+    getter unitFactorLengthExponent
+    getter unitFactorLuminousIntensityExponent
+    getter unitFactorMassExponent
+    getter unitFactorTemperatureExponent
+    getter unitFactorTimeExponent
+    getter unitSystem
+    getter usageMaximum
+    getter usageMinimum
+    getter usages
+    method constructor
+interface HTMLAllCollection
+    attribute @@toStringTag
+    getter length
+    method @@iterator
+    method constructor
+    method item
+    method namedItem
+interface HTMLAnchorElement : HTMLElement
+    attribute @@toStringTag
+    getter charset
+    getter coords
+    getter download
+    getter hash
+    getter host
+    getter hostname
+    getter href
+    getter hrefTranslate
+    getter hreflang
+    getter name
+    getter origin
+    getter password
+    getter pathname
+    getter ping
+    getter port
+    getter protocol
+    getter referrerPolicy
+    getter rel
+    getter relList
+    getter rev
+    getter search
+    getter shape
+    getter target
+    getter text
+    getter type
+    getter username
+    method constructor
+    method toString
+    setter charset
+    setter coords
+    setter download
+    setter hash
+    setter host
+    setter hostname
+    setter href
+    setter hrefTranslate
+    setter hreflang
+    setter name
+    setter password
+    setter pathname
+    setter ping
+    setter port
+    setter protocol
+    setter referrerPolicy
+    setter rel
+    setter relList
+    setter rev
+    setter search
+    setter shape
+    setter target
+    setter text
+    setter type
+    setter username
+interface HTMLAreaElement : HTMLElement
+    attribute @@toStringTag
+    getter alt
+    getter coords
+    getter download
+    getter hash
+    getter host
+    getter hostname
+    getter href
+    getter noHref
+    getter origin
+    getter password
+    getter pathname
+    getter ping
+    getter port
+    getter protocol
+    getter referrerPolicy
+    getter rel
+    getter relList
+    getter search
+    getter shape
+    getter target
+    getter username
+    method constructor
+    method toString
+    setter alt
+    setter coords
+    setter download
+    setter hash
+    setter host
+    setter hostname
+    setter href
+    setter noHref
+    setter password
+    setter pathname
+    setter ping
+    setter port
+    setter protocol
+    setter referrerPolicy
+    setter rel
+    setter relList
+    setter search
+    setter shape
+    setter target
+    setter username
+interface HTMLAudioElement : HTMLMediaElement
+    attribute @@toStringTag
+    method constructor
+interface HTMLBRElement : HTMLElement
+    attribute @@toStringTag
+    getter clear
+    method constructor
+    setter clear
+interface HTMLBaseElement : HTMLElement
+    attribute @@toStringTag
+    getter href
+    getter target
+    method constructor
+    setter href
+    setter target
+interface HTMLBodyElement : HTMLElement
+    attribute @@toStringTag
+    getter aLink
+    getter background
+    getter bgColor
+    getter link
+    getter onafterprint
+    getter onbeforeprint
+    getter onbeforeunload
+    getter onblur
+    getter onerror
+    getter onfocus
+    getter onhashchange
+    getter onlanguagechange
+    getter onload
+    getter onmessage
+    getter onmessageerror
+    getter onoffline
+    getter ononline
+    getter onpagehide
+    getter onpageshow
+    getter onpopstate
+    getter onportalactivate
+    getter onrejectionhandled
+    getter onresize
+    getter onscroll
+    getter onstorage
+    getter onunhandledrejection
+    getter onunload
+    getter text
+    getter vLink
+    method constructor
+    setter aLink
+    setter background
+    setter bgColor
+    setter link
+    setter onafterprint
+    setter onbeforeprint
+    setter onbeforeunload
+    setter onblur
+    setter onerror
+    setter onfocus
+    setter onhashchange
+    setter onlanguagechange
+    setter onload
+    setter onmessage
+    setter onmessageerror
+    setter onoffline
+    setter ononline
+    setter onpagehide
+    setter onpageshow
+    setter onpopstate
+    setter onportalactivate
+    setter onrejectionhandled
+    setter onresize
+    setter onscroll
+    setter onstorage
+    setter onunhandledrejection
+    setter onunload
+    setter text
+    setter vLink
+interface HTMLButtonElement : HTMLElement
+    attribute @@toStringTag
+    getter disabled
+    getter form
+    getter formAction
+    getter formEnctype
+    getter formMethod
+    getter formNoValidate
+    getter formTarget
+    getter labels
+    getter name
+    getter type
+    getter validationMessage
+    getter validity
+    getter value
+    getter willValidate
+    method checkValidity
+    method constructor
+    method reportValidity
+    method setCustomValidity
+    setter disabled
+    setter formAction
+    setter formEnctype
+    setter formMethod
+    setter formNoValidate
+    setter formTarget
+    setter name
+    setter type
+    setter value
+interface HTMLCanvasElement : HTMLElement
+    attribute @@toStringTag
+    getter height
+    getter width
+    method captureStream
+    method constructor
+    method convertToBlob
+    method getContext
+    method toBlob
+    method toDataURL
+    method transferControlToOffscreen
+    setter height
+    setter width
+interface HTMLCollection
+    attribute @@toStringTag
+    getter length
+    method @@iterator
+    method constructor
+    method item
+    method namedItem
+interface HTMLContentElement : HTMLElement
+    attribute @@toStringTag
+    getter select
+    method constructor
+    method getDistributedNodes
+    setter select
+interface HTMLDListElement : HTMLElement
+    attribute @@toStringTag
+    getter compact
+    method constructor
+    setter compact
+interface HTMLDataElement : HTMLElement
+    attribute @@toStringTag
+    getter value
+    method constructor
+    setter value
+interface HTMLDataListElement : HTMLElement
+    attribute @@toStringTag
+    getter options
+    method constructor
+interface HTMLDetailsElement : HTMLElement
+    attribute @@toStringTag
+    getter open
+    method constructor
+    setter open
+interface HTMLDialogElement : HTMLElement
+    attribute @@toStringTag
+    getter open
+    getter returnValue
+    method close
+    method constructor
+    method show
+    method showModal
+    setter open
+    setter returnValue
+interface HTMLDirectoryElement : HTMLElement
+    attribute @@toStringTag
+    getter compact
+    method constructor
+    setter compact
+interface HTMLDivElement : HTMLElement
+    attribute @@toStringTag
+    getter align
+    method constructor
+    setter align
+interface HTMLDocument : Document
+    attribute @@toStringTag
+    method constructor
+interface HTMLElement : Element
+    attribute @@toStringTag
+    getter accessKey
+    getter autocapitalize
+    getter autofocus
+    getter contentEditable
+    getter dataset
+    getter dir
+    getter draggable
+    getter enterKeyHint
+    getter hidden
+    getter inert
+    getter innerText
+    getter inputMode
+    getter isContentEditable
+    getter lang
+    getter nonce
+    getter offsetHeight
+    getter offsetLeft
+    getter offsetParent
+    getter offsetTop
+    getter offsetWidth
+    getter onabort
+    getter onactivateinvisible
+    getter onanimationend
+    getter onanimationiteration
+    getter onanimationstart
+    getter onauxclick
+    getter onblur
+    getter oncancel
+    getter oncanplay
+    getter oncanplaythrough
+    getter onchange
+    getter onclick
+    getter onclose
+    getter oncontextmenu
+    getter oncopy
+    getter oncuechange
+    getter oncut
+    getter ondblclick
+    getter ondrag
+    getter ondragend
+    getter ondragenter
+    getter ondragleave
+    getter ondragover
+    getter ondragstart
+    getter ondrop
+    getter ondurationchange
+    getter onemptied
+    getter onended
+    getter onerror
+    getter onfocus
+    getter onformdata
+    getter ongotpointercapture
+    getter oninput
+    getter oninvalid
+    getter onkeydown
+    getter onkeypress
+    getter onkeyup
+    getter onload
+    getter onloadeddata
+    getter onloadedmetadata
+    getter onloadstart
+    getter onlostpointercapture
+    getter onmousedown
+    getter onmouseenter
+    getter onmouseleave
+    getter onmousemove
+    getter onmouseout
+    getter onmouseover
+    getter onmouseup
+    getter onmousewheel
+    getter onoverscroll
+    getter onpaste
+    getter onpause
+    getter onplay
+    getter onplaying
+    getter onpointercancel
+    getter onpointerdown
+    getter onpointerenter
+    getter onpointerleave
+    getter onpointermove
+    getter onpointerout
+    getter onpointerover
+    getter onpointerrawupdate
+    getter onpointerup
+    getter onprogress
+    getter onratechange
+    getter onrendersubtreeactivation
+    getter onreset
+    getter onresize
+    getter onscroll
+    getter onscrollend
+    getter onseeked
+    getter onseeking
+    getter onselect
+    getter onselectionchange
+    getter onselectstart
+    getter onstalled
+    getter onsubmit
+    getter onsuspend
+    getter ontimeupdate
+    getter ontoggle
+    getter ontouchcancel
+    getter ontouchend
+    getter ontouchmove
+    getter ontouchstart
+    getter ontransitionend
+    getter onvolumechange
+    getter onwaiting
+    getter onwheel
+    getter outerText
+    getter spellcheck
+    getter style
+    getter tabIndex
+    getter title
+    getter translate
+    method attachInternals
+    method blur
+    method click
+    method constructor
+    method focus
+    setter accessKey
+    setter autocapitalize
+    setter autofocus
+    setter contentEditable
+    setter dir
+    setter draggable
+    setter enterKeyHint
+    setter hidden
+    setter inert
+    setter innerText
+    setter inputMode
+    setter lang
+    setter nonce
+    setter onabort
+    setter onactivateinvisible
+    setter onanimationend
+    setter onanimationiteration
+    setter onanimationstart
+    setter onauxclick
+    setter onblur
+    setter oncancel
+    setter oncanplay
+    setter oncanplaythrough
+    setter onchange
+    setter onclick
+    setter onclose
+    setter oncontextmenu
+    setter oncopy
+    setter oncuechange
+    setter oncut
+    setter ondblclick
+    setter ondrag
+    setter ondragend
+    setter ondragenter
+    setter ondragleave
+    setter ondragover
+    setter ondragstart
+    setter ondrop
+    setter ondurationchange
+    setter onemptied
+    setter onended
+    setter onerror
+    setter onfocus
+    setter onformdata
+    setter ongotpointercapture
+    setter oninput
+    setter oninvalid
+    setter onkeydown
+    setter onkeypress
+    setter onkeyup
+    setter onload
+    setter onloadeddata
+    setter onloadedmetadata
+    setter onloadstart
+    setter onlostpointercapture
+    setter onmousedown
+    setter onmouseenter
+    setter onmouseleave
+    setter onmousemove
+    setter onmouseout
+    setter onmouseover
+    setter onmouseup
+    setter onmousewheel
+    setter onoverscroll
+    setter onpaste
+    setter onpause
+    setter onplay
+    setter onplaying
+    setter onpointercancel
+    setter onpointerdown
+    setter onpointerenter
+    setter onpointerleave
+    setter onpointermove
+    setter onpointerout
+    setter onpointerover
+    setter onpointerrawupdate
+    setter onpointerup
+    setter onprogress
+    setter onratechange
+    setter onrendersubtreeactivation
+    setter onreset
+    setter onresize
+    setter onscroll
+    setter onscrollend
+    setter onseeked
+    setter onseeking
+    setter onselect
+    setter onselectionchange
+    setter onselectstart
+    setter onstalled
+    setter onsubmit
+    setter onsuspend
+    setter ontimeupdate
+    setter ontoggle
+    setter ontouchcancel
+    setter ontouchend
+    setter ontouchmove
+    setter ontouchstart
+    setter ontransitionend
+    setter onvolumechange
+    setter onwaiting
+    setter onwheel
+    setter outerText
+    setter spellcheck
+    setter style
+    setter tabIndex
+    setter title
+    setter translate
+interface HTMLEmbedElement : HTMLElement
+    attribute @@toStringTag
+    getter align
+    getter height
+    getter name
+    getter src
+    getter type
+    getter width
+    method constructor
+    method getSVGDocument
+    setter align
+    setter height
+    setter name
+    setter src
+    setter type
+    setter width
+interface HTMLFieldSetElement : HTMLElement
+    attribute @@toStringTag
+    getter disabled
+    getter elements
+    getter form
+    getter name
+    getter type
+    getter validationMessage
+    getter validity
+    getter willValidate
+    method checkValidity
+    method constructor
+    method reportValidity
+    method setCustomValidity
+    setter disabled
+    setter name
+interface HTMLFontElement : HTMLElement
+    attribute @@toStringTag
+    getter color
+    getter face
+    getter size
+    method constructor
+    setter color
+    setter face
+    setter size
+interface HTMLFormControlsCollection : HTMLCollection
+    attribute @@toStringTag
+    method constructor
+    method namedItem
+interface HTMLFormElement : HTMLElement
+    attribute @@toStringTag
+    getter acceptCharset
+    getter action
+    getter autocomplete
+    getter elements
+    getter encoding
+    getter enctype
+    getter length
+    getter method
+    getter name
+    getter noValidate
+    getter target
+    method @@iterator
+    method checkValidity
+    method constructor
+    method reportValidity
+    method requestSubmit
+    method reset
+    method submit
+    setter acceptCharset
+    setter action
+    setter autocomplete
+    setter encoding
+    setter enctype
+    setter method
+    setter name
+    setter noValidate
+    setter target
+interface HTMLFrameElement : HTMLElement
+    attribute @@toStringTag
+    getter contentDocument
+    getter contentWindow
+    getter frameBorder
+    getter longDesc
+    getter marginHeight
+    getter marginWidth
+    getter name
+    getter noResize
+    getter scrolling
+    getter src
+    method constructor
+    setter frameBorder
+    setter longDesc
+    setter marginHeight
+    setter marginWidth
+    setter name
+    setter noResize
+    setter scrolling
+    setter src
+interface HTMLFrameSetElement : HTMLElement
+    attribute @@toStringTag
+    getter cols
+    getter onafterprint
+    getter onbeforeprint
+    getter onbeforeunload
+    getter onblur
+    getter onerror
+    getter onfocus
+    getter onhashchange
+    getter onlanguagechange
+    getter onload
+    getter onmessage
+    getter onmessageerror
+    getter onoffline
+    getter ononline
+    getter onpagehide
+    getter onpageshow
+    getter onpopstate
+    getter onportalactivate
+    getter onrejectionhandled
+    getter onresize
+    getter onscroll
+    getter onstorage
+    getter onunhandledrejection
+    getter onunload
+    getter rows
+    method constructor
+    setter cols
+    setter onafterprint
+    setter onbeforeprint
+    setter onbeforeunload
+    setter onblur
+    setter onerror
+    setter onfocus
+    setter onhashchange
+    setter onlanguagechange
+    setter onload
+    setter onmessage
+    setter onmessageerror
+    setter onoffline
+    setter ononline
+    setter onpagehide
+    setter onpageshow
+    setter onpopstate
+    setter onportalactivate
+    setter onrejectionhandled
+    setter onresize
+    setter onscroll
+    setter onstorage
+    setter onunhandledrejection
+    setter onunload
+    setter rows
+interface HTMLHRElement : HTMLElement
+    attribute @@toStringTag
+    getter align
+    getter color
+    getter noShade
+    getter size
+    getter width
+    method constructor
+    setter align
+    setter color
+    setter noShade
+    setter size
+    setter width
+interface HTMLHeadElement : HTMLElement
+    attribute @@toStringTag
+    method constructor
+interface HTMLHeadingElement : HTMLElement
+    attribute @@toStringTag
+    getter align
+    method constructor
+    setter align
+interface HTMLHtmlElement : HTMLElement
+    attribute @@toStringTag
+    getter version
+    method constructor
+    setter version
+interface HTMLIFrameElement : HTMLElement
+    attribute @@toStringTag
+    getter align
+    getter allow
+    getter allowFullscreen
+    getter allowPaymentRequest
+    getter contentDocument
+    getter contentWindow
+    getter csp
+    getter featurePolicy
+    getter frameBorder
+    getter height
+    getter loading
+    getter longDesc
+    getter marginHeight
+    getter marginWidth
+    getter name
+    getter referrerPolicy
+    getter sandbox
+    getter scrolling
+    getter src
+    getter srcdoc
+    getter width
+    method constructor
+    method getSVGDocument
+    setter align
+    setter allow
+    setter allowFullscreen
+    setter allowPaymentRequest
+    setter csp
+    setter frameBorder
+    setter height
+    setter loading
+    setter longDesc
+    setter marginHeight
+    setter marginWidth
+    setter name
+    setter referrerPolicy
+    setter sandbox
+    setter scrolling
+    setter src
+    setter srcdoc
+    setter width
+interface HTMLImageElement : HTMLElement
+    attribute @@toStringTag
+    getter align
+    getter alt
+    getter border
+    getter complete
+    getter crossOrigin
+    getter currentSrc
+    getter decoding
+    getter height
+    getter hspace
+    getter importance
+    getter isMap
+    getter loading
+    getter longDesc
+    getter lowsrc
+    getter name
+    getter naturalHeight
+    getter naturalWidth
+    getter referrerPolicy
+    getter sizes
+    getter src
+    getter srcset
+    getter useMap
+    getter vspace
+    getter width
+    getter x
+    getter y
+    method constructor
+    method decode
+    setter align
+    setter alt
+    setter border
+    setter crossOrigin
+    setter decoding
+    setter height
+    setter hspace
+    setter importance
+    setter isMap
+    setter loading
+    setter longDesc
+    setter lowsrc
+    setter name
+    setter referrerPolicy
+    setter sizes
+    setter src
+    setter srcset
+    setter useMap
+    setter vspace
+    setter width
+interface HTMLInputElement : HTMLElement
+    attribute @@toStringTag
+    getter accept
+    getter align
+    getter alt
+    getter autocomplete
+    getter checked
+    getter defaultChecked
+    getter defaultValue
+    getter dirName
+    getter disabled
+    getter files
+    getter form
+    getter formAction
+    getter formEnctype
+    getter formMethod
+    getter formNoValidate
+    getter formTarget
+    getter height
+    getter incremental
+    getter indeterminate
+    getter labels
+    getter list
+    getter max
+    getter maxLength
+    getter min
+    getter minLength
+    getter multiple
+    getter name
+    getter pattern
+    getter placeholder
+    getter readOnly
+    getter required
+    getter selectionDirection
+    getter selectionEnd
+    getter selectionStart
+    getter size
+    getter src
+    getter step
+    getter type
+    getter useMap
+    getter validationMessage
+    getter validity
+    getter value
+    getter valueAsDate
+    getter valueAsNumber
+    getter webkitEntries
+    getter webkitdirectory
+    getter width
+    getter willValidate
+    method checkValidity
+    method constructor
+    method reportValidity
+    method select
+    method setCustomValidity
+    method setRangeText
+    method setSelectionRange
+    method stepDown
+    method stepUp
+    setter accept
+    setter align
+    setter alt
+    setter autocomplete
+    setter checked
+    setter defaultChecked
+    setter defaultValue
+    setter dirName
+    setter disabled
+    setter files
+    setter formAction
+    setter formEnctype
+    setter formMethod
+    setter formNoValidate
+    setter formTarget
+    setter height
+    setter incremental
+    setter indeterminate
+    setter max
+    setter maxLength
+    setter min
+    setter minLength
+    setter multiple
+    setter name
+    setter pattern
+    setter placeholder
+    setter readOnly
+    setter required
+    setter selectionDirection
+    setter selectionEnd
+    setter selectionStart
+    setter size
+    setter src
+    setter step
+    setter type
+    setter useMap
+    setter value
+    setter valueAsDate
+    setter valueAsNumber
+    setter webkitdirectory
+    setter width
+interface HTMLLIElement : HTMLElement
+    attribute @@toStringTag
+    getter type
+    getter value
+    method constructor
+    setter type
+    setter value
+interface HTMLLabelElement : HTMLElement
+    attribute @@toStringTag
+    getter control
+    getter form
+    getter htmlFor
+    method constructor
+    setter htmlFor
+interface HTMLLegendElement : HTMLElement
+    attribute @@toStringTag
+    getter align
+    getter form
+    method constructor
+    setter align
+interface HTMLLinkElement : HTMLElement
+    attribute @@toStringTag
+    getter as
+    getter charset
+    getter crossOrigin
+    getter disabled
+    getter href
+    getter hreflang
+    getter imageSizes
+    getter imageSrcset
+    getter import
+    getter importance
+    getter integrity
+    getter media
+    getter referrerPolicy
+    getter rel
+    getter relList
+    getter rev
+    getter sheet
+    getter sizes
+    getter target
+    getter type
+    method constructor
+    setter as
+    setter charset
+    setter crossOrigin
+    setter disabled
+    setter href
+    setter hreflang
+    setter imageSizes
+    setter imageSrcset
+    setter importance
+    setter integrity
+    setter media
+    setter referrerPolicy
+    setter rel
+    setter relList
+    setter rev
+    setter sizes
+    setter target
+    setter type
+interface HTMLMapElement : HTMLElement
+    attribute @@toStringTag
+    getter areas
+    getter name
+    method constructor
+    setter name
+interface HTMLMarqueeElement : HTMLElement
+    attribute @@toStringTag
+    getter behavior
+    getter bgColor
+    getter direction
+    getter height
+    getter hspace
+    getter loop
+    getter scrollAmount
+    getter scrollDelay
+    getter trueSpeed
+    getter vspace
+    getter width
+    method constructor
+    method start
+    method stop
+    setter behavior
+    setter bgColor
+    setter direction
+    setter height
+    setter hspace
+    setter loop
+    setter scrollAmount
+    setter scrollDelay
+    setter trueSpeed
+    setter vspace
+    setter width
+interface HTMLMediaElement : HTMLElement
+    attribute @@toStringTag
+    attribute HAVE_CURRENT_DATA
+    attribute HAVE_ENOUGH_DATA
+    attribute HAVE_FUTURE_DATA
+    attribute HAVE_METADATA
+    attribute HAVE_NOTHING
+    attribute NETWORK_EMPTY
+    attribute NETWORK_IDLE
+    attribute NETWORK_LOADING
+    attribute NETWORK_NO_SOURCE
+    getter audioTracks
+    getter autoplay
+    getter buffered
+    getter controls
+    getter controlsList
+    getter crossOrigin
+    getter currentSrc
+    getter currentTime
+    getter defaultMuted
+    getter defaultPlaybackRate
+    getter disableRemotePlayback
+    getter duration
+    getter ended
+    getter error
+    getter latencyHint
+    getter loop
+    getter mediaKeys
+    getter muted
+    getter networkState
+    getter onencrypted
+    getter onwaitingforkey
+    getter paused
+    getter playbackRate
+    getter played
+    getter preload
+    getter readyState
+    getter remote
+    getter seekable
+    getter seeking
+    getter sinkId
+    getter src
+    getter srcObject
+    getter textTracks
+    getter videoTracks
+    getter volume
+    getter webkitAudioDecodedByteCount
+    getter webkitVideoDecodedByteCount
+    method addTextTrack
+    method canPlayType
+    method captureStream
+    method constructor
+    method load
+    method pause
+    method play
+    method setMediaKeys
+    method setSinkId
+    setter autoplay
+    setter controls
+    setter controlsList
+    setter crossOrigin
+    setter currentTime
+    setter defaultMuted
+    setter defaultPlaybackRate
+    setter disableRemotePlayback
+    setter latencyHint
+    setter loop
+    setter muted
+    setter onencrypted
+    setter onwaitingforkey
+    setter playbackRate
+    setter preload
+    setter src
+    setter srcObject
+    setter volume
+interface HTMLMenuElement : HTMLElement
+    attribute @@toStringTag
+    getter compact
+    method constructor
+    setter compact
+interface HTMLMetaElement : HTMLElement
+    attribute @@toStringTag
+    getter content
+    getter httpEquiv
+    getter name
+    getter scheme
+    method constructor
+    setter content
+    setter httpEquiv
+    setter name
+    setter scheme
+interface HTMLMeterElement : HTMLElement
+    attribute @@toStringTag
+    getter high
+    getter labels
+    getter low
+    getter max
+    getter min
+    getter optimum
+    getter value
+    method constructor
+    setter high
+    setter low
+    setter max
+    setter min
+    setter optimum
+    setter value
+interface HTMLModElement : HTMLElement
+    attribute @@toStringTag
+    getter cite
+    getter dateTime
+    method constructor
+    setter cite
+    setter dateTime
+interface HTMLOListElement : HTMLElement
+    attribute @@toStringTag
+    getter compact
+    getter reversed
+    getter start
+    getter type
+    method constructor
+    setter compact
+    setter reversed
+    setter start
+    setter type
+interface HTMLObjectElement : HTMLElement
+    attribute @@toStringTag
+    getter align
+    getter archive
+    getter border
+    getter code
+    getter codeBase
+    getter codeType
+    getter contentDocument
+    getter contentWindow
+    getter data
+    getter declare
+    getter form
+    getter height
+    getter hspace
+    getter name
+    getter standby
+    getter type
+    getter useMap
+    getter validationMessage
+    getter validity
+    getter vspace
+    getter width
+    getter willValidate
+    method checkValidity
+    method constructor
+    method getSVGDocument
+    method reportValidity
+    method setCustomValidity
+    setter align
+    setter archive
+    setter border
+    setter code
+    setter codeBase
+    setter codeType
+    setter data
+    setter declare
+    setter height
+    setter hspace
+    setter name
+    setter standby
+    setter type
+    setter useMap
+    setter vspace
+    setter width
+interface HTMLOptGroupElement : HTMLElement
+    attribute @@toStringTag
+    getter disabled
+    getter label
+    method constructor
+    setter disabled
+    setter label
+interface HTMLOptionElement : HTMLElement
+    attribute @@toStringTag
+    getter defaultSelected
+    getter disabled
+    getter form
+    getter index
+    getter label
+    getter selected
+    getter text
+    getter value
+    method constructor
+    setter defaultSelected
+    setter disabled
+    setter label
+    setter selected
+    setter text
+    setter value
+interface HTMLOptionsCollection : HTMLCollection
+    attribute @@toStringTag
+    getter length
+    getter selectedIndex
+    method @@iterator
+    method add
+    method constructor
+    method remove
+    setter length
+    setter selectedIndex
+interface HTMLOutputElement : HTMLElement
+    attribute @@toStringTag
+    getter defaultValue
+    getter form
+    getter htmlFor
+    getter labels
+    getter name
+    getter type
+    getter validationMessage
+    getter validity
+    getter value
+    getter willValidate
+    method checkValidity
+    method constructor
+    method reportValidity
+    method setCustomValidity
+    setter defaultValue
+    setter htmlFor
+    setter name
+    setter value
+interface HTMLParagraphElement : HTMLElement
+    attribute @@toStringTag
+    getter align
+    method constructor
+    setter align
+interface HTMLParamElement : HTMLElement
+    attribute @@toStringTag
+    getter name
+    getter type
+    getter value
+    getter valueType
+    method constructor
+    setter name
+    setter type
+    setter value
+    setter valueType
+interface HTMLPictureElement : HTMLElement
+    attribute @@toStringTag
+    method constructor
+interface HTMLPortalElement : HTMLElement
+    attribute @@toStringTag
+    getter onmessage
+    getter onmessageerror
+    getter referrerPolicy
+    getter src
+    method activate
+    method constructor
+    method postMessage
+    setter onmessage
+    setter onmessageerror
+    setter referrerPolicy
+    setter src
+interface HTMLPreElement : HTMLElement
+    attribute @@toStringTag
+    getter width
+    method constructor
+    setter width
+interface HTMLProgressElement : HTMLElement
+    attribute @@toStringTag
+    getter labels
+    getter max
+    getter position
+    getter value
+    method constructor
+    setter max
+    setter value
+interface HTMLQuoteElement : HTMLElement
+    attribute @@toStringTag
+    getter cite
+    method constructor
+    setter cite
+interface HTMLScriptElement : HTMLElement
+    attribute @@toStringTag
+    getter async
+    getter charset
+    getter crossOrigin
+    getter defer
+    getter event
+    getter htmlFor
+    getter importance
+    getter integrity
+    getter noModule
+    getter referrerPolicy
+    getter src
+    getter text
+    getter type
+    method constructor
+    setter async
+    setter charset
+    setter crossOrigin
+    setter defer
+    setter event
+    setter htmlFor
+    setter importance
+    setter integrity
+    setter noModule
+    setter referrerPolicy
+    setter src
+    setter text
+    setter type
+interface HTMLSelectElement : HTMLElement
+    attribute @@toStringTag
+    getter autocomplete
+    getter disabled
+    getter form
+    getter labels
+    getter length
+    getter multiple
+    getter name
+    getter options
+    getter required
+    getter selectedIndex
+    getter selectedOptions
+    getter size
+    getter type
+    getter validationMessage
+    getter validity
+    getter value
+    getter willValidate
+    method @@iterator
+    method add
+    method checkValidity
+    method constructor
+    method item
+    method namedItem
+    method remove
+    method reportValidity
+    method setCustomValidity
+    setter autocomplete
+    setter disabled
+    setter length
+    setter multiple
+    setter name
+    setter required
+    setter selectedIndex
+    setter size
+    setter value
+interface HTMLShadowElement : HTMLElement
+    attribute @@toStringTag
+    method constructor
+    method getDistributedNodes
+interface HTMLSlotElement : HTMLElement
+    attribute @@toStringTag
+    getter name
+    method assign
+    method assignedElements
+    method assignedNodes
+    method constructor
+    setter name
+interface HTMLSourceElement : HTMLElement
+    attribute @@toStringTag
+    getter media
+    getter sizes
+    getter src
+    getter srcset
+    getter type
+    method constructor
+    setter media
+    setter sizes
+    setter src
+    setter srcset
+    setter type
+interface HTMLSpanElement : HTMLElement
+    attribute @@toStringTag
+    method constructor
+interface HTMLStyleElement : HTMLElement
+    attribute @@toStringTag
+    getter disabled
+    getter media
+    getter sheet
+    getter type
+    method constructor
+    setter disabled
+    setter media
+    setter type
+interface HTMLTableCaptionElement : HTMLElement
+    attribute @@toStringTag
+    getter align
+    method constructor
+    setter align
+interface HTMLTableCellElement : HTMLElement
+    attribute @@toStringTag
+    getter abbr
+    getter align
+    getter axis
+    getter bgColor
+    getter cellIndex
+    getter ch
+    getter chOff
+    getter colSpan
+    getter headers
+    getter height
+    getter noWrap
+    getter rowSpan
+    getter scope
+    getter vAlign
+    getter width
+    method constructor
+    setter abbr
+    setter align
+    setter axis
+    setter bgColor
+    setter ch
+    setter chOff
+    setter colSpan
+    setter headers
+    setter height
+    setter noWrap
+    setter rowSpan
+    setter scope
+    setter vAlign
+    setter width
+interface HTMLTableColElement : HTMLElement
+    attribute @@toStringTag
+    getter align
+    getter ch
+    getter chOff
+    getter span
+    getter vAlign
+    getter width
+    method constructor
+    setter align
+    setter ch
+    setter chOff
+    setter span
+    setter vAlign
+    setter width
+interface HTMLTableElement : HTMLElement
+    attribute @@toStringTag
+    getter align
+    getter bgColor
+    getter border
+    getter caption
+    getter cellPadding
+    getter cellSpacing
+    getter frame
+    getter rows
+    getter rules
+    getter summary
+    getter tBodies
+    getter tFoot
+    getter tHead
+    getter width
+    method constructor
+    method createCaption
+    method createTBody
+    method createTFoot
+    method createTHead
+    method deleteCaption
+    method deleteRow
+    method deleteTFoot
+    method deleteTHead
+    method insertRow
+    setter align
+    setter bgColor
+    setter border
+    setter caption
+    setter cellPadding
+    setter cellSpacing
+    setter frame
+    setter rules
+    setter summary
+    setter tFoot
+    setter tHead
+    setter width
+interface HTMLTableRowElement : HTMLElement
+    attribute @@toStringTag
+    getter align
+    getter bgColor
+    getter cells
+    getter ch
+    getter chOff
+    getter rowIndex
+    getter sectionRowIndex
+    getter vAlign
+    method constructor
+    method deleteCell
+    method insertCell
+    setter align
+    setter bgColor
+    setter ch
+    setter chOff
+    setter vAlign
+interface HTMLTableSectionElement : HTMLElement
+    attribute @@toStringTag
+    getter align
+    getter ch
+    getter chOff
+    getter rows
+    getter vAlign
+    method constructor
+    method deleteRow
+    method insertRow
+    setter align
+    setter ch
+    setter chOff
+    setter vAlign
+interface HTMLTemplateElement : HTMLElement
+    attribute @@toStringTag
+    getter content
+    method constructor
+interface HTMLTextAreaElement : HTMLElement
+    attribute @@toStringTag
+    getter autocomplete
+    getter cols
+    getter defaultValue
+    getter dirName
+    getter disabled
+    getter form
+    getter labels
+    getter maxLength
+    getter minLength
+    getter name
+    getter placeholder
+    getter readOnly
+    getter required
+    getter rows
+    getter selectionDirection
+    getter selectionEnd
+    getter selectionStart
+    getter textLength
+    getter type
+    getter validationMessage
+    getter validity
+    getter value
+    getter willValidate
+    getter wrap
+    method checkValidity
+    method constructor
+    method reportValidity
+    method select
+    method setCustomValidity
+    method setRangeText
+    method setSelectionRange
+    setter autocomplete
+    setter cols
+    setter defaultValue
+    setter dirName
+    setter disabled
+    setter maxLength
+    setter minLength
+    setter name
+    setter placeholder
+    setter readOnly
+    setter required
+    setter rows
+    setter selectionDirection
+    setter selectionEnd
+    setter selectionStart
+    setter value
+    setter wrap
+interface HTMLTimeElement : HTMLElement
+    attribute @@toStringTag
+    getter dateTime
+    method constructor
+    setter dateTime
+interface HTMLTitleElement : HTMLElement
+    attribute @@toStringTag
+    getter text
+    method constructor
+    setter text
+interface HTMLTrackElement : HTMLElement
+    attribute @@toStringTag
+    attribute ERROR
+    attribute LOADED
+    attribute LOADING
+    attribute NONE
+    getter default
+    getter kind
+    getter label
+    getter readyState
+    getter src
+    getter srclang
+    getter track
+    method constructor
+    setter default
+    setter kind
+    setter label
+    setter src
+    setter srclang
+interface HTMLUListElement : HTMLElement
+    attribute @@toStringTag
+    getter compact
+    getter type
+    method constructor
+    setter compact
+    setter type
+interface HTMLUnknownElement : HTMLElement
+    attribute @@toStringTag
+    method constructor
+interface HTMLVideoElement : HTMLMediaElement
+    attribute @@toStringTag
+    getter autoPictureInPicture
+    getter disablePictureInPicture
+    getter height
+    getter onenterpictureinpicture
+    getter onleavepictureinpicture
+    getter playsInline
+    getter poster
+    getter videoHeight
+    getter videoWidth
+    getter webkitDecodedFrameCount
+    getter webkitDisplayingFullscreen
+    getter webkitDroppedFrameCount
+    getter webkitSupportsFullscreen
+    getter width
+    method constructor
+    method getVideoPlaybackQuality
+    method requestPictureInPicture
+    method webkitEnterFullScreen
+    method webkitEnterFullscreen
+    method webkitExitFullScreen
+    method webkitExitFullscreen
+    setter autoPictureInPicture
+    setter disablePictureInPicture
+    setter height
+    setter onenterpictureinpicture
+    setter onleavepictureinpicture
+    setter playsInline
+    setter poster
+    setter width
+interface HashChangeEvent : Event
+    attribute @@toStringTag
+    getter newURL
+    getter oldURL
+    method constructor
+interface Headers
+    attribute @@toStringTag
+    method @@iterator
+    method append
+    method constructor
+    method delete
+    method entries
+    method forEach
+    method get
+    method has
+    method keys
+    method set
+    method values
+interface History
+    attribute @@toStringTag
+    getter length
+    getter scrollRestoration
+    getter state
+    method back
+    method constructor
+    method forward
+    method go
+    method pushState
+    method replaceState
+    setter scrollRestoration
+interface IDBCursor
+    attribute @@toStringTag
+    getter direction
+    getter key
+    getter primaryKey
+    getter request
+    getter source
+    method advance
+    method constructor
+    method continue
+    method continuePrimaryKey
+    method delete
+    method update
+interface IDBCursorWithValue : IDBCursor
+    attribute @@toStringTag
+    getter value
+    method constructor
+interface IDBDatabase : EventTarget
+    attribute @@toStringTag
+    getter name
+    getter objectStoreNames
+    getter onabort
+    getter onclose
+    getter onerror
+    getter onversionchange
+    getter version
+    method close
+    method constructor
+    method createObjectStore
+    method deleteObjectStore
+    method transaction
+    setter onabort
+    setter onclose
+    setter onerror
+    setter onversionchange
+interface IDBFactory
+    attribute @@toStringTag
+    method cmp
+    method constructor
+    method databases
+    method deleteDatabase
+    method open
+interface IDBIndex
+    attribute @@toStringTag
+    getter keyPath
+    getter multiEntry
+    getter name
+    getter objectStore
+    getter unique
+    method constructor
+    method count
+    method get
+    method getAll
+    method getAllKeys
+    method getKey
+    method openCursor
+    method openKeyCursor
+    setter name
+interface IDBKeyRange
+    static method bound
+    static method lowerBound
+    static method only
+    static method upperBound
+    attribute @@toStringTag
+    getter lower
+    getter lowerOpen
+    getter upper
+    getter upperOpen
+    method constructor
+    method includes
+interface IDBObjectStore
+    attribute @@toStringTag
+    getter autoIncrement
+    getter indexNames
+    getter keyPath
+    getter name
+    getter transaction
+    method add
+    method clear
+    method constructor
+    method count
+    method createIndex
+    method delete
+    method deleteIndex
+    method get
+    method getAll
+    method getAllKeys
+    method getKey
+    method index
+    method openCursor
+    method openKeyCursor
+    method put
+    setter name
+interface IDBObservation
+    attribute @@toStringTag
+    getter key
+    getter type
+    getter value
+    method constructor
+interface IDBObserver
+    attribute @@toStringTag
+    method constructor
+    method observe
+    method unobserve
+interface IDBObserverChanges
+    attribute @@toStringTag
+    getter database
+    getter records
+    getter transaction
+    method constructor
+interface IDBOpenDBRequest : IDBRequest
+    attribute @@toStringTag
+    getter onblocked
+    getter onupgradeneeded
+    method constructor
+    setter onblocked
+    setter onupgradeneeded
+interface IDBRequest : EventTarget
+    attribute @@toStringTag
+    getter error
+    getter onerror
+    getter onsuccess
+    getter readyState
+    getter result
+    getter source
+    getter transaction
+    method constructor
+    setter onerror
+    setter onsuccess
+interface IDBTransaction : EventTarget
+    attribute @@toStringTag
+    getter db
+    getter durability
+    getter error
+    getter mode
+    getter objectStoreNames
+    getter onabort
+    getter oncomplete
+    getter onerror
+    method abort
+    method commit
+    method constructor
+    method objectStore
+    setter onabort
+    setter oncomplete
+    setter onerror
+interface IDBVersionChangeEvent : Event
+    attribute @@toStringTag
+    getter dataLoss
+    getter dataLossMessage
+    getter newVersion
+    getter oldVersion
+    method constructor
+interface IIRFilterNode : AudioNode
+    attribute @@toStringTag
+    method constructor
+    method getFrequencyResponse
+interface IdleDeadline
+    attribute @@toStringTag
+    getter didTimeout
+    method constructor
+    method timeRemaining
+interface IdleDetector : EventTarget
+    attribute @@toStringTag
+    getter onchange
+    getter state
+    method constructor
+    method start
+    method stop
+    setter onchange
+interface IdleState
+    attribute @@toStringTag
+    getter screen
+    getter user
+    method constructor
+interface Image
+    attribute @@toStringTag
+    getter align
+    getter alt
+    getter border
+    getter complete
+    getter crossOrigin
+    getter currentSrc
+    getter decoding
+    getter height
+    getter hspace
+    getter importance
+    getter isMap
+    getter loading
+    getter longDesc
+    getter lowsrc
+    getter name
+    getter naturalHeight
+    getter naturalWidth
+    getter referrerPolicy
+    getter sizes
+    getter src
+    getter srcset
+    getter useMap
+    getter vspace
+    getter width
+    getter x
+    getter y
+    method constructor
+    method decode
+    setter align
+    setter alt
+    setter border
+    setter crossOrigin
+    setter decoding
+    setter height
+    setter hspace
+    setter importance
+    setter isMap
+    setter loading
+    setter longDesc
+    setter lowsrc
+    setter name
+    setter referrerPolicy
+    setter sizes
+    setter src
+    setter srcset
+    setter useMap
+    setter vspace
+    setter width
+interface ImageBitmap
+    attribute @@toStringTag
+    getter height
+    getter width
+    method close
+    method constructor
+interface ImageBitmapRenderingContext
+    attribute @@toStringTag
+    getter canvas
+    method constructor
+    method transferFromImageBitmap
+interface ImageCapture
+    attribute @@toStringTag
+    getter track
+    method constructor
+    method getPhotoCapabilities
+    method getPhotoSettings
+    method grabFrame
+    method takePhoto
+interface ImageData
+    attribute @@toStringTag
+    getter data
+    getter dataUnion
+    getter height
+    getter width
+    method constructor
+    method getColorSettings
+interface InputDeviceCapabilities
+    attribute @@toStringTag
+    getter firesTouchEvents
+    method constructor
+interface InputDeviceInfo : MediaDeviceInfo
+    attribute @@toStringTag
+    method constructor
+    method getCapabilities
+interface InputEvent : UIEvent
+    attribute @@toStringTag
+    getter data
+    getter dataTransfer
+    getter inputType
+    getter isComposing
+    method constructor
+    method getTargetRanges
+interface IntersectionObserver
+    attribute @@toStringTag
+    getter delay
+    getter root
+    getter rootMargin
+    getter thresholds
+    getter trackVisibility
+    method constructor
+    method disconnect
+    method observe
+    method takeRecords
+    method unobserve
+interface IntersectionObserverEntry
+    attribute @@toStringTag
+    getter boundingClientRect
+    getter intersectionRatio
+    getter intersectionRect
+    getter isIntersecting
+    getter isVisible
+    getter rootBounds
+    getter target
+    getter time
+    method constructor
+interface Keyboard
+    attribute @@toStringTag
+    method constructor
+    method getLayoutMap
+    method lock
+    method unlock
+interface KeyboardEvent : UIEvent
+    attribute @@toStringTag
+    attribute DOM_KEY_LOCATION_LEFT
+    attribute DOM_KEY_LOCATION_NUMPAD
+    attribute DOM_KEY_LOCATION_RIGHT
+    attribute DOM_KEY_LOCATION_STANDARD
+    getter altKey
+    getter charCode
+    getter code
+    getter ctrlKey
+    getter isComposing
+    getter key
+    getter keyCode
+    getter location
+    getter metaKey
+    getter repeat
+    getter shiftKey
+    method constructor
+    method getModifierState
+    method initKeyboardEvent
+interface KeyboardLayoutMap
+    attribute @@toStringTag
+    getter size
+    method @@iterator
+    method constructor
+    method entries
+    method forEach
+    method get
+    method has
+    method keys
+    method values
+interface KeyframeEffect : AnimationEffect
+    attribute @@toStringTag
+    getter composite
+    getter target
+    method constructor
+    method getKeyframes
+    method setKeyframes
+    setter composite
+    setter target
+interface LargestContentfulPaint : PerformanceEntry
+    attribute @@toStringTag
+    getter element
+    getter id
+    getter loadTime
+    getter renderTime
+    getter size
+    getter url
+    method constructor
+    method toJSON
+interface LayoutShift : PerformanceEntry
+    attribute @@toStringTag
+    getter hadRecentInput
+    getter lastInputTime
+    getter value
+    method constructor
+    method toJSON
+interface LinearAccelerationSensor : Accelerometer
+    attribute @@toStringTag
+    method constructor
+interface Location
+    attribute @@toStringTag
+    method constructor
+interface Lock
+    attribute @@toStringTag
+    getter mode
+    getter name
+    method constructor
+interface LockManager
+    attribute @@toStringTag
+    method constructor
+    method query
+    method request
+interface MIDIAccess : EventTarget
+    attribute @@toStringTag
+    getter inputs
+    getter onstatechange
+    getter outputs
+    getter sysexEnabled
+    method constructor
+    setter onstatechange
+interface MIDIConnectionEvent : Event
+    attribute @@toStringTag
+    getter port
+    method constructor
+interface MIDIInput : MIDIPort
+    attribute @@toStringTag
+    getter onmidimessage
+    method constructor
+    setter onmidimessage
+interface MIDIInputMap
+    attribute @@toStringTag
+    getter size
+    method @@iterator
+    method constructor
+    method entries
+    method forEach
+    method get
+    method has
+    method keys
+    method values
+interface MIDIMessageEvent : Event
+    attribute @@toStringTag
+    getter data
+    method constructor
+interface MIDIOutput : MIDIPort
+    attribute @@toStringTag
+    method constructor
+    method send
+interface MIDIOutputMap
+    attribute @@toStringTag
+    getter size
+    method @@iterator
+    method constructor
+    method entries
+    method forEach
+    method get
+    method has
+    method keys
+    method values
+interface MIDIPort : EventTarget
+    attribute @@toStringTag
+    getter connection
+    getter id
+    getter manufacturer
+    getter name
+    getter onstatechange
+    getter state
+    getter type
+    getter version
+    method close
+    method constructor
+    method open
+    setter onstatechange
+interface Magnetometer : Sensor
+    attribute @@toStringTag
+    getter x
+    getter y
+    getter z
+    method constructor
+interface MediaCapabilities
+    attribute @@toStringTag
+    method constructor
+    method decodingInfo
+    method encodingInfo
+interface MediaDeviceInfo
+    attribute @@toStringTag
+    getter deviceId
+    getter groupId
+    getter kind
+    getter label
+    method constructor
+    method toJSON
+interface MediaDevices : EventTarget
+    attribute @@toStringTag
+    getter ondevicechange
+    method constructor
+    method enumerateDevices
+    method getDisplayMedia
+    method getSupportedConstraints
+    method getUserMedia
+    setter ondevicechange
+interface MediaElementAudioSourceNode : AudioNode
+    attribute @@toStringTag
+    getter mediaElement
+    method constructor
+interface MediaEncryptedEvent : Event
+    attribute @@toStringTag
+    getter initData
+    getter initDataType
+    method constructor
+interface MediaError
+    attribute @@toStringTag
+    attribute MEDIA_ERR_ABORTED
+    attribute MEDIA_ERR_DECODE
+    attribute MEDIA_ERR_NETWORK
+    attribute MEDIA_ERR_SRC_NOT_SUPPORTED
+    getter code
+    getter message
+    method constructor
+interface MediaKeyMessageEvent : Event
+    attribute @@toStringTag
+    getter message
+    getter messageType
+    method constructor
+interface MediaKeySession : EventTarget
+    attribute @@toStringTag
+    getter closed
+    getter expiration
+    getter keyStatuses
+    getter onkeystatuseschange
+    getter onmessage
+    getter sessionId
+    method close
+    method constructor
+    method generateRequest
+    method load
+    method remove
+    method update
+    setter onkeystatuseschange
+    setter onmessage
+interface MediaKeyStatusMap
+    attribute @@toStringTag
+    getter size
+    method @@iterator
+    method constructor
+    method entries
+    method forEach
+    method get
+    method has
+    method keys
+    method values
+interface MediaKeySystemAccess
+    attribute @@toStringTag
+    getter keySystem
+    method constructor
+    method createMediaKeys
+    method getConfiguration
+interface MediaKeys
+    attribute @@toStringTag
+    method constructor
+    method createSession
+    method getStatusForPolicy
+    method setServerCertificate
+interface MediaList
+    attribute @@toStringTag
+    getter length
+    getter mediaText
+    method @@iterator
+    method appendMedium
+    method constructor
+    method deleteMedium
+    method item
+    method toString
+    setter mediaText
+interface MediaMetadata
+    attribute @@toStringTag
+    getter album
+    getter artist
+    getter artwork
+    getter title
+    method constructor
+    setter album
+    setter artist
+    setter artwork
+    setter title
+interface MediaQueryList : EventTarget
+    attribute @@toStringTag
+    getter matches
+    getter media
+    getter onchange
+    method addListener
+    method constructor
+    method removeListener
+    setter onchange
+interface MediaQueryListEvent : Event
+    attribute @@toStringTag
+    getter matches
+    getter media
+    method constructor
+interface MediaRecorder : EventTarget
+    static method isTypeSupported
+    attribute @@toStringTag
+    getter audioBitsPerSecond
+    getter mimeType
+    getter ondataavailable
+    getter onerror
+    getter onpause
+    getter onresume
+    getter onstart
+    getter onstop
+    getter state
+    getter stream
+    getter videoBitsPerSecond
+    method constructor
+    method pause
+    method requestData
+    method resume
+    method start
+    method stop
+    setter ondataavailable
+    setter onerror
+    setter onpause
+    setter onresume
+    setter onstart
+    setter onstop
+interface MediaSession
+    attribute @@toStringTag
+    getter metadata
+    getter playbackState
+    method constructor
+    method setActionHandler
+    method setPositionState
+    setter metadata
+    setter playbackState
+interface MediaSettingsRange
+    attribute @@toStringTag
+    getter max
+    getter min
+    getter step
+    method constructor
+interface MediaSource : EventTarget
+    static method isTypeSupported
+    attribute @@toStringTag
+    getter activeSourceBuffers
+    getter duration
+    getter onsourceclose
+    getter onsourceended
+    getter onsourceopen
+    getter readyState
+    getter sourceBuffers
+    method addSourceBuffer
+    method clearLiveSeekableRange
+    method constructor
+    method endOfStream
+    method removeSourceBuffer
+    method setLiveSeekableRange
+    setter duration
+    setter onsourceclose
+    setter onsourceended
+    setter onsourceopen
+interface MediaStream : EventTarget
+    attribute @@toStringTag
+    getter active
+    getter id
+    getter onactive
+    getter onaddtrack
+    getter oninactive
+    getter onremovetrack
+    method addTrack
+    method clone
+    method constructor
+    method getAudioTracks
+    method getTrackById
+    method getTracks
+    method getVideoTracks
+    method removeTrack
+    setter onactive
+    setter onaddtrack
+    setter oninactive
+    setter onremovetrack
+interface MediaStreamAudioDestinationNode : AudioNode
+    attribute @@toStringTag
+    getter stream
+    method constructor
+interface MediaStreamAudioSourceNode : AudioNode
+    attribute @@toStringTag
+    getter mediaStream
+    method constructor
+interface MediaStreamEvent : Event
+    attribute @@toStringTag
+    getter stream
+    method constructor
+interface MediaStreamTrack : EventTarget
+    attribute @@toStringTag
+    getter contentHint
+    getter enabled
+    getter id
+    getter kind
+    getter label
+    getter muted
+    getter onended
+    getter onmute
+    getter onunmute
+    getter readyState
+    method applyConstraints
+    method clone
+    method constructor
+    method getCapabilities
+    method getConstraints
+    method getSettings
+    method stop
+    setter contentHint
+    setter enabled
+    setter onended
+    setter onmute
+    setter onunmute
+interface MediaStreamTrackEvent : Event
+    attribute @@toStringTag
+    getter track
+    method constructor
+interface MerchantValidationEvent : Event
+    attribute @@toStringTag
+    getter methodName
+    getter validationURL
+    method complete
+    method constructor
+interface MessageChannel
+    attribute @@toStringTag
+    getter port1
+    getter port2
+    method constructor
+interface MessageEvent : Event
+    attribute @@toStringTag
+    getter data
+    getter lastEventId
+    getter origin
+    getter ports
+    getter source
+    getter userActivation
+    method constructor
+    method initMessageEvent
+interface MessagePort : EventTarget
+    attribute @@toStringTag
+    getter onmessage
+    getter onmessageerror
+    method close
+    method constructor
+    method postMessage
+    method start
+    setter onmessage
+    setter onmessageerror
+interface MimeType
+    attribute @@toStringTag
+    getter description
+    getter enabledPlugin
+    getter suffixes
+    getter type
+    method constructor
+interface MimeTypeArray
+    attribute @@toStringTag
+    getter length
+    method @@iterator
+    method constructor
+    method item
+    method namedItem
+interface Mojo
+    static method bindInterface
+    static method createDataPipe
+    static method createMessagePipe
+    static method createSharedBuffer
+    attribute @@toStringTag
+    attribute RESULT_ABORTED
+    attribute RESULT_ALREADY_EXISTS
+    attribute RESULT_BUSY
+    attribute RESULT_CANCELLED
+    attribute RESULT_DATA_LOSS
+    attribute RESULT_DEADLINE_EXCEEDED
+    attribute RESULT_FAILED_PRECONDITION
+    attribute RESULT_INTERNAL
+    attribute RESULT_INVALID_ARGUMENT
+    attribute RESULT_NOT_FOUND
+    attribute RESULT_OK
+    attribute RESULT_OUT_OF_RANGE
+    attribute RESULT_PERMISSION_DENIED
+    attribute RESULT_RESOURCE_EXHAUSTED
+    attribute RESULT_SHOULD_WAIT
+    attribute RESULT_UNAVAILABLE
+    attribute RESULT_UNIMPLEMENTED
+    attribute RESULT_UNKNOWN
+    method constructor
+interface MojoHandle
+    attribute @@toStringTag
+    method close
+    method constructor
+    method discardData
+    method duplicateBufferHandle
+    method mapBuffer
+    method queryData
+    method readData
+    method readMessage
+    method watch
+    method writeData
+    method writeMessage
+interface MojoInterfaceInterceptor : EventTarget
+    attribute @@toStringTag
+    getter oninterfacerequest
+    method constructor
+    method start
+    method stop
+    setter oninterfacerequest
+interface MojoInterfaceRequestEvent : Event
+    attribute @@toStringTag
+    getter handle
+    method constructor
+interface MojoWatcher
+    attribute @@toStringTag
+    method cancel
+    method constructor
+interface MouseEvent : UIEvent
+    attribute @@toStringTag
+    getter altKey
+    getter button
+    getter buttons
+    getter clientX
+    getter clientY
+    getter ctrlKey
+    getter fromElement
+    getter layerX
+    getter layerY
+    getter metaKey
+    getter movementX
+    getter movementY
+    getter offsetX
+    getter offsetY
+    getter pageX
+    getter pageY
+    getter region
+    getter relatedTarget
+    getter screenX
+    getter screenY
+    getter shiftKey
+    getter toElement
+    getter x
+    getter y
+    method constructor
+    method getModifierState
+    method initMouseEvent
+interface MutationEvent : Event
+    attribute @@toStringTag
+    attribute ADDITION
+    attribute MODIFICATION
+    attribute REMOVAL
+    getter attrChange
+    getter attrName
+    getter newValue
+    getter prevValue
+    getter relatedNode
+    method constructor
+    method initMutationEvent
+interface MutationObserver
+    attribute @@toStringTag
+    method constructor
+    method disconnect
+    method observe
+    method takeRecords
+interface MutationRecord
+    attribute @@toStringTag
+    getter addedNodes
+    getter attributeName
+    getter attributeNamespace
+    getter nextSibling
+    getter oldValue
+    getter previousSibling
+    getter removedNodes
+    getter target
+    getter type
+    method constructor
+interface NDEFErrorEvent : Event
+    attribute @@toStringTag
+    getter error
+    method constructor
+interface NDEFMessage
+    attribute @@toStringTag
+    getter records
+    getter url
+    method constructor
+interface NDEFReader : EventTarget
+    attribute @@toStringTag
+    getter onerror
+    getter onreading
+    method constructor
+    method scan
+    setter onerror
+    setter onreading
+interface NDEFReadingEvent : Event
+    attribute @@toStringTag
+    getter message
+    getter serialNumber
+    method constructor
+interface NDEFRecord
+    attribute @@toStringTag
+    getter data
+    getter encoding
+    getter id
+    getter lang
+    getter mediaType
+    getter recordType
+    method constructor
+    method toRecords
+interface NDEFWriter
+    attribute @@toStringTag
+    method constructor
+    method push
+interface NamedNodeMap
+    attribute @@toStringTag
+    getter length
+    method @@iterator
+    method constructor
+    method getNamedItem
+    method getNamedItemNS
+    method item
+    method removeNamedItem
+    method removeNamedItemNS
+    method setNamedItem
+    method setNamedItemNS
+interface NavigationPreloadManager
+    attribute @@toStringTag
+    method constructor
+    method disable
+    method enable
+    method getState
+    method setHeaderValue
+interface Navigator
+    attribute @@toStringTag
+    getter appCodeName
+    getter appName
+    getter appVersion
+    getter clipboard
+    getter connection
+    getter contacts
+    getter cookieEnabled
+    getter credentials
+    getter deviceMemory
+    getter doNotTrack
+    getter geolocation
+    getter hardwareConcurrency
+    getter hid
+    getter keyboard
+    getter language
+    getter languages
+    getter locks
+    getter maxTouchPoints
+    getter mediaCapabilities
+    getter mediaDevices
+    getter mediaSession
+    getter mimeTypes
+    getter onLine
+    getter permissions
+    getter platform
+    getter plugins
+    getter presentation
+    getter product
+    getter productSub
+    getter scheduling
+    getter screen
+    getter serial
+    getter serviceWorker
+    getter sms
+    getter storage
+    getter usb
+    getter userActivation
+    getter userAgent
+    getter vendor
+    getter vendorSub
+    getter wakeLock
+    getter webkitPersistentStorage
+    getter webkitTemporaryStorage
+    getter xr
+    method canShare
+    method clearExperimentalAppBadge
+    method constructor
+    method getBattery
+    method getGamepads
+    method getInstalledRelatedApps
+    method getUserAgent
+    method getUserMedia
+    method javaEnabled
+    method registerProtocolHandler
+    method requestMIDIAccess
+    method requestMediaKeySystemAccess
+    method sendBeacon
+    method setExperimentalAppBadge
+    method share
+    method unregisterProtocolHandler
+    method vibrate
+    method webkitGetUserMedia
+interface NetworkInformation : EventTarget
+    attribute @@toStringTag
+    getter downlink
+    getter downlinkMax
+    getter effectiveType
+    getter onchange
+    getter ontypechange
+    getter rtt
+    getter saveData
+    getter type
+    method constructor
+    setter onchange
+    setter ontypechange
+interface Node : EventTarget
+    attribute @@toStringTag
+    attribute ATTRIBUTE_NODE
+    attribute CDATA_SECTION_NODE
+    attribute COMMENT_NODE
+    attribute DOCUMENT_FRAGMENT_NODE
+    attribute DOCUMENT_NODE
+    attribute DOCUMENT_POSITION_CONTAINED_BY
+    attribute DOCUMENT_POSITION_CONTAINS
+    attribute DOCUMENT_POSITION_DISCONNECTED
+    attribute DOCUMENT_POSITION_FOLLOWING
+    attribute DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC
+    attribute DOCUMENT_POSITION_PRECEDING
+    attribute DOCUMENT_TYPE_NODE
+    attribute ELEMENT_NODE
+    attribute ENTITY_NODE
+    attribute ENTITY_REFERENCE_NODE
+    attribute NOTATION_NODE
+    attribute PROCESSING_INSTRUCTION_NODE
+    attribute TEXT_NODE
+    getter baseURI
+    getter childNodes
+    getter firstChild
+    getter isConnected
+    getter lastChild
+    getter nextSibling
+    getter nodeName
+    getter nodeType
+    getter nodeValue
+    getter ownerDocument
+    getter parentElement
+    getter parentNode
+    getter previousSibling
+    getter textContent
+    method appendChild
+    method cloneNode
+    method compareDocumentPosition
+    method constructor
+    method contains
+    method getRootNode
+    method hasChildNodes
+    method insertBefore
+    method isDefaultNamespace
+    method isEqualNode
+    method isSameNode
+    method lookupNamespaceURI
+    method lookupPrefix
+    method normalize
+    method removeChild
+    method replaceChild
+    setter nodeValue
+    setter textContent
+interface NodeIterator
+    attribute @@toStringTag
+    getter filter
+    getter pointerBeforeReferenceNode
+    getter referenceNode
+    getter root
+    getter whatToShow
+    method constructor
+    method detach
+    method nextNode
+    method previousNode
+interface NodeList
+    attribute @@toStringTag
+    getter length
+    method @@iterator
+    method constructor
+    method entries
+    method forEach
+    method item
+    method keys
+    method values
+interface Notification : EventTarget
+    static getter maxActions
+    static getter permission
+    static method requestPermission
+    attribute @@toStringTag
+    getter actions
+    getter badge
+    getter body
+    getter data
+    getter dir
+    getter icon
+    getter lang
+    getter onclick
+    getter onclose
+    getter onerror
+    getter onshow
+    getter renotify
+    getter requireInteraction
+    getter showTrigger
+    getter silent
+    getter tag
+    getter timestamp
+    getter title
+    getter vibrate
+    method close
+    method constructor
+    setter onclick
+    setter onclose
+    setter onerror
+    setter onshow
+interface OfflineAudioCompletionEvent : Event
+    attribute @@toStringTag
+    getter renderedBuffer
+    method constructor
+interface OfflineAudioContext : BaseAudioContext
+    attribute @@toStringTag
+    getter length
+    getter oncomplete
+    method constructor
+    method resume
+    method startRendering
+    method suspend
+    setter oncomplete
+interface OffscreenCanvas : EventTarget
+    attribute @@toStringTag
+    getter height
+    getter width
+    method constructor
+    method convertToBlob
+    method getContext
+    method transferToImageBitmap
+    setter height
+    setter width
+interface OffscreenCanvasRenderingContext2D
+    attribute @@toStringTag
+    getter canvas
+    getter direction
+    getter fillStyle
+    getter filter
+    getter font
+    getter globalAlpha
+    getter globalCompositeOperation
+    getter imageSmoothingEnabled
+    getter imageSmoothingQuality
+    getter lineCap
+    getter lineDashOffset
+    getter lineJoin
+    getter lineWidth
+    getter miterLimit
+    getter shadowBlur
+    getter shadowColor
+    getter shadowOffsetX
+    getter shadowOffsetY
+    getter strokeStyle
+    getter textAlign
+    getter textBaseline
+    method arc
+    method arcTo
+    method beginPath
+    method bezierCurveTo
+    method clearRect
+    method clip
+    method closePath
+    method commit
+    method constructor
+    method createImageData
+    method createLinearGradient
+    method createPattern
+    method createRadialGradient
+    method drawImage
+    method ellipse
+    method fill
+    method fillRect
+    method fillText
+    method getImageData
+    method getLineDash
+    method getTransform
+    method isPointInPath
+    method isPointInStroke
+    method lineTo
+    method measureText
+    method moveTo
+    method putImageData
+    method quadraticCurveTo
+    method rect
+    method resetTransform
+    method restore
+    method rotate
+    method save
+    method scale
+    method setLineDash
+    method setTransform
+    method stroke
+    method strokeRect
+    method strokeText
+    method transform
+    method translate
+    setter direction
+    setter fillStyle
+    setter filter
+    setter font
+    setter globalAlpha
+    setter globalCompositeOperation
+    setter imageSmoothingEnabled
+    setter imageSmoothingQuality
+    setter lineCap
+    setter lineDashOffset
+    setter lineJoin
+    setter lineWidth
+    setter miterLimit
+    setter shadowBlur
+    setter shadowColor
+    setter shadowOffsetX
+    setter shadowOffsetY
+    setter strokeStyle
+    setter textAlign
+    setter textBaseline
+interface Option
+    attribute @@toStringTag
+    getter defaultSelected
+    getter disabled
+    getter form
+    getter index
+    getter label
+    getter selected
+    getter text
+    getter value
+    method constructor
+    setter defaultSelected
+    setter disabled
+    setter label
+    setter selected
+    setter text
+    setter value
+interface OrientationSensor : Sensor
+    attribute @@toStringTag
+    getter quaternion
+    method constructor
+    method populateMatrix
+interface OscillatorNode : AudioScheduledSourceNode
+    attribute @@toStringTag
+    getter detune
+    getter frequency
+    getter type
+    method constructor
+    method setPeriodicWave
+    setter type
+interface OverconstrainedError
+    attribute @@toStringTag
+    getter constraint
+    getter message
+    getter name
+    method constructor
+interface OverscrollEvent : Event
+    attribute @@toStringTag
+    getter deltaX
+    getter deltaY
+    method constructor
+interface PageTransitionEvent : Event
+    attribute @@toStringTag
+    getter persisted
+    method constructor
+interface PannerNode : AudioNode
+    attribute @@toStringTag
+    getter coneInnerAngle
+    getter coneOuterAngle
+    getter coneOuterGain
+    getter distanceModel
+    getter maxDistance
+    getter orientationX
+    getter orientationY
+    getter orientationZ
+    getter panningModel
+    getter positionX
+    getter positionY
+    getter positionZ
+    getter refDistance
+    getter rolloffFactor
+    method constructor
+    method setOrientation
+    method setPosition
+    setter coneInnerAngle
+    setter coneOuterAngle
+    setter coneOuterGain
+    setter distanceModel
+    setter maxDistance
+    setter panningModel
+    setter refDistance
+    setter rolloffFactor
+interface PasswordCredential : Credential
+    attribute @@toStringTag
+    getter iconURL
+    getter name
+    getter password
+    method constructor
+interface Path2D
+    attribute @@toStringTag
+    method addPath
+    method arc
+    method arcTo
+    method bezierCurveTo
+    method closePath
+    method constructor
+    method ellipse
+    method lineTo
+    method moveTo
+    method quadraticCurveTo
+    method rect
+interface PaymentAddress
+    attribute @@toStringTag
+    getter addressLine
+    getter city
+    getter country
+    getter dependentLocality
+    getter organization
+    getter phone
+    getter postalCode
+    getter recipient
+    getter region
+    getter sortingCode
+    method constructor
+    method toJSON
+interface PaymentInstruments
+    attribute @@toStringTag
+    method clear
+    method constructor
+    method delete
+    method get
+    method has
+    method keys
+    method set
+interface PaymentManager
+    attribute @@toStringTag
+    getter instruments
+    getter userHint
+    method constructor
+    method enableDelegations
+    setter userHint
+interface PaymentMethodChangeEvent : PaymentRequestUpdateEvent
+    attribute @@toStringTag
+    getter methodDetails
+    getter methodName
+    method constructor
+interface PaymentRequest : EventTarget
+    attribute @@toStringTag
+    getter id
+    getter onpaymentmethodchange
+    getter onshippingaddresschange
+    getter onshippingoptionchange
+    getter shippingAddress
+    getter shippingOption
+    getter shippingType
+    method abort
+    method canMakePayment
+    method constructor
+    method hasEnrolledInstrument
+    method show
+    setter onpaymentmethodchange
+    setter onshippingaddresschange
+    setter onshippingoptionchange
+interface PaymentRequestUpdateEvent : Event
+    attribute @@toStringTag
+    method constructor
+    method updateWith
+interface PaymentResponse : EventTarget
+    attribute @@toStringTag
+    getter details
+    getter methodName
+    getter onpayerdetailchange
+    getter payerEmail
+    getter payerName
+    getter payerPhone
+    getter requestId
+    getter shippingAddress
+    getter shippingOption
+    method complete
+    method constructor
+    method retry
+    method toJSON
+    setter onpayerdetailchange
+interface Performance : EventTarget
+    attribute @@toStringTag
+    getter memory
+    getter navigation
+    getter onresourcetimingbufferfull
+    getter timeOrigin
+    getter timing
+    method clearMarks
+    method clearMeasures
+    method clearResourceTimings
+    method constructor
+    method getEntries
+    method getEntriesByName
+    method getEntriesByType
+    method mark
+    method measure
+    method measureMemory
+    method now
+    method profile
+    method setResourceTimingBufferSize
+    method toJSON
+    setter onresourcetimingbufferfull
+interface PerformanceElementTiming : PerformanceEntry
+    attribute @@toStringTag
+    getter element
+    getter id
+    getter identifier
+    getter intersectionRect
+    getter loadTime
+    getter naturalHeight
+    getter naturalWidth
+    getter renderTime
+    getter url
+    method constructor
+    method toJSON
+interface PerformanceEntry
+    attribute @@toStringTag
+    getter duration
+    getter entryType
+    getter name
+    getter startTime
+    method constructor
+    method toJSON
+interface PerformanceEventTiming : PerformanceEntry
+    attribute @@toStringTag
+    getter cancelable
+    getter processingEnd
+    getter processingStart
+    method constructor
+    method toJSON
+interface PerformanceLongTaskTiming : PerformanceEntry
+    attribute @@toStringTag
+    getter attribution
+    method constructor
+    method toJSON
+interface PerformanceMark : PerformanceEntry
+    attribute @@toStringTag
+    getter detail
+    method constructor
+interface PerformanceMeasure : PerformanceEntry
+    attribute @@toStringTag
+    getter detail
+    method constructor
+interface PerformanceNavigation
+    attribute @@toStringTag
+    attribute TYPE_BACK_FORWARD
+    attribute TYPE_NAVIGATE
+    attribute TYPE_RELOAD
+    attribute TYPE_RESERVED
+    getter redirectCount
+    getter type
+    method constructor
+    method toJSON
+interface PerformanceNavigationTiming : PerformanceResourceTiming
+    attribute @@toStringTag
+    getter domComplete
+    getter domContentLoadedEventEnd
+    getter domContentLoadedEventStart
+    getter domInteractive
+    getter loadEventEnd
+    getter loadEventStart
+    getter redirectCount
+    getter type
+    getter unloadEventEnd
+    getter unloadEventStart
+    method constructor
+    method toJSON
+interface PerformanceObserver
+    static getter supportedEntryTypes
+    attribute @@toStringTag
+    method constructor
+    method disconnect
+    method observe
+    method takeRecords
+interface PerformanceObserverEntryList
+    attribute @@toStringTag
+    method constructor
+    method getEntries
+    method getEntriesByName
+    method getEntriesByType
+interface PerformancePaintTiming : PerformanceEntry
+    attribute @@toStringTag
+    method constructor
+interface PerformanceResourceTiming : PerformanceEntry
+    attribute @@toStringTag
+    getter connectEnd
+    getter connectStart
+    getter decodedBodySize
+    getter domainLookupEnd
+    getter domainLookupStart
+    getter encodedBodySize
+    getter fetchStart
+    getter initiatorType
+    getter nextHopProtocol
+    getter redirectEnd
+    getter redirectStart
+    getter requestStart
+    getter responseEnd
+    getter responseStart
+    getter secureConnectionStart
+    getter serverTiming
+    getter transferSize
+    getter workerStart
+    getter workerTiming
+    method constructor
+    method toJSON
+interface PerformanceServerTiming
+    attribute @@toStringTag
+    getter description
+    getter duration
+    getter name
+    method constructor
+    method toJSON
+interface PerformanceTiming
+    attribute @@toStringTag
+    getter connectEnd
+    getter connectStart
+    getter domComplete
+    getter domContentLoadedEventEnd
+    getter domContentLoadedEventStart
+    getter domInteractive
+    getter domLoading
+    getter domainLookupEnd
+    getter domainLookupStart
+    getter fetchStart
+    getter loadEventEnd
+    getter loadEventStart
+    getter navigationStart
+    getter redirectEnd
+    getter redirectStart
+    getter requestStart
+    getter responseEnd
+    getter responseStart
+    getter secureConnectionStart
+    getter unloadEventEnd
+    getter unloadEventStart
+    method constructor
+    method toJSON
+interface PeriodicSyncManager
+    attribute @@toStringTag
+    method constructor
+    method getTags
+    method register
+    method unregister
+interface PeriodicWave
+    attribute @@toStringTag
+    method constructor
+interface PermissionStatus : EventTarget
+    attribute @@toStringTag
+    getter onchange
+    getter state
+    method constructor
+    setter onchange
+interface Permissions
+    attribute @@toStringTag
+    method constructor
+    method query
+    method request
+    method requestAll
+    method revoke
+interface PhotoCapabilities
+    attribute @@toStringTag
+    getter fillLightMode
+    getter imageHeight
+    getter imageWidth
+    getter redEyeReduction
+    method constructor
+interface PictureInPictureWindow : EventTarget
+    attribute @@toStringTag
+    getter height
+    getter onresize
+    getter width
+    method constructor
+    setter onresize
+interface Plugin
+    attribute @@toStringTag
+    getter description
+    getter filename
+    getter length
+    getter name
+    method @@iterator
+    method constructor
+    method item
+    method namedItem
+interface PluginArray
+    attribute @@toStringTag
+    getter length
+    method @@iterator
+    method constructor
+    method item
+    method namedItem
+    method refresh
+interface PointerEvent : MouseEvent
+    attribute @@toStringTag
+    getter height
+    getter isPrimary
+    getter pointerId
+    getter pointerType
+    getter pressure
+    getter tangentialPressure
+    getter tiltX
+    getter tiltY
+    getter twist
+    getter width
+    method constructor
+    method getCoalescedEvents
+    method getPredictedEvents
+interface PopStateEvent : Event
+    attribute @@toStringTag
+    getter state
+    method constructor
+interface PortalActivateEvent : Event
+    attribute @@toStringTag
+    getter data
+    method adoptPredecessor
+    method constructor
+interface PortalHost : EventTarget
+    attribute @@toStringTag
+    getter onmessage
+    getter onmessageerror
+    method constructor
+    method postMessage
+    setter onmessage
+    setter onmessageerror
+interface Presentation
+    attribute @@toStringTag
+    getter defaultRequest
+    getter receiver
+    method constructor
+    setter defaultRequest
+interface PresentationAvailability : EventTarget
+    attribute @@toStringTag
+    getter onchange
+    getter value
+    method constructor
+    setter onchange
+interface PresentationConnection : EventTarget
+    attribute @@toStringTag
+    getter binaryType
+    getter id
+    getter onclose
+    getter onconnect
+    getter onmessage
+    getter onterminate
+    getter state
+    getter url
+    method close
+    method constructor
+    method send
+    method terminate
+    setter binaryType
+    setter onclose
+    setter onconnect
+    setter onmessage
+    setter onterminate
+interface PresentationConnectionAvailableEvent : Event
+    attribute @@toStringTag
+    getter connection
+    method constructor
+interface PresentationConnectionCloseEvent : Event
+    attribute @@toStringTag
+    getter message
+    getter reason
+    method constructor
+interface PresentationConnectionList : EventTarget
+    attribute @@toStringTag
+    getter connections
+    getter onconnectionavailable
+    method constructor
+    setter onconnectionavailable
+interface PresentationReceiver
+    attribute @@toStringTag
+    getter connectionList
+    method constructor
+interface PresentationRequest : EventTarget
+    attribute @@toStringTag
+    getter onconnectionavailable
+    method constructor
+    method getAvailability
+    method reconnect
+    method start
+    setter onconnectionavailable
+interface ProcessingInstruction : CharacterData
+    attribute @@toStringTag
+    getter sheet
+    getter target
+    method constructor
+interface Profiler
+    attribute @@toStringTag
+    getter sampleInterval
+    getter stopped
+    method constructor
+    method stop
+interface ProgressEvent : Event
+    attribute @@toStringTag
+    getter lengthComputable
+    getter loaded
+    getter total
+    method constructor
+interface PromiseRejectionEvent : Event
+    attribute @@toStringTag
+    getter promise
+    getter reason
+    method constructor
+interface PublicKeyCredential : Credential
+    static method isUserVerifyingPlatformAuthenticatorAvailable
+    attribute @@toStringTag
+    getter rawId
+    getter response
+    method constructor
+    method getClientExtensionResults
+interface PushManager
+    static getter supportedContentEncodings
+    attribute @@toStringTag
+    method constructor
+    method getSubscription
+    method permissionState
+    method subscribe
+interface PushSubscription
+    attribute @@toStringTag
+    getter endpoint
+    getter expirationTime
+    getter options
+    method constructor
+    method getKey
+    method toJSON
+    method unsubscribe
+interface PushSubscriptionOptions
+    attribute @@toStringTag
+    getter applicationServerKey
+    getter userVisibleOnly
+    method constructor
+interface QuicTransport
+    attribute @@toStringTag
+    method close
+    method constructor
+interface RTCCertificate
+    attribute @@toStringTag
+    getter expires
+    method constructor
+    method getFingerprints
+interface RTCDTMFSender : EventTarget
+    attribute @@toStringTag
+    getter canInsertDTMF
+    getter ontonechange
+    getter toneBuffer
+    method constructor
+    method insertDTMF
+    setter ontonechange
+interface RTCDTMFToneChangeEvent : Event
+    attribute @@toStringTag
+    getter tone
+    method constructor
+interface RTCDataChannel : EventTarget
+    attribute @@toStringTag
+    getter binaryType
+    getter bufferedAmount
+    getter bufferedAmountLowThreshold
+    getter id
+    getter label
+    getter maxPacketLifeTime
+    getter maxRetransmits
+    getter negotiated
+    getter onbufferedamountlow
+    getter onclose
+    getter onerror
+    getter onmessage
+    getter onopen
+    getter ordered
+    getter protocol
+    getter readyState
+    getter reliable
+    method close
+    method constructor
+    method send
+    setter binaryType
+    setter bufferedAmountLowThreshold
+    setter onbufferedamountlow
+    setter onclose
+    setter onerror
+    setter onmessage
+    setter onopen
+interface RTCDataChannelEvent : Event
+    attribute @@toStringTag
+    getter channel
+    method constructor
+interface RTCDtlsTransport : EventTarget
+    attribute @@toStringTag
+    getter iceTransport
+    getter onerror
+    getter onstatechange
+    getter state
+    method constructor
+    method getRemoteCertificates
+    setter onerror
+    setter onstatechange
+interface RTCError : DOMException
+    attribute @@toStringTag
+    getter errorDetail
+    getter httpRequestStatusCode
+    getter receivedAlert
+    getter sctpCauseCode
+    getter sdpLineNumber
+    getter sentAlert
+    method constructor
+interface RTCErrorEvent : Event
+    attribute @@toStringTag
+    getter error
+    method constructor
+interface RTCIceCandidate
+    attribute @@toStringTag
+    getter address
+    getter candidate
+    getter component
+    getter foundation
+    getter port
+    getter priority
+    getter protocol
+    getter relatedAddress
+    getter relatedPort
+    getter sdpMLineIndex
+    getter sdpMid
+    getter tcpType
+    getter type
+    getter usernameFragment
+    method constructor
+    method toJSON
+interface RTCIceTransport : EventTarget
+    attribute @@toStringTag
+    getter gatheringState
+    getter ongatheringstatechange
+    getter onicecandidate
+    getter onselectedcandidatepairchange
+    getter onstatechange
+    getter role
+    getter state
+    method addRemoteCandidate
+    method constructor
+    method gather
+    method getLocalCandidates
+    method getLocalParameters
+    method getRemoteCandidates
+    method getRemoteParameters
+    method getSelectedCandidatePair
+    method start
+    method stop
+    setter ongatheringstatechange
+    setter onicecandidate
+    setter onselectedcandidatepairchange
+    setter onstatechange
+interface RTCPeerConnection : EventTarget
+    static method generateCertificate
+    attribute @@toStringTag
+    getter connectionState
+    getter currentLocalDescription
+    getter currentRemoteDescription
+    getter iceConnectionState
+    getter iceGatheringState
+    getter localDescription
+    getter onaddstream
+    getter onconnectionstatechange
+    getter ondatachannel
+    getter onicecandidate
+    getter onicecandidateerror
+    getter oniceconnectionstatechange
+    getter onicegatheringstatechange
+    getter onnegotiationneeded
+    getter onremovestream
+    getter onsignalingstatechange
+    getter ontrack
+    getter pendingLocalDescription
+    getter pendingRemoteDescription
+    getter remoteDescription
+    getter sctp
+    getter signalingState
+    method addIceCandidate
+    method addStream
+    method addTrack
+    method addTransceiver
+    method close
+    method constructor
+    method createAnswer
+    method createDTMFSender
+    method createDataChannel
+    method createOffer
+    method getConfiguration
+    method getLocalStreams
+    method getReceivers
+    method getRemoteStreams
+    method getSenders
+    method getStats
+    method getTransceivers
+    method removeStream
+    method removeTrack
+    method restartIce
+    method setConfiguration
+    method setLocalDescription
+    method setRemoteDescription
+    setter onaddstream
+    setter onconnectionstatechange
+    setter ondatachannel
+    setter onicecandidate
+    setter onicecandidateerror
+    setter oniceconnectionstatechange
+    setter onicegatheringstatechange
+    setter onnegotiationneeded
+    setter onremovestream
+    setter onsignalingstatechange
+    setter ontrack
+interface RTCPeerConnectionIceErrorEvent : Event
+    attribute @@toStringTag
+    getter errorCode
+    getter errorText
+    getter hostCandidate
+    getter url
+    method constructor
+interface RTCPeerConnectionIceEvent : Event
+    attribute @@toStringTag
+    getter candidate
+    method constructor
+interface RTCQuicStream : EventTarget
+    attribute @@toStringTag
+    getter maxReadBufferedAmount
+    getter maxWriteBufferedAmount
+    getter onstatechange
+    getter readBufferedAmount
+    getter state
+    getter transport
+    getter writeBufferedAmount
+    method constructor
+    method readInto
+    method reset
+    method waitForReadable
+    method waitForWriteBufferedAmountBelow
+    method write
+    setter onstatechange
+interface RTCQuicStreamEvent : Event
+    attribute @@toStringTag
+    getter stream
+    method constructor
+interface RTCQuicTransport : EventTarget
+    attribute @@toStringTag
+    getter maxDatagramLength
+    getter onerror
+    getter onquicstream
+    getter onstatechange
+    getter state
+    getter transport
+    method connect
+    method constructor
+    method createStream
+    method getKey
+    method getStats
+    method listen
+    method readyToSendDatagram
+    method receiveDatagrams
+    method sendDatagram
+    method stop
+    setter onerror
+    setter onquicstream
+    setter onstatechange
+interface RTCRtpReceiver
+    static method getCapabilities
+    attribute @@toStringTag
+    getter playoutDelayHint
+    getter rtcpTransport
+    getter track
+    getter transport
+    method constructor
+    method getContributingSources
+    method getParameters
+    method getStats
+    method getSynchronizationSources
+    setter playoutDelayHint
+interface RTCRtpSender
+    static method getCapabilities
+    attribute @@toStringTag
+    getter dtmf
+    getter rtcpTransport
+    getter track
+    getter transport
+    method constructor
+    method getParameters
+    method getStats
+    method replaceTrack
+    method setParameters
+    method setStreams
+interface RTCRtpTransceiver
+    attribute @@toStringTag
+    getter currentDirection
+    getter direction
+    getter mid
+    getter receiver
+    getter sender
+    getter stopped
+    method constructor
+    method setCodecPreferences
+    setter direction
+interface RTCSctpTransport : EventTarget
+    attribute @@toStringTag
+    getter maxChannels
+    getter maxMessageSize
+    getter onstatechange
+    getter state
+    getter transport
+    method constructor
+    setter onstatechange
+interface RTCSessionDescription
+    attribute @@toStringTag
+    getter sdp
+    getter type
+    method constructor
+    method toJSON
+    setter sdp
+    setter type
+interface RTCStatsReport
+    attribute @@toStringTag
+    getter size
+    method @@iterator
+    method constructor
+    method entries
+    method forEach
+    method get
+    method has
+    method keys
+    method values
+interface RTCTrackEvent : Event
+    attribute @@toStringTag
+    getter receiver
+    getter streams
+    getter track
+    getter transceiver
+    method constructor
+interface RadioNodeList : NodeList
+    attribute @@toStringTag
+    getter value
+    method constructor
+    setter value
+interface Range
+    attribute @@toStringTag
+    attribute END_TO_END
+    attribute END_TO_START
+    attribute START_TO_END
+    attribute START_TO_START
+    getter collapsed
+    getter commonAncestorContainer
+    getter endContainer
+    getter endOffset
+    getter startContainer
+    getter startOffset
+    method cloneContents
+    method cloneRange
+    method collapse
+    method compareBoundaryPoints
+    method comparePoint
+    method constructor
+    method createContextualFragment
+    method deleteContents
+    method detach
+    method expand
+    method extractContents
+    method getBoundingClientRect
+    method getClientRects
+    method insertNode
+    method intersectsNode
+    method isPointInRange
+    method selectNode
+    method selectNodeContents
+    method setEnd
+    method setEndAfter
+    method setEndBefore
+    method setStart
+    method setStartAfter
+    method setStartBefore
+    method surroundContents
+    method toString
+interface ReadableStream
+    attribute @@toStringTag
+    getter locked
+    method cancel
+    method constructor
+    method getReader
+    method pipeThrough
+    method pipeTo
+    method tee
+interface ReadableStreamDefaultReader
+    attribute @@toStringTag
+    getter closed
+    method cancel
+    method constructor
+    method read
+    method releaseLock
+interface RelativeOrientationSensor : OrientationSensor
+    attribute @@toStringTag
+    method constructor
+interface RemotePlayback : EventTarget
+    attribute @@toStringTag
+    getter onconnect
+    getter onconnecting
+    getter ondisconnect
+    getter state
+    method cancelWatchAvailability
+    method constructor
+    method prompt
+    method watchAvailability
+    setter onconnect
+    setter onconnecting
+    setter ondisconnect
+interface RenderSubtreeActivationEvent : Event
+    attribute @@toStringTag
+    getter activatedElement
+    method constructor
+interface ReportingObserver
+    attribute @@toStringTag
+    method constructor
+    method disconnect
+    method observe
+    method takeRecords
+interface Request
+    attribute @@toStringTag
+    getter bodyUsed
+    getter cache
+    getter credentials
+    getter destination
+    getter headers
+    getter integrity
+    getter isHistoryNavigation
+    getter keepalive
+    getter method
+    getter mode
+    getter redirect
+    getter referrer
+    getter referrerPolicy
+    getter signal
+    getter url
+    method arrayBuffer
+    method blob
+    method clone
+    method constructor
+    method formData
+    method json
+    method text
+interface ResizeObserver
+    attribute @@toStringTag
+    method constructor
+    method disconnect
+    method observe
+    method unobserve
+interface ResizeObserverEntry
+    attribute @@toStringTag
+    getter contentRect
+    getter target
+    method constructor
+interface Response
+    static method error
+    static method redirect
+    attribute @@toStringTag
+    getter body
+    getter bodyUsed
+    getter headers
+    getter ok
+    getter redirected
+    getter status
+    getter statusText
+    getter type
+    getter url
+    method arrayBuffer
+    method blob
+    method clone
+    method constructor
+    method formData
+    method json
+    method text
+interface SMS
+    attribute @@toStringTag
+    getter content
+    method constructor
+interface SMSReceiver
+    attribute @@toStringTag
+    method constructor
+    method receive
+interface SVGAElement : SVGGraphicsElement
+    attribute @@toStringTag
+    getter href
+    getter target
+    method constructor
+interface SVGAngle
+    attribute @@toStringTag
+    attribute SVG_ANGLETYPE_DEG
+    attribute SVG_ANGLETYPE_GRAD
+    attribute SVG_ANGLETYPE_RAD
+    attribute SVG_ANGLETYPE_UNKNOWN
+    attribute SVG_ANGLETYPE_UNSPECIFIED
+    getter unitType
+    getter value
+    getter valueAsString
+    getter valueInSpecifiedUnits
+    method constructor
+    method convertToSpecifiedUnits
+    method newValueSpecifiedUnits
+    setter value
+    setter valueAsString
+    setter valueInSpecifiedUnits
+interface SVGAnimateElement : SVGAnimationElement
+    attribute @@toStringTag
+    method constructor
+interface SVGAnimateMotionElement : SVGAnimationElement
+    attribute @@toStringTag
+    method constructor
+interface SVGAnimateTransformElement : SVGAnimationElement
+    attribute @@toStringTag
+    method constructor
+interface SVGAnimatedAngle
+    attribute @@toStringTag
+    getter animVal
+    getter baseVal
+    method constructor
+interface SVGAnimatedBoolean
+    attribute @@toStringTag
+    getter animVal
+    getter baseVal
+    method constructor
+    setter baseVal
+interface SVGAnimatedEnumeration
+    attribute @@toStringTag
+    getter animVal
+    getter baseVal
+    method constructor
+    setter baseVal
+interface SVGAnimatedInteger
+    attribute @@toStringTag
+    getter animVal
+    getter baseVal
+    method constructor
+    setter baseVal
+interface SVGAnimatedLength
+    attribute @@toStringTag
+    getter animVal
+    getter baseVal
+    method constructor
+interface SVGAnimatedLengthList
+    attribute @@toStringTag
+    getter animVal
+    getter baseVal
+    method constructor
+interface SVGAnimatedNumber
+    attribute @@toStringTag
+    getter animVal
+    getter baseVal
+    method constructor
+    setter baseVal
+interface SVGAnimatedNumberList
+    attribute @@toStringTag
+    getter animVal
+    getter baseVal
+    method constructor
+interface SVGAnimatedPreserveAspectRatio
+    attribute @@toStringTag
+    getter animVal
+    getter baseVal
+    method constructor
+interface SVGAnimatedRect
+    attribute @@toStringTag
+    getter animVal
+    getter baseVal
+    method constructor
+interface SVGAnimatedString
+    attribute @@toStringTag
+    getter animVal
+    getter baseVal
+    method constructor
+    setter baseVal
+interface SVGAnimatedTransformList
+    attribute @@toStringTag
+    getter animVal
+    getter baseVal
+    method constructor
+interface SVGAnimationElement : SVGElement
+    attribute @@toStringTag
+    getter onbegin
+    getter onend
+    getter onrepeat
+    getter requiredExtensions
+    getter systemLanguage
+    getter targetElement
+    method beginElement
+    method beginElementAt
+    method constructor
+    method endElement
+    method endElementAt
+    method getCurrentTime
+    method getSimpleDuration
+    method getStartTime
+    setter onbegin
+    setter onend
+    setter onrepeat
+interface SVGCircleElement : SVGGeometryElement
+    attribute @@toStringTag
+    getter cx
+    getter cy
+    getter r
+    method constructor
+interface SVGClipPathElement : SVGGraphicsElement
+    attribute @@toStringTag
+    getter clipPathUnits
+    method constructor
+interface SVGComponentTransferFunctionElement : SVGElement
+    attribute @@toStringTag
+    attribute SVG_FECOMPONENTTRANSFER_TYPE_DISCRETE
+    attribute SVG_FECOMPONENTTRANSFER_TYPE_GAMMA
+    attribute SVG_FECOMPONENTTRANSFER_TYPE_IDENTITY
+    attribute SVG_FECOMPONENTTRANSFER_TYPE_LINEAR
+    attribute SVG_FECOMPONENTTRANSFER_TYPE_TABLE
+    attribute SVG_FECOMPONENTTRANSFER_TYPE_UNKNOWN
+    getter amplitude
+    getter exponent
+    getter intercept
+    getter offset
+    getter slope
+    getter tableValues
+    getter type
+    method constructor
+interface SVGDefsElement : SVGGraphicsElement
+    attribute @@toStringTag
+    method constructor
+interface SVGDescElement : SVGElement
+    attribute @@toStringTag
+    method constructor
+interface SVGDiscardElement : SVGElement
+    attribute @@toStringTag
+    method constructor
+interface SVGElement : Element
+    attribute @@toStringTag
+    getter autofocus
+    getter className
+    getter dataset
+    getter nonce
+    getter onabort
+    getter onactivateinvisible
+    getter onanimationend
+    getter onanimationiteration
+    getter onanimationstart
+    getter onauxclick
+    getter onblur
+    getter oncancel
+    getter oncanplay
+    getter oncanplaythrough
+    getter onchange
+    getter onclick
+    getter onclose
+    getter oncontextmenu
+    getter oncopy
+    getter oncuechange
+    getter oncut
+    getter ondblclick
+    getter ondrag
+    getter ondragend
+    getter ondragenter
+    getter ondragleave
+    getter ondragover
+    getter ondragstart
+    getter ondrop
+    getter ondurationchange
+    getter onemptied
+    getter onended
+    getter onerror
+    getter onfocus
+    getter onformdata
+    getter ongotpointercapture
+    getter oninput
+    getter oninvalid
+    getter onkeydown
+    getter onkeypress
+    getter onkeyup
+    getter onload
+    getter onloadeddata
+    getter onloadedmetadata
+    getter onloadstart
+    getter onlostpointercapture
+    getter onmousedown
+    getter onmouseenter
+    getter onmouseleave
+    getter onmousemove
+    getter onmouseout
+    getter onmouseover
+    getter onmouseup
+    getter onmousewheel
+    getter onoverscroll
+    getter onpaste
+    getter onpause
+    getter onplay
+    getter onplaying
+    getter onpointercancel
+    getter onpointerdown
+    getter onpointerenter
+    getter onpointerleave
+    getter onpointermove
+    getter onpointerout
+    getter onpointerover
+    getter onpointerrawupdate
+    getter onpointerup
+    getter onprogress
+    getter onratechange
+    getter onrendersubtreeactivation
+    getter onreset
+    getter onresize
+    getter onscroll
+    getter onscrollend
+    getter onseeked
+    getter onseeking
+    getter onselect
+    getter onselectionchange
+    getter onselectstart
+    getter onstalled
+    getter onsubmit
+    getter onsuspend
+    getter ontimeupdate
+    getter ontoggle
+    getter ontouchcancel
+    getter ontouchend
+    getter ontouchmove
+    getter ontouchstart
+    getter ontransitionend
+    getter onvolumechange
+    getter onwaiting
+    getter onwheel
+    getter ownerSVGElement
+    getter style
+    getter tabIndex
+    getter viewportElement
+    method blur
+    method constructor
+    method focus
+    setter autofocus
+    setter nonce
+    setter onabort
+    setter onactivateinvisible
+    setter onanimationend
+    setter onanimationiteration
+    setter onanimationstart
+    setter onauxclick
+    setter onblur
+    setter oncancel
+    setter oncanplay
+    setter oncanplaythrough
+    setter onchange
+    setter onclick
+    setter onclose
+    setter oncontextmenu
+    setter oncopy
+    setter oncuechange
+    setter oncut
+    setter ondblclick
+    setter ondrag
+    setter ondragend
+    setter ondragenter
+    setter ondragleave
+    setter ondragover
+    setter ondragstart
+    setter ondrop
+    setter ondurationchange
+    setter onemptied
+    setter onended
+    setter onerror
+    setter onfocus
+    setter onformdata
+    setter ongotpointercapture
+    setter oninput
+    setter oninvalid
+    setter onkeydown
+    setter onkeypress
+    setter onkeyup
+    setter onload
+    setter onloadeddata
+    setter onloadedmetadata
+    setter onloadstart
+    setter onlostpointercapture
+    setter onmousedown
+    setter onmouseenter
+    setter onmouseleave
+    setter onmousemove
+    setter onmouseout
+    setter onmouseover
+    setter onmouseup
+    setter onmousewheel
+    setter onoverscroll
+    setter onpaste
+    setter onpause
+    setter onplay
+    setter onplaying
+    setter onpointercancel
+    setter onpointerdown
+    setter onpointerenter
+    setter onpointerleave
+    setter onpointermove
+    setter onpointerout
+    setter onpointerover
+    setter onpointerrawupdate
+    setter onpointerup
+    setter onprogress
+    setter onratechange
+    setter onrendersubtreeactivation
+    setter onreset
+    setter onresize
+    setter onscroll
+    setter onscrollend
+    setter onseeked
+    setter onseeking
+    setter onselect
+    setter onselectionchange
+    setter onselectstart
+    setter onstalled
+    setter onsubmit
+    setter onsuspend
+    setter ontimeupdate
+    setter ontoggle
+    setter ontouchcancel
+    setter ontouchend
+    setter ontouchmove
+    setter ontouchstart
+    setter ontransitionend
+    setter onvolumechange
+    setter onwaiting
+    setter onwheel
+    setter style
+    setter tabIndex
+interface SVGEllipseElement : SVGGeometryElement
+    attribute @@toStringTag
+    getter cx
+    getter cy
+    getter rx
+    getter ry
+    method constructor
+interface SVGFEBlendElement : SVGElement
+    attribute @@toStringTag
+    attribute SVG_FEBLEND_MODE_COLOR
+    attribute SVG_FEBLEND_MODE_COLOR_BURN
+    attribute SVG_FEBLEND_MODE_COLOR_DODGE
+    attribute SVG_FEBLEND_MODE_DARKEN
+    attribute SVG_FEBLEND_MODE_DIFFERENCE
+    attribute SVG_FEBLEND_MODE_EXCLUSION
+    attribute SVG_FEBLEND_MODE_HARD_LIGHT
+    attribute SVG_FEBLEND_MODE_HUE
+    attribute SVG_FEBLEND_MODE_LIGHTEN
+    attribute SVG_FEBLEND_MODE_LUMINOSITY
+    attribute SVG_FEBLEND_MODE_MULTIPLY
+    attribute SVG_FEBLEND_MODE_NORMAL
+    attribute SVG_FEBLEND_MODE_OVERLAY
+    attribute SVG_FEBLEND_MODE_SATURATION
+    attribute SVG_FEBLEND_MODE_SCREEN
+    attribute SVG_FEBLEND_MODE_SOFT_LIGHT
+    attribute SVG_FEBLEND_MODE_UNKNOWN
+    getter height
+    getter in1
+    getter in2
+    getter mode
+    getter result
+    getter width
+    getter x
+    getter y
+    method constructor
+interface SVGFEColorMatrixElement : SVGElement
+    attribute @@toStringTag
+    attribute SVG_FECOLORMATRIX_TYPE_HUEROTATE
+    attribute SVG_FECOLORMATRIX_TYPE_LUMINANCETOALPHA
+    attribute SVG_FECOLORMATRIX_TYPE_MATRIX
+    attribute SVG_FECOLORMATRIX_TYPE_SATURATE
+    attribute SVG_FECOLORMATRIX_TYPE_UNKNOWN
+    getter height
+    getter in1
+    getter result
+    getter type
+    getter values
+    getter width
+    getter x
+    getter y
+    method constructor
+interface SVGFEComponentTransferElement : SVGElement
+    attribute @@toStringTag
+    getter height
+    getter in1
+    getter result
+    getter width
+    getter x
+    getter y
+    method constructor
+interface SVGFECompositeElement : SVGElement
+    attribute @@toStringTag
+    attribute SVG_FECOMPOSITE_OPERATOR_ARITHMETIC
+    attribute SVG_FECOMPOSITE_OPERATOR_ATOP
+    attribute SVG_FECOMPOSITE_OPERATOR_IN
+    attribute SVG_FECOMPOSITE_OPERATOR_OUT
+    attribute SVG_FECOMPOSITE_OPERATOR_OVER
+    attribute SVG_FECOMPOSITE_OPERATOR_UNKNOWN
+    attribute SVG_FECOMPOSITE_OPERATOR_XOR
+    getter height
+    getter in1
+    getter in2
+    getter k1
+    getter k2
+    getter k3
+    getter k4
+    getter operator
+    getter result
+    getter width
+    getter x
+    getter y
+    method constructor
+interface SVGFEConvolveMatrixElement : SVGElement
+    attribute @@toStringTag
+    attribute SVG_EDGEMODE_DUPLICATE
+    attribute SVG_EDGEMODE_NONE
+    attribute SVG_EDGEMODE_UNKNOWN
+    attribute SVG_EDGEMODE_WRAP
+    getter bias
+    getter divisor
+    getter edgeMode
+    getter height
+    getter in1
+    getter kernelMatrix
+    getter kernelUnitLengthX
+    getter kernelUnitLengthY
+    getter orderX
+    getter orderY
+    getter preserveAlpha
+    getter result
+    getter targetX
+    getter targetY
+    getter width
+    getter x
+    getter y
+    method constructor
+interface SVGFEDiffuseLightingElement : SVGElement
+    attribute @@toStringTag
+    getter diffuseConstant
+    getter height
+    getter in1
+    getter kernelUnitLengthX
+    getter kernelUnitLengthY
+    getter result
+    getter surfaceScale
+    getter width
+    getter x
+    getter y
+    method constructor
+interface SVGFEDisplacementMapElement : SVGElement
+    attribute @@toStringTag
+    attribute SVG_CHANNEL_A
+    attribute SVG_CHANNEL_B
+    attribute SVG_CHANNEL_G
+    attribute SVG_CHANNEL_R
+    attribute SVG_CHANNEL_UNKNOWN
+    getter height
+    getter in1
+    getter in2
+    getter result
+    getter scale
+    getter width
+    getter x
+    getter xChannelSelector
+    getter y
+    getter yChannelSelector
+    method constructor
+interface SVGFEDistantLightElement : SVGElement
+    attribute @@toStringTag
+    getter azimuth
+    getter elevation
+    method constructor
+interface SVGFEDropShadowElement : SVGElement
+    attribute @@toStringTag
+    getter dx
+    getter dy
+    getter height
+    getter in1
+    getter result
+    getter stdDeviationX
+    getter stdDeviationY
+    getter width
+    getter x
+    getter y
+    method constructor
+    method setStdDeviation
+interface SVGFEFloodElement : SVGElement
+    attribute @@toStringTag
+    getter height
+    getter result
+    getter width
+    getter x
+    getter y
+    method constructor
+interface SVGFEFuncAElement : SVGComponentTransferFunctionElement
+    attribute @@toStringTag
+    method constructor
+interface SVGFEFuncBElement : SVGComponentTransferFunctionElement
+    attribute @@toStringTag
+    method constructor
+interface SVGFEFuncGElement : SVGComponentTransferFunctionElement
+    attribute @@toStringTag
+    method constructor
+interface SVGFEFuncRElement : SVGComponentTransferFunctionElement
+    attribute @@toStringTag
+    method constructor
+interface SVGFEGaussianBlurElement : SVGElement
+    attribute @@toStringTag
+    getter height
+    getter in1
+    getter result
+    getter stdDeviationX
+    getter stdDeviationY
+    getter width
+    getter x
+    getter y
+    method constructor
+    method setStdDeviation
+interface SVGFEImageElement : SVGElement
+    attribute @@toStringTag
+    getter height
+    getter href
+    getter preserveAspectRatio
+    getter result
+    getter width
+    getter x
+    getter y
+    method constructor
+interface SVGFEMergeElement : SVGElement
+    attribute @@toStringTag
+    getter height
+    getter result
+    getter width
+    getter x
+    getter y
+    method constructor
+interface SVGFEMergeNodeElement : SVGElement
+    attribute @@toStringTag
+    getter in1
+    method constructor
+interface SVGFEMorphologyElement : SVGElement
+    attribute @@toStringTag
+    attribute SVG_MORPHOLOGY_OPERATOR_DILATE
+    attribute SVG_MORPHOLOGY_OPERATOR_ERODE
+    attribute SVG_MORPHOLOGY_OPERATOR_UNKNOWN
+    getter height
+    getter in1
+    getter operator
+    getter radiusX
+    getter radiusY
+    getter result
+    getter width
+    getter x
+    getter y
+    method constructor
+interface SVGFEOffsetElement : SVGElement
+    attribute @@toStringTag
+    getter dx
+    getter dy
+    getter height
+    getter in1
+    getter result
+    getter width
+    getter x
+    getter y
+    method constructor
+interface SVGFEPointLightElement : SVGElement
+    attribute @@toStringTag
+    getter x
+    getter y
+    getter z
+    method constructor
+interface SVGFESpecularLightingElement : SVGElement
+    attribute @@toStringTag
+    getter height
+    getter in1
+    getter kernelUnitLengthX
+    getter kernelUnitLengthY
+    getter result
+    getter specularConstant
+    getter specularExponent
+    getter surfaceScale
+    getter width
+    getter x
+    getter y
+    method constructor
+interface SVGFESpotLightElement : SVGElement
+    attribute @@toStringTag
+    getter limitingConeAngle
+    getter pointsAtX
+    getter pointsAtY
+    getter pointsAtZ
+    getter specularExponent
+    getter x
+    getter y
+    getter z
+    method constructor
+interface SVGFETileElement : SVGElement
+    attribute @@toStringTag
+    getter height
+    getter in1
+    getter result
+    getter width
+    getter x
+    getter y
+    method constructor
+interface SVGFETurbulenceElement : SVGElement
+    attribute @@toStringTag
+    attribute SVG_STITCHTYPE_NOSTITCH
+    attribute SVG_STITCHTYPE_STITCH
+    attribute SVG_STITCHTYPE_UNKNOWN
+    attribute SVG_TURBULENCE_TYPE_FRACTALNOISE
+    attribute SVG_TURBULENCE_TYPE_TURBULENCE
+    attribute SVG_TURBULENCE_TYPE_UNKNOWN
+    getter baseFrequencyX
+    getter baseFrequencyY
+    getter height
+    getter numOctaves
+    getter result
+    getter seed
+    getter stitchTiles
+    getter type
+    getter width
+    getter x
+    getter y
+    method constructor
+interface SVGFilterElement : SVGElement
+    attribute @@toStringTag
+    getter filterUnits
+    getter height
+    getter href
+    getter primitiveUnits
+    getter width
+    getter x
+    getter y
+    method constructor
+interface SVGForeignObjectElement : SVGGraphicsElement
+    attribute @@toStringTag
+    getter height
+    getter width
+    getter x
+    getter y
+    method constructor
+interface SVGGElement : SVGGraphicsElement
+    attribute @@toStringTag
+    method constructor
+interface SVGGeometryElement : SVGGraphicsElement
+    attribute @@toStringTag
+    getter pathLength
+    method constructor
+    method getPointAtLength
+    method getTotalLength
+    method isPointInFill
+    method isPointInStroke
+interface SVGGradientElement : SVGElement
+    attribute @@toStringTag
+    attribute SVG_SPREADMETHOD_PAD
+    attribute SVG_SPREADMETHOD_REFLECT
+    attribute SVG_SPREADMETHOD_REPEAT
+    attribute SVG_SPREADMETHOD_UNKNOWN
+    getter gradientTransform
+    getter gradientUnits
+    getter href
+    getter spreadMethod
+    method constructor
+interface SVGGraphicsElement : SVGElement
+    attribute @@toStringTag
+    getter farthestViewportElement
+    getter nearestViewportElement
+    getter requiredExtensions
+    getter systemLanguage
+    getter transform
+    method constructor
+    method getBBox
+    method getCTM
+    method getScreenCTM
+interface SVGImageElement : SVGGraphicsElement
+    attribute @@toStringTag
+    getter decoding
+    getter height
+    getter href
+    getter preserveAspectRatio
+    getter width
+    getter x
+    getter y
+    method constructor
+    method decode
+    setter decoding
+interface SVGLength
+    attribute @@toStringTag
+    attribute SVG_LENGTHTYPE_CM
+    attribute SVG_LENGTHTYPE_EMS
+    attribute SVG_LENGTHTYPE_EXS
+    attribute SVG_LENGTHTYPE_IN
+    attribute SVG_LENGTHTYPE_MM
+    attribute SVG_LENGTHTYPE_NUMBER
+    attribute SVG_LENGTHTYPE_PC
+    attribute SVG_LENGTHTYPE_PERCENTAGE
+    attribute SVG_LENGTHTYPE_PT
+    attribute SVG_LENGTHTYPE_PX
+    attribute SVG_LENGTHTYPE_UNKNOWN
+    getter unitType
+    getter value
+    getter valueAsString
+    getter valueInSpecifiedUnits
+    method constructor
+    method convertToSpecifiedUnits
+    method newValueSpecifiedUnits
+    setter value
+    setter valueAsString
+    setter valueInSpecifiedUnits
+interface SVGLengthList
+    attribute @@toStringTag
+    getter length
+    getter numberOfItems
+    method @@iterator
+    method appendItem
+    method clear
+    method constructor
+    method getItem
+    method initialize
+    method insertItemBefore
+    method removeItem
+    method replaceItem
+interface SVGLineElement : SVGGeometryElement
+    attribute @@toStringTag
+    getter x1
+    getter x2
+    getter y1
+    getter y2
+    method constructor
+interface SVGLinearGradientElement : SVGGradientElement
+    attribute @@toStringTag
+    getter x1
+    getter x2
+    getter y1
+    getter y2
+    method constructor
+interface SVGMPathElement : SVGElement
+    attribute @@toStringTag
+    getter href
+    method constructor
+interface SVGMarkerElement : SVGElement
+    attribute @@toStringTag
+    attribute SVG_MARKERUNITS_STROKEWIDTH
+    attribute SVG_MARKERUNITS_UNKNOWN
+    attribute SVG_MARKERUNITS_USERSPACEONUSE
+    attribute SVG_MARKER_ORIENT_ANGLE
+    attribute SVG_MARKER_ORIENT_AUTO
+    attribute SVG_MARKER_ORIENT_UNKNOWN
+    getter markerHeight
+    getter markerUnits
+    getter markerWidth
+    getter orientAngle
+    getter orientType
+    getter preserveAspectRatio
+    getter refX
+    getter refY
+    getter viewBox
+    method constructor
+    method setOrientToAngle
+    method setOrientToAuto
+interface SVGMaskElement : SVGElement
+    attribute @@toStringTag
+    getter height
+    getter maskContentUnits
+    getter maskUnits
+    getter requiredExtensions
+    getter systemLanguage
+    getter width
+    getter x
+    getter y
+    method constructor
+interface SVGMatrix
+    attribute @@toStringTag
+    getter a
+    getter b
+    getter c
+    getter d
+    getter e
+    getter f
+    method constructor
+    method flipX
+    method flipY
+    method inverse
+    method multiply
+    method rotate
+    method rotateFromVector
+    method scale
+    method scaleNonUniform
+    method skewX
+    method skewY
+    method translate
+    setter a
+    setter b
+    setter c
+    setter d
+    setter e
+    setter f
+interface SVGMetadataElement : SVGElement
+    attribute @@toStringTag
+    method constructor
+interface SVGNumber
+    attribute @@toStringTag
+    getter value
+    method constructor
+    setter value
+interface SVGNumberList
+    attribute @@toStringTag
+    getter length
+    getter numberOfItems
+    method @@iterator
+    method appendItem
+    method clear
+    method constructor
+    method getItem
+    method initialize
+    method insertItemBefore
+    method removeItem
+    method replaceItem
+interface SVGPathElement : SVGGeometryElement
+    attribute @@toStringTag
+    method constructor
+interface SVGPatternElement : SVGElement
+    attribute @@toStringTag
+    getter height
+    getter href
+    getter patternContentUnits
+    getter patternTransform
+    getter patternUnits
+    getter preserveAspectRatio
+    getter requiredExtensions
+    getter systemLanguage
+    getter viewBox
+    getter width
+    getter x
+    getter y
+    method constructor
+interface SVGPoint
+    attribute @@toStringTag
+    getter x
+    getter y
+    method constructor
+    method matrixTransform
+    setter x
+    setter y
+interface SVGPointList
+    attribute @@toStringTag
+    getter length
+    getter numberOfItems
+    method @@iterator
+    method appendItem
+    method clear
+    method constructor
+    method getItem
+    method initialize
+    method insertItemBefore
+    method removeItem
+    method replaceItem
+interface SVGPolygonElement : SVGGeometryElement
+    attribute @@toStringTag
+    getter animatedPoints
+    getter points
+    method constructor
+interface SVGPolylineElement : SVGGeometryElement
+    attribute @@toStringTag
+    getter animatedPoints
+    getter points
+    method constructor
+interface SVGPreserveAspectRatio
+    attribute @@toStringTag
+    attribute SVG_MEETORSLICE_MEET
+    attribute SVG_MEETORSLICE_SLICE
+    attribute SVG_MEETORSLICE_UNKNOWN
+    attribute SVG_PRESERVEASPECTRATIO_NONE
+    attribute SVG_PRESERVEASPECTRATIO_UNKNOWN
+    attribute SVG_PRESERVEASPECTRATIO_XMAXYMAX
+    attribute SVG_PRESERVEASPECTRATIO_XMAXYMID
+    attribute SVG_PRESERVEASPECTRATIO_XMAXYMIN
+    attribute SVG_PRESERVEASPECTRATIO_XMIDYMAX
+    attribute SVG_PRESERVEASPECTRATIO_XMIDYMID
+    attribute SVG_PRESERVEASPECTRATIO_XMIDYMIN
+    attribute SVG_PRESERVEASPECTRATIO_XMINYMAX
+    attribute SVG_PRESERVEASPECTRATIO_XMINYMID
+    attribute SVG_PRESERVEASPECTRATIO_XMINYMIN
+    getter align
+    getter meetOrSlice
+    method constructor
+    setter align
+    setter meetOrSlice
+interface SVGRadialGradientElement : SVGGradientElement
+    attribute @@toStringTag
+    getter cx
+    getter cy
+    getter fr
+    getter fx
+    getter fy
+    getter r
+    method constructor
+interface SVGRect
+    attribute @@toStringTag
+    getter height
+    getter width
+    getter x
+    getter y
+    method constructor
+    setter height
+    setter width
+    setter x
+    setter y
+interface SVGRectElement : SVGGeometryElement
+    attribute @@toStringTag
+    getter height
+    getter rx
+    getter ry
+    getter width
+    getter x
+    getter y
+    method constructor
+interface SVGSVGElement : SVGGraphicsElement
+    attribute @@toStringTag
+    attribute SVG_ZOOMANDPAN_DISABLE
+    attribute SVG_ZOOMANDPAN_MAGNIFY
+    attribute SVG_ZOOMANDPAN_UNKNOWN
+    getter currentScale
+    getter currentTranslate
+    getter height
+    getter preserveAspectRatio
+    getter viewBox
+    getter width
+    getter x
+    getter y
+    getter zoomAndPan
+    method animationsPaused
+    method checkEnclosure
+    method checkIntersection
+    method constructor
+    method createSVGAngle
+    method createSVGLength
+    method createSVGMatrix
+    method createSVGNumber
+    method createSVGPoint
+    method createSVGRect
+    method createSVGTransform
+    method createSVGTransformFromMatrix
+    method deselectAll
+    method forceRedraw
+    method getCurrentTime
+    method getElementById
+    method getEnclosureList
+    method getIntersectionList
+    method pauseAnimations
+    method setCurrentTime
+    method suspendRedraw
+    method unpauseAnimations
+    method unsuspendRedraw
+    method unsuspendRedrawAll
+    setter currentScale
+    setter zoomAndPan
+interface SVGScriptElement : SVGElement
+    attribute @@toStringTag
+    getter href
+    getter type
+    method constructor
+    setter type
+interface SVGSetElement : SVGAnimationElement
+    attribute @@toStringTag
+    method constructor
+interface SVGStopElement : SVGElement
+    attribute @@toStringTag
+    getter offset
+    method constructor
+interface SVGStringList
+    attribute @@toStringTag
+    getter length
+    getter numberOfItems
+    method @@iterator
+    method appendItem
+    method clear
+    method constructor
+    method getItem
+    method initialize
+    method insertItemBefore
+    method removeItem
+    method replaceItem
+interface SVGStyleElement : SVGElement
+    attribute @@toStringTag
+    getter disabled
+    getter media
+    getter sheet
+    getter title
+    getter type
+    method constructor
+    setter disabled
+    setter media
+    setter title
+    setter type
+interface SVGSwitchElement : SVGGraphicsElement
+    attribute @@toStringTag
+    method constructor
+interface SVGSymbolElement : SVGElement
+    attribute @@toStringTag
+    getter preserveAspectRatio
+    getter viewBox
+    method constructor
+interface SVGTSpanElement : SVGTextPositioningElement
+    attribute @@toStringTag
+    method constructor
+interface SVGTextContentElement : SVGGraphicsElement
+    attribute @@toStringTag
+    attribute LENGTHADJUST_SPACING
+    attribute LENGTHADJUST_SPACINGANDGLYPHS
+    attribute LENGTHADJUST_UNKNOWN
+    getter lengthAdjust
+    getter textLength
+    method constructor
+    method getCharNumAtPosition
+    method getComputedTextLength
+    method getEndPositionOfChar
+    method getExtentOfChar
+    method getNumberOfChars
+    method getRotationOfChar
+    method getStartPositionOfChar
+    method getSubStringLength
+    method selectSubString
+interface SVGTextElement : SVGTextPositioningElement
+    attribute @@toStringTag
+    method constructor
+interface SVGTextPathElement : SVGTextContentElement
+    attribute @@toStringTag
+    attribute TEXTPATH_METHODTYPE_ALIGN
+    attribute TEXTPATH_METHODTYPE_STRETCH
+    attribute TEXTPATH_METHODTYPE_UNKNOWN
+    attribute TEXTPATH_SPACINGTYPE_AUTO
+    attribute TEXTPATH_SPACINGTYPE_EXACT
+    attribute TEXTPATH_SPACINGTYPE_UNKNOWN
+    getter href
+    getter method
+    getter spacing
+    getter startOffset
+    method constructor
+interface SVGTextPositioningElement : SVGTextContentElement
+    attribute @@toStringTag
+    getter dx
+    getter dy
+    getter rotate
+    getter x
+    getter y
+    method constructor
+interface SVGTitleElement : SVGElement
+    attribute @@toStringTag
+    method constructor
+interface SVGTransform
+    attribute @@toStringTag
+    attribute SVG_TRANSFORM_MATRIX
+    attribute SVG_TRANSFORM_ROTATE
+    attribute SVG_TRANSFORM_SCALE
+    attribute SVG_TRANSFORM_SKEWX
+    attribute SVG_TRANSFORM_SKEWY
+    attribute SVG_TRANSFORM_TRANSLATE
+    attribute SVG_TRANSFORM_UNKNOWN
+    getter angle
+    getter matrix
+    getter type
+    method constructor
+    method setMatrix
+    method setRotate
+    method setScale
+    method setSkewX
+    method setSkewY
+    method setTranslate
+interface SVGTransformList
+    attribute @@toStringTag
+    getter length
+    getter numberOfItems
+    method @@iterator
+    method appendItem
+    method clear
+    method consolidate
+    method constructor
+    method createSVGTransformFromMatrix
+    method getItem
+    method initialize
+    method insertItemBefore
+    method removeItem
+    method replaceItem
+interface SVGUnitTypes
+    attribute @@toStringTag
+    attribute SVG_UNIT_TYPE_OBJECTBOUNDINGBOX
+    attribute SVG_UNIT_TYPE_UNKNOWN
+    attribute SVG_UNIT_TYPE_USERSPACEONUSE
+    method constructor
+interface SVGUseElement : SVGGraphicsElement
+    attribute @@toStringTag
+    getter height
+    getter href
+    getter width
+    getter x
+    getter y
+    method constructor
+interface SVGViewElement : SVGElement
+    attribute @@toStringTag
+    attribute SVG_ZOOMANDPAN_DISABLE
+    attribute SVG_ZOOMANDPAN_MAGNIFY
+    attribute SVG_ZOOMANDPAN_UNKNOWN
+    getter preserveAspectRatio
+    getter viewBox
+    getter zoomAndPan
+    method constructor
+    setter zoomAndPan
+interface Scheduler
+    attribute @@toStringTag
+    method constructor
+    method postTask
+interface Scheduling
+    attribute @@toStringTag
+    method constructor
+    method isFramePending
+    method isInputPending
+interface Screen
+    attribute @@toStringTag
+    getter availHeight
+    getter availLeft
+    getter availTop
+    getter availWidth
+    getter colorDepth
+    getter height
+    getter internal
+    getter left
+    getter name
+    getter orientation
+    getter pixelDepth
+    getter primary
+    getter scaleFactor
+    getter top
+    getter width
+    method constructor
+interface ScreenManager
+    attribute @@toStringTag
+    method constructor
+    method getScreens
+interface ScreenOrientation : EventTarget
+    attribute @@toStringTag
+    getter angle
+    getter onchange
+    getter type
+    method constructor
+    method lock
+    method unlock
+    setter onchange
+interface ScriptProcessorNode : AudioNode
+    attribute @@toStringTag
+    getter bufferSize
+    getter onaudioprocess
+    method constructor
+    setter onaudioprocess
+interface ScrollTimeline : AnimationTimeline
+    attribute @@toStringTag
+    getter endScrollOffset
+    getter fill
+    getter orientation
+    getter scrollSource
+    getter startScrollOffset
+    getter timeRange
+    method constructor
+interface SecurityPolicyViolationEvent : Event
+    attribute @@toStringTag
+    getter blockedURI
+    getter columnNumber
+    getter disposition
+    getter documentURI
+    getter effectiveDirective
+    getter lineNumber
+    getter originalPolicy
+    getter referrer
+    getter sample
+    getter sourceFile
+    getter statusCode
+    getter violatedDirective
+    method constructor
+interface Selection
+    attribute @@toStringTag
+    getter anchorNode
+    getter anchorOffset
+    getter baseNode
+    getter baseOffset
+    getter extentNode
+    getter extentOffset
+    getter focusNode
+    getter focusOffset
+    getter isCollapsed
+    getter rangeCount
+    getter type
+    method addRange
+    method collapse
+    method collapseToEnd
+    method collapseToStart
+    method constructor
+    method containsNode
+    method deleteFromDocument
+    method empty
+    method extend
+    method getRangeAt
+    method modify
+    method removeAllRanges
+    method removeRange
+    method selectAllChildren
+    method setBaseAndExtent
+    method setPosition
+    method toString
+interface Sensor : EventTarget
+    attribute @@toStringTag
+    getter activated
+    getter hasReading
+    getter onactivate
+    getter onerror
+    getter onreading
+    getter timestamp
+    method constructor
+    method start
+    method stop
+    setter onactivate
+    setter onerror
+    setter onreading
+interface SensorErrorEvent : Event
+    attribute @@toStringTag
+    getter error
+    method constructor
+interface Serial : EventTarget
+    attribute @@toStringTag
+    getter onconnect
+    getter ondisconnect
+    method constructor
+    method getPorts
+    method requestPort
+    setter onconnect
+    setter ondisconnect
+interface SerialPort
+    attribute @@toStringTag
+    getter readable
+    getter writable
+    method close
+    method constructor
+    method getSignals
+    method open
+    method setSignals
+interface ServiceWorker : EventTarget
+    attribute @@toStringTag
+    getter onerror
+    getter onstatechange
+    getter scriptURL
+    getter state
+    method constructor
+    method postMessage
+    setter onerror
+    setter onstatechange
+interface ServiceWorkerContainer : EventTarget
+    attribute @@toStringTag
+    getter controller
+    getter oncontrollerchange
+    getter onmessage
+    getter onmessageerror
+    getter ready
+    method constructor
+    method getRegistration
+    method getRegistrations
+    method register
+    method startMessages
+    setter oncontrollerchange
+    setter onmessage
+    setter onmessageerror
+interface ServiceWorkerRegistration : EventTarget
+    attribute @@toStringTag
+    getter active
+    getter backgroundFetch
+    getter index
+    getter installing
+    getter navigationPreload
+    getter onupdatefound
+    getter paymentManager
+    getter periodicSync
+    getter pushManager
+    getter scope
+    getter sync
+    getter updateViaCache
+    getter waiting
+    method constructor
+    method getNotifications
+    method showNotification
+    method unregister
+    method update
+    setter onupdatefound
+interface ShadowRoot : DocumentFragment
+    attribute @@toStringTag
+    getter activeElement
+    getter adoptedStyleSheets
+    getter delegatesFocus
+    getter fullscreenElement
+    getter host
+    getter innerHTML
+    getter mode
+    getter pictureInPictureElement
+    getter pointerLockElement
+    getter styleSheets
+    method constructor
+    method elementFromPoint
+    method elementsFromPoint
+    method getSelection
+    setter adoptedStyleSheets
+    setter fullscreenElement
+    setter innerHTML
+interface SharedWorker : EventTarget
+    attribute @@toStringTag
+    getter onerror
+    getter port
+    method constructor
+    setter onerror
+interface SourceBuffer : EventTarget
+    attribute @@toStringTag
+    getter appendWindowEnd
+    getter appendWindowStart
+    getter audioTracks
+    getter buffered
+    getter mode
+    getter onabort
+    getter onerror
+    getter onupdate
+    getter onupdateend
+    getter onupdatestart
+    getter timestampOffset
+    getter trackDefaults
+    getter updating
+    getter videoTracks
+    method abort
+    method appendBuffer
+    method changeType
+    method constructor
+    method remove
+    setter appendWindowEnd
+    setter appendWindowStart
+    setter mode
+    setter onabort
+    setter onerror
+    setter onupdate
+    setter onupdateend
+    setter onupdatestart
+    setter timestampOffset
+    setter trackDefaults
+interface SourceBufferList : EventTarget
+    attribute @@toStringTag
+    getter length
+    getter onaddsourcebuffer
+    getter onremovesourcebuffer
+    method @@iterator
+    method constructor
+    setter onaddsourcebuffer
+    setter onremovesourcebuffer
+interface SpeechSynthesisErrorEvent : SpeechSynthesisEvent
+    attribute @@toStringTag
+    getter error
+    method constructor
+interface SpeechSynthesisEvent : Event
+    attribute @@toStringTag
+    getter charIndex
+    getter charLength
+    getter elapsedTime
+    getter name
+    getter utterance
+    method constructor
+interface SpeechSynthesisUtterance : EventTarget
+    attribute @@toStringTag
+    getter lang
+    getter onboundary
+    getter onend
+    getter onerror
+    getter onmark
+    getter onpause
+    getter onresume
+    getter onstart
+    getter pitch
+    getter rate
+    getter text
+    getter voice
+    getter volume
+    method constructor
+    setter lang
+    setter onboundary
+    setter onend
+    setter onerror
+    setter onmark
+    setter onpause
+    setter onresume
+    setter onstart
+    setter pitch
+    setter rate
+    setter text
+    setter voice
+    setter volume
+interface StaticRange
+    attribute @@toStringTag
+    getter collapsed
+    getter endContainer
+    getter endOffset
+    getter startContainer
+    getter startOffset
+    method constructor
+interface StereoPannerNode : AudioNode
+    attribute @@toStringTag
+    getter pan
+    method constructor
+interface Storage
+    attribute @@toStringTag
+    getter length
+    method clear
+    method constructor
+    method getItem
+    method key
+    method removeItem
+    method setItem
+interface StorageEvent : Event
+    attribute @@toStringTag
+    getter key
+    getter newValue
+    getter oldValue
+    getter storageArea
+    getter url
+    method constructor
+    method initStorageEvent
+interface StorageManager
+    attribute @@toStringTag
+    method constructor
+    method estimate
+    method persist
+    method persisted
+interface StylePropertyMap : StylePropertyMapReadOnly
+    attribute @@toStringTag
+    method append
+    method clear
+    method constructor
+    method delete
+    method set
+interface StylePropertyMapReadOnly
+    attribute @@toStringTag
+    getter size
+    method @@iterator
+    method constructor
+    method entries
+    method forEach
+    method get
+    method getAll
+    method has
+    method keys
+    method values
+interface StyleSheet
+    attribute @@toStringTag
+    getter disabled
+    getter href
+    getter media
+    getter ownerNode
+    getter parentStyleSheet
+    getter title
+    getter type
+    method constructor
+    setter disabled
+    setter media
+interface StyleSheetList
+    attribute @@toStringTag
+    getter length
+    method @@iterator
+    method constructor
+    method item
+interface SubtleCrypto
+    attribute @@toStringTag
+    method constructor
+    method decrypt
+    method deriveBits
+    method deriveKey
+    method digest
+    method encrypt
+    method exportKey
+    method generateKey
+    method importKey
+    method sign
+    method unwrapKey
+    method verify
+    method wrapKey
+interface SyncManager
+    attribute @@toStringTag
+    method constructor
+    method getTags
+    method register
+interface TaskAttributionTiming : PerformanceEntry
+    attribute @@toStringTag
+    getter containerId
+    getter containerName
+    getter containerSrc
+    getter containerType
+    method constructor
+    method toJSON
+interface TaskController : AbortController
+    attribute @@toStringTag
+    method constructor
+    method setPriority
+interface TaskSignal : AbortSignal
+    attribute @@toStringTag
+    getter priority
+    method constructor
+interface Text : CharacterData
+    attribute @@toStringTag
+    getter assignedSlot
+    getter wholeText
+    method constructor
+    method getDestinationInsertionPoints
+    method splitText
+interface TextDecoder
+    attribute @@toStringTag
+    getter encoding
+    getter fatal
+    getter ignoreBOM
+    method constructor
+    method decode
+interface TextDecoderStream
+    attribute @@toStringTag
+    getter encoding
+    getter fatal
+    getter ignoreBOM
+    getter readable
+    getter writable
+    method constructor
+interface TextDetector
+    attribute @@toStringTag
+    method constructor
+    method detect
+interface TextEncoder
+    attribute @@toStringTag
+    getter encoding
+    method constructor
+    method encode
+    method encodeInto
+interface TextEncoderStream
+    attribute @@toStringTag
+    getter encoding
+    getter readable
+    getter writable
+    method constructor
+interface TextEvent : UIEvent
+    attribute @@toStringTag
+    getter data
+    method constructor
+    method initTextEvent
+interface TextFormatUpdateEvent : Event
+    attribute @@toStringTag
+    getter backgroundColor
+    getter formatRangeEnd
+    getter formatRangeStart
+    getter textDecorationColor
+    getter textUnderlineStyle
+    getter underlineColor
+    method constructor
+interface TextMetrics
+    attribute @@toStringTag
+    getter actualBoundingBoxAscent
+    getter actualBoundingBoxDescent
+    getter actualBoundingBoxLeft
+    getter actualBoundingBoxRight
+    getter advances
+    getter emHeightAscent
+    getter emHeightDescent
+    getter fontBoundingBoxAscent
+    getter fontBoundingBoxDescent
+    getter width
+    method constructor
+    method getBaselines
+interface TextTrack : EventTarget
+    attribute @@toStringTag
+    getter activeCues
+    getter cues
+    getter id
+    getter kind
+    getter label
+    getter language
+    getter mode
+    getter oncuechange
+    method addCue
+    method constructor
+    method removeCue
+    setter mode
+    setter oncuechange
+interface TextTrackCue : EventTarget
+    attribute @@toStringTag
+    getter endTime
+    getter id
+    getter onenter
+    getter onexit
+    getter pauseOnExit
+    getter startTime
+    getter track
+    method constructor
+    setter endTime
+    setter id
+    setter onenter
+    setter onexit
+    setter pauseOnExit
+    setter startTime
+interface TextTrackCueList
+    attribute @@toStringTag
+    getter length
+    method @@iterator
+    method constructor
+    method getCueById
+interface TextTrackList : EventTarget
+    attribute @@toStringTag
+    getter length
+    getter onaddtrack
+    getter onchange
+    getter onremovetrack
+    method @@iterator
+    method constructor
+    method getTrackById
+    setter onaddtrack
+    setter onchange
+    setter onremovetrack
+interface TextUpdateEvent : Event
+    attribute @@toStringTag
+    getter newSelectionEnd
+    getter newSelectionStart
+    getter updateRangeEnd
+    getter updateRangeStart
+    getter updateText
+    method constructor
+interface TimeRanges
+    attribute @@toStringTag
+    getter length
+    method constructor
+    method end
+    method start
+interface TimestampTrigger
+    attribute @@toStringTag
+    getter timestamp
+    method constructor
+interface Touch
+    attribute @@toStringTag
+    getter clientX
+    getter clientY
+    getter force
+    getter identifier
+    getter pageX
+    getter pageY
+    getter radiusX
+    getter radiusY
+    getter region
+    getter rotationAngle
+    getter screenX
+    getter screenY
+    getter target
+    method constructor
+interface TouchEvent : UIEvent
+    attribute @@toStringTag
+    getter altKey
+    getter changedTouches
+    getter ctrlKey
+    getter metaKey
+    getter shiftKey
+    getter targetTouches
+    getter touches
+    method constructor
+interface TouchList
+    attribute @@toStringTag
+    getter length
+    method @@iterator
+    method constructor
+    method item
+interface TrackDefault
+    attribute @@toStringTag
+    getter byteStreamTrackID
+    getter kinds
+    getter label
+    getter language
+    getter type
+    method constructor
+interface TrackDefaultList
+    attribute @@toStringTag
+    getter length
+    method @@iterator
+    method constructor
+interface TrackEvent : Event
+    attribute @@toStringTag
+    getter track
+    method constructor
+interface TransformStream
+    attribute @@toStringTag
+    getter readable
+    getter writable
+    method constructor
+interface TransitionEvent : Event
+    attribute @@toStringTag
+    getter elapsedTime
+    getter propertyName
+    getter pseudoElement
+    method constructor
+interface TreeWalker
+    attribute @@toStringTag
+    getter currentNode
+    getter filter
+    getter root
+    getter whatToShow
+    method constructor
+    method firstChild
+    method lastChild
+    method nextNode
+    method nextSibling
+    method parentNode
+    method previousNode
+    method previousSibling
+    setter currentNode
+interface TrustedHTML
+    attribute @@toStringTag
+    method constructor
+    method toString
+interface TrustedScript
+    attribute @@toStringTag
+    method constructor
+    method toString
+interface TrustedScriptURL
+    attribute @@toStringTag
+    method constructor
+    method toString
+interface TrustedTypePolicy
+    attribute @@toStringTag
+    method constructor
+interface TrustedTypePolicyFactory
+    attribute @@toStringTag
+    method constructor
+    method getAttributeType
+    method getPropertyType
+    method getTypeMapping
+interface UIEvent : Event
+    attribute @@toStringTag
+    getter detail
+    getter sourceCapabilities
+    getter view
+    getter which
+    method constructor
+    method initUIEvent
+interface URL
+    static method createObjectURL
+    static method revokeObjectURL
+    attribute @@toStringTag
+    getter hash
+    getter host
+    getter hostname
+    getter href
+    getter origin
+    getter password
+    getter pathname
+    getter port
+    getter protocol
+    getter search
+    getter searchParams
+    getter username
+    method constructor
+    method toJSON
+    method toString
+    setter hash
+    setter host
+    setter hostname
+    setter href
+    setter password
+    setter pathname
+    setter port
+    setter protocol
+    setter search
+    setter username
+interface URLSearchParams
+    attribute @@toStringTag
+    method @@iterator
+    method append
+    method constructor
+    method delete
+    method entries
+    method forEach
+    method get
+    method getAll
+    method has
+    method keys
+    method set
+    method sort
+    method toString
+    method values
+interface USB : EventTarget
+    attribute @@toStringTag
+    getter onconnect
+    getter ondisconnect
+    method constructor
+    method getDevices
+    method requestDevice
+    setter onconnect
+    setter ondisconnect
+interface USBAlternateInterface
+    attribute @@toStringTag
+    getter alternateSetting
+    getter endpoints
+    getter interfaceClass
+    getter interfaceName
+    getter interfaceProtocol
+    getter interfaceSubclass
+    method constructor
+interface USBConfiguration
+    attribute @@toStringTag
+    getter configurationName
+    getter configurationValue
+    getter interfaces
+    method constructor
+interface USBConnectionEvent : Event
+    attribute @@toStringTag
+    getter device
+    method constructor
+interface USBDevice
+    attribute @@toStringTag
+    getter configuration
+    getter configurations
+    getter deviceClass
+    getter deviceProtocol
+    getter deviceSubclass
+    getter deviceVersionMajor
+    getter deviceVersionMinor
+    getter deviceVersionSubminor
+    getter manufacturerName
+    getter opened
+    getter productId
+    getter productName
+    getter serialNumber
+    getter usbVersionMajor
+    getter usbVersionMinor
+    getter usbVersionSubminor
+    getter vendorId
+    method claimInterface
+    method clearHalt
+    method close
+    method constructor
+    method controlTransferIn
+    method controlTransferOut
+    method isochronousTransferIn
+    method isochronousTransferOut
+    method open
+    method releaseInterface
+    method reset
+    method selectAlternateInterface
+    method selectConfiguration
+    method transferIn
+    method transferOut
+interface USBEndpoint
+    attribute @@toStringTag
+    getter direction
+    getter endpointNumber
+    getter packetSize
+    getter type
+    method constructor
+interface USBInTransferResult
+    attribute @@toStringTag
+    getter data
+    getter status
+    method constructor
+interface USBInterface
+    attribute @@toStringTag
+    getter alternate
+    getter alternates
+    getter claimed
+    getter interfaceNumber
+    method constructor
+interface USBIsochronousInTransferPacket
+    attribute @@toStringTag
+    getter data
+    getter status
+    method constructor
+interface USBIsochronousInTransferResult
+    attribute @@toStringTag
+    getter data
+    getter packets
+    method constructor
+interface USBIsochronousOutTransferPacket
+    attribute @@toStringTag
+    getter bytesWritten
+    getter status
+    method constructor
+interface USBIsochronousOutTransferResult
+    attribute @@toStringTag
+    getter packets
+    method constructor
+interface USBOutTransferResult
+    attribute @@toStringTag
+    getter bytesWritten
+    getter status
+    method constructor
+interface UserActivation
+    attribute @@toStringTag
+    getter hasBeenActive
+    getter isActive
+    method constructor
+interface VTTCue : TextTrackCue
+    attribute @@toStringTag
+    getter align
+    getter line
+    getter position
+    getter region
+    getter size
+    getter snapToLines
+    getter text
+    getter vertical
+    method constructor
+    method getCueAsHTML
+    setter align
+    setter line
+    setter position
+    setter region
+    setter size
+    setter snapToLines
+    setter text
+    setter vertical
+interface VTTRegion
+    attribute @@toStringTag
+    getter id
+    getter lines
+    getter regionAnchorX
+    getter regionAnchorY
+    getter scroll
+    getter viewportAnchorX
+    getter viewportAnchorY
+    getter width
+    method constructor
+    setter id
+    setter lines
+    setter regionAnchorX
+    setter regionAnchorY
+    setter scroll
+    setter viewportAnchorX
+    setter viewportAnchorY
+    setter width
+interface ValidityState
+    attribute @@toStringTag
+    getter badInput
+    getter customError
+    getter patternMismatch
+    getter rangeOverflow
+    getter rangeUnderflow
+    getter stepMismatch
+    getter tooLong
+    getter tooShort
+    getter typeMismatch
+    getter valid
+    getter valueMissing
+    method constructor
+interface VideoPlaybackQuality
+    attribute @@toStringTag
+    getter corruptedVideoFrames
+    getter creationTime
+    getter droppedVideoFrames
+    getter totalVideoFrames
+    method constructor
+interface VideoTrack
+    attribute @@toStringTag
+    getter id
+    getter kind
+    getter label
+    getter language
+    getter selected
+    getter sourceBuffer
+    method constructor
+    setter selected
+interface VideoTrackList : EventTarget
+    attribute @@toStringTag
+    getter length
+    getter onaddtrack
+    getter onchange
+    getter onremovetrack
+    getter selectedIndex
+    method @@iterator
+    method constructor
+    method getTrackById
+    setter onaddtrack
+    setter onchange
+    setter onremovetrack
+interface VisualViewport : EventTarget
+    attribute @@toStringTag
+    getter height
+    getter offsetLeft
+    getter offsetTop
+    getter onresize
+    getter onscroll
+    getter pageLeft
+    getter pageTop
+    getter scale
+    getter width
+    method constructor
+    setter onresize
+    setter onscroll
+interface WakeLock
+    attribute @@toStringTag
+    method constructor
+    method request
+interface WakeLockSentinel : EventTarget
+    attribute @@toStringTag
+    getter onrelease
+    getter type
+    method constructor
+    method release
+    setter onrelease
+interface WaveShaperNode : AudioNode
+    attribute @@toStringTag
+    getter curve
+    getter oversample
+    method constructor
+    setter curve
+    setter oversample
+interface WebGL2ComputeRenderingContext
+    attribute @@toStringTag
+    attribute ACTIVE_ATOMIC_COUNTER_BUFFERS
+    attribute ACTIVE_ATTRIBUTES
+    attribute ACTIVE_RESOURCES
+    attribute ACTIVE_TEXTURE
+    attribute ACTIVE_UNIFORMS
+    attribute ACTIVE_UNIFORM_BLOCKS
+    attribute ACTIVE_VARIABLES
+    attribute ALIASED_LINE_WIDTH_RANGE
+    attribute ALIASED_POINT_SIZE_RANGE
+    attribute ALL_BARRIER_BITS
+    attribute ALPHA
+    attribute ALPHA_BITS
+    attribute ALREADY_SIGNALED
+    attribute ALWAYS
+    attribute ANY_SAMPLES_PASSED
+    attribute ANY_SAMPLES_PASSED_CONSERVATIVE
+    attribute ARRAY_BUFFER
+    attribute ARRAY_BUFFER_BINDING
+    attribute ARRAY_SIZE
+    attribute ARRAY_STRIDE
+    attribute ATOMIC_COUNTER_BARRIER_BIT
+    attribute ATOMIC_COUNTER_BUFFER
+    attribute ATOMIC_COUNTER_BUFFER_BINDING
+    attribute ATOMIC_COUNTER_BUFFER_INDEX
+    attribute ATOMIC_COUNTER_BUFFER_SIZE
+    attribute ATOMIC_COUNTER_BUFFER_START
+    attribute ATTACHED_SHADERS
+    attribute BACK
+    attribute BLEND
+    attribute BLEND_COLOR
+    attribute BLEND_DST_ALPHA
+    attribute BLEND_DST_RGB
+    attribute BLEND_EQUATION
+    attribute BLEND_EQUATION_ALPHA
+    attribute BLEND_EQUATION_RGB
+    attribute BLEND_SRC_ALPHA
+    attribute BLEND_SRC_RGB
+    attribute BLOCK_INDEX
+    attribute BLUE_BITS
+    attribute BOOL
+    attribute BOOL_VEC2
+    attribute BOOL_VEC3
+    attribute BOOL_VEC4
+    attribute BROWSER_DEFAULT_WEBGL
+    attribute BUFFER_BINDING
+    attribute BUFFER_DATA_SIZE
+    attribute BUFFER_SIZE
+    attribute BUFFER_UPDATE_BARRIER_BIT
+    attribute BUFFER_USAGE
+    attribute BUFFER_VARIABLE
+    attribute BYTE
+    attribute CCW
+    attribute CLAMP_TO_EDGE
+    attribute COLOR
+    attribute COLOR_ATTACHMENT0
+    attribute COLOR_ATTACHMENT1
+    attribute COLOR_ATTACHMENT10
+    attribute COLOR_ATTACHMENT11
+    attribute COLOR_ATTACHMENT12
+    attribute COLOR_ATTACHMENT13
+    attribute COLOR_ATTACHMENT14
+    attribute COLOR_ATTACHMENT15
+    attribute COLOR_ATTACHMENT2
+    attribute COLOR_ATTACHMENT3
+    attribute COLOR_ATTACHMENT4
+    attribute COLOR_ATTACHMENT5
+    attribute COLOR_ATTACHMENT6
+    attribute COLOR_ATTACHMENT7
+    attribute COLOR_ATTACHMENT8
+    attribute COLOR_ATTACHMENT9
+    attribute COLOR_BUFFER_BIT
+    attribute COLOR_CLEAR_VALUE
+    attribute COLOR_WRITEMASK
+    attribute COMMAND_BARRIER_BIT
+    attribute COMPARE_REF_TO_TEXTURE
+    attribute COMPILE_STATUS
+    attribute COMPRESSED_TEXTURE_FORMATS
+    attribute COMPUTE_SHADER
+    attribute CONDITION_SATISFIED
+    attribute CONSTANT_ALPHA
+    attribute CONSTANT_COLOR
+    attribute CONTEXT_LOST_WEBGL
+    attribute COPY_READ_BUFFER
+    attribute COPY_READ_BUFFER_BINDING
+    attribute COPY_WRITE_BUFFER
+    attribute COPY_WRITE_BUFFER_BINDING
+    attribute CULL_FACE
+    attribute CULL_FACE_MODE
+    attribute CURRENT_PROGRAM
+    attribute CURRENT_QUERY
+    attribute CURRENT_VERTEX_ATTRIB
+    attribute CW
+    attribute DECR
+    attribute DECR_WRAP
+    attribute DELETE_STATUS
+    attribute DEPTH
+    attribute DEPTH24_STENCIL8
+    attribute DEPTH32F_STENCIL8
+    attribute DEPTH_ATTACHMENT
+    attribute DEPTH_BITS
+    attribute DEPTH_BUFFER_BIT
+    attribute DEPTH_CLEAR_VALUE
+    attribute DEPTH_COMPONENT
+    attribute DEPTH_COMPONENT16
+    attribute DEPTH_COMPONENT24
+    attribute DEPTH_COMPONENT32F
+    attribute DEPTH_FUNC
+    attribute DEPTH_RANGE
+    attribute DEPTH_STENCIL
+    attribute DEPTH_STENCIL_ATTACHMENT
+    attribute DEPTH_TEST
+    attribute DEPTH_WRITEMASK
+    attribute DISPATCH_INDIRECT_BUFFER
+    attribute DISPATCH_INDIRECT_BUFFER_BINDING
+    attribute DITHER
+    attribute DONT_CARE
+    attribute DRAW_BUFFER0
+    attribute DRAW_BUFFER1
+    attribute DRAW_BUFFER10
+    attribute DRAW_BUFFER11
+    attribute DRAW_BUFFER12
+    attribute DRAW_BUFFER13
+    attribute DRAW_BUFFER14
+    attribute DRAW_BUFFER15
+    attribute DRAW_BUFFER2
+    attribute DRAW_BUFFER3
+    attribute DRAW_BUFFER4
+    attribute DRAW_BUFFER5
+    attribute DRAW_BUFFER6
+    attribute DRAW_BUFFER7
+    attribute DRAW_BUFFER8
+    attribute DRAW_BUFFER9
+    attribute DRAW_FRAMEBUFFER
+    attribute DRAW_FRAMEBUFFER_BINDING
+    attribute DRAW_INDIRECT_BUFFER
+    attribute DRAW_INDIRECT_BUFFER_BINDING
+    attribute DST_ALPHA
+    attribute DST_COLOR
+    attribute DYNAMIC_COPY
+    attribute DYNAMIC_DRAW
+    attribute DYNAMIC_READ
+    attribute ELEMENT_ARRAY_BARRIER_BIT
+    attribute ELEMENT_ARRAY_BUFFER
+    attribute ELEMENT_ARRAY_BUFFER_BINDING
+    attribute EQUAL
+    attribute FASTEST
+    attribute FLOAT
+    attribute FLOAT_32_UNSIGNED_INT_24_8_REV
+    attribute FLOAT_MAT2
+    attribute FLOAT_MAT2x3
+    attribute FLOAT_MAT2x4
+    attribute FLOAT_MAT3
+    attribute FLOAT_MAT3x2
+    attribute FLOAT_MAT3x4
+    attribute FLOAT_MAT4
+    attribute FLOAT_MAT4x2
+    attribute FLOAT_MAT4x3
+    attribute FLOAT_VEC2
+    attribute FLOAT_VEC3
+    attribute FLOAT_VEC4
+    attribute FRAGMENT_SHADER
+    attribute FRAGMENT_SHADER_DERIVATIVE_HINT
+    attribute FRAMEBUFFER
+    attribute FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE
+    attribute FRAMEBUFFER_ATTACHMENT_BLUE_SIZE
+    attribute FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING
+    attribute FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE
+    attribute FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE
+    attribute FRAMEBUFFER_ATTACHMENT_GREEN_SIZE
+    attribute FRAMEBUFFER_ATTACHMENT_OBJECT_NAME
+    attribute FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE
+    attribute FRAMEBUFFER_ATTACHMENT_RED_SIZE
+    attribute FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE
+    attribute FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE
+    attribute FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER
+    attribute FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL
+    attribute FRAMEBUFFER_BARRIER_BIT
+    attribute FRAMEBUFFER_BINDING
+    attribute FRAMEBUFFER_COMPLETE
+    attribute FRAMEBUFFER_DEFAULT
+    attribute FRAMEBUFFER_INCOMPLETE_ATTACHMENT
+    attribute FRAMEBUFFER_INCOMPLETE_DIMENSIONS
+    attribute FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT
+    attribute FRAMEBUFFER_INCOMPLETE_MULTISAMPLE
+    attribute FRAMEBUFFER_UNSUPPORTED
+    attribute FRONT
+    attribute FRONT_AND_BACK
+    attribute FRONT_FACE
+    attribute FUNC_ADD
+    attribute FUNC_REVERSE_SUBTRACT
+    attribute FUNC_SUBTRACT
+    attribute GENERATE_MIPMAP_HINT
+    attribute GEQUAL
+    attribute GREATER
+    attribute GREEN_BITS
+    attribute HALF_FLOAT
+    attribute HIGH_FLOAT
+    attribute HIGH_INT
+    attribute IMPLEMENTATION_COLOR_READ_FORMAT
+    attribute IMPLEMENTATION_COLOR_READ_TYPE
+    attribute INCR
+    attribute INCR_WRAP
+    attribute INT
+    attribute INTERLEAVED_ATTRIBS
+    attribute INT_2_10_10_10_REV
+    attribute INT_SAMPLER_2D
+    attribute INT_SAMPLER_2D_ARRAY
+    attribute INT_SAMPLER_3D
+    attribute INT_SAMPLER_CUBE
+    attribute INT_VEC2
+    attribute INT_VEC3
+    attribute INT_VEC4
+    attribute INVALID_ENUM
+    attribute INVALID_FRAMEBUFFER_OPERATION
+    attribute INVALID_INDEX
+    attribute INVALID_OPERATION
+    attribute INVALID_VALUE
+    attribute INVERT
+    attribute IS_ROW_MAJOR
+    attribute KEEP
+    attribute LEQUAL
+    attribute LESS
+    attribute LINEAR
+    attribute LINEAR_MIPMAP_LINEAR
+    attribute LINEAR_MIPMAP_NEAREST
+    attribute LINES
+    attribute LINE_LOOP
+    attribute LINE_STRIP
+    attribute LINE_WIDTH
+    attribute LINK_STATUS
+    attribute LOCATION
+    attribute LOW_FLOAT
+    attribute LOW_INT
+    attribute LUMINANCE
+    attribute LUMINANCE_ALPHA
+    attribute MATRIX_STRIDE
+    attribute MAX
+    attribute MAX_3D_TEXTURE_SIZE
+    attribute MAX_ARRAY_TEXTURE_LAYERS
+    attribute MAX_ATOMIC_COUNTER_BUFFER_BINDINGS
+    attribute MAX_ATOMIC_COUNTER_BUFFER_SIZE
+    attribute MAX_CLIENT_WAIT_TIMEOUT_WEBGL
+    attribute MAX_COLOR_ATTACHMENTS
+    attribute MAX_COMBINED_ATOMIC_COUNTERS
+    attribute MAX_COMBINED_ATOMIC_COUNTER_BUFFERS
+    attribute MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS
+    attribute MAX_COMBINED_SHADER_STORAGE_BLOCKS
+    attribute MAX_COMBINED_TEXTURE_IMAGE_UNITS
+    attribute MAX_COMBINED_UNIFORM_BLOCKS
+    attribute MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS
+    attribute MAX_COMPUTE_ATOMIC_COUNTERS
+    attribute MAX_COMPUTE_ATOMIC_COUNTER_BUFFERS
+    attribute MAX_COMPUTE_IMAGE_UNIFORMS
+    attribute MAX_COMPUTE_SHADER_STORAGE_BLOCKS
+    attribute MAX_COMPUTE_SHARED_MEMORY_SIZE
+    attribute MAX_COMPUTE_TEXTURE_IMAGE_UNITS
+    attribute MAX_COMPUTE_UNIFORM_BLOCKS
+    attribute MAX_COMPUTE_UNIFORM_COMPONENTS
+    attribute MAX_COMPUTE_WORK_GROUP_COUNT
+    attribute MAX_COMPUTE_WORK_GROUP_INVOCATIONS
+    attribute MAX_COMPUTE_WORK_GROUP_SIZE
+    attribute MAX_CUBE_MAP_TEXTURE_SIZE
+    attribute MAX_DRAW_BUFFERS
+    attribute MAX_ELEMENTS_INDICES
+    attribute MAX_ELEMENTS_VERTICES
+    attribute MAX_ELEMENT_INDEX
+    attribute MAX_FRAGMENT_ATOMIC_COUNTERS
+    attribute MAX_FRAGMENT_ATOMIC_COUNTER_BUFFERS
+    attribute MAX_FRAGMENT_INPUT_COMPONENTS
+    attribute MAX_FRAGMENT_SHADER_STORAGE_BLOCKS
+    attribute MAX_FRAGMENT_UNIFORM_BLOCKS
+    attribute MAX_FRAGMENT_UNIFORM_COMPONENTS
+    attribute MAX_FRAGMENT_UNIFORM_VECTORS
+    attribute MAX_NAME_LENGTH
+    attribute MAX_NUM_ACTIVE_VARIABLES
+    attribute MAX_PROGRAM_TEXEL_OFFSET
+    attribute MAX_RENDERBUFFER_SIZE
+    attribute MAX_SAMPLES
+    attribute MAX_SERVER_WAIT_TIMEOUT
+    attribute MAX_SHADER_STORAGE_BLOCK_SIZE
+    attribute MAX_SHADER_STORAGE_BUFFER_BINDINGS
+    attribute MAX_TEXTURE_IMAGE_UNITS
+    attribute MAX_TEXTURE_LOD_BIAS
+    attribute MAX_TEXTURE_SIZE
+    attribute MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS
+    attribute MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS
+    attribute MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS
+    attribute MAX_UNIFORM_BLOCK_SIZE
+    attribute MAX_UNIFORM_BUFFER_BINDINGS
+    attribute MAX_VARYING_COMPONENTS
+    attribute MAX_VARYING_VECTORS
+    attribute MAX_VERTEX_ATOMIC_COUNTERS
+    attribute MAX_VERTEX_ATOMIC_COUNTER_BUFFERS
+    attribute MAX_VERTEX_ATTRIBS
+    attribute MAX_VERTEX_OUTPUT_COMPONENTS
+    attribute MAX_VERTEX_SHADER_STORAGE_BLOCKS
+    attribute MAX_VERTEX_TEXTURE_IMAGE_UNITS
+    attribute MAX_VERTEX_UNIFORM_BLOCKS
+    attribute MAX_VERTEX_UNIFORM_COMPONENTS
+    attribute MAX_VERTEX_UNIFORM_VECTORS
+    attribute MAX_VIEWPORT_DIMS
+    attribute MEDIUM_FLOAT
+    attribute MEDIUM_INT
+    attribute MIN
+    attribute MIN_PROGRAM_TEXEL_OFFSET
+    attribute MIRRORED_REPEAT
+    attribute NAME_LENGTH
+    attribute NEAREST
+    attribute NEAREST_MIPMAP_LINEAR
+    attribute NEAREST_MIPMAP_NEAREST
+    attribute NEVER
+    attribute NICEST
+    attribute NONE
+    attribute NOTEQUAL
+    attribute NO_ERROR
+    attribute NUM_ACTIVE_VARIABLES
+    attribute OBJECT_TYPE
+    attribute OFFSET
+    attribute ONE
+    attribute ONE_MINUS_CONSTANT_ALPHA
+    attribute ONE_MINUS_CONSTANT_COLOR
+    attribute ONE_MINUS_DST_ALPHA
+    attribute ONE_MINUS_DST_COLOR
+    attribute ONE_MINUS_SRC_ALPHA
+    attribute ONE_MINUS_SRC_COLOR
+    attribute OUT_OF_MEMORY
+    attribute PACK_ALIGNMENT
+    attribute PACK_ROW_LENGTH
+    attribute PACK_SKIP_PIXELS
+    attribute PACK_SKIP_ROWS
+    attribute PIXEL_BUFFER_BARRIER_BIT
+    attribute PIXEL_PACK_BUFFER
+    attribute PIXEL_PACK_BUFFER_BINDING
+    attribute PIXEL_UNPACK_BUFFER
+    attribute PIXEL_UNPACK_BUFFER_BINDING
+    attribute POINTS
+    attribute POLYGON_OFFSET_FACTOR
+    attribute POLYGON_OFFSET_FILL
+    attribute POLYGON_OFFSET_UNITS
+    attribute PROGRAM_INPUT
+    attribute PROGRAM_OUTPUT
+    attribute QUERY_RESULT
+    attribute QUERY_RESULT_AVAILABLE
+    attribute R11F_G11F_B10F
+    attribute R16F
+    attribute R16I
+    attribute R16UI
+    attribute R32F
+    attribute R32I
+    attribute R32UI
+    attribute R8
+    attribute R8I
+    attribute R8UI
+    attribute R8_SNORM
+    attribute RASTERIZER_DISCARD
+    attribute READ_BUFFER
+    attribute READ_FRAMEBUFFER
+    attribute READ_FRAMEBUFFER_BINDING
+    attribute READ_ONLY
+    attribute READ_WRITE
+    attribute RED
+    attribute RED_BITS
+    attribute RED_INTEGER
+    attribute REFERENCED_BY_COMPUTE_SHADER
+    attribute REFERENCED_BY_FRAGMENT_SHADER
+    attribute REFERENCED_BY_VERTEX_SHADER
+    attribute RENDERBUFFER
+    attribute RENDERBUFFER_ALPHA_SIZE
+    attribute RENDERBUFFER_BINDING
+    attribute RENDERBUFFER_BLUE_SIZE
+    attribute RENDERBUFFER_DEPTH_SIZE
+    attribute RENDERBUFFER_GREEN_SIZE
+    attribute RENDERBUFFER_HEIGHT
+    attribute RENDERBUFFER_INTERNAL_FORMAT
+    attribute RENDERBUFFER_RED_SIZE
+    attribute RENDERBUFFER_SAMPLES
+    attribute RENDERBUFFER_STENCIL_SIZE
+    attribute RENDERBUFFER_WIDTH
+    attribute RENDERER
+    attribute REPEAT
+    attribute REPLACE
+    attribute RG
+    attribute RG16F
+    attribute RG16I
+    attribute RG16UI
+    attribute RG32F
+    attribute RG32I
+    attribute RG32UI
+    attribute RG8
+    attribute RG8I
+    attribute RG8UI
+    attribute RG8_SNORM
+    attribute RGB
+    attribute RGB10_A2
+    attribute RGB10_A2UI
+    attribute RGB16F
+    attribute RGB16I
+    attribute RGB16UI
+    attribute RGB32F
+    attribute RGB32I
+    attribute RGB32UI
+    attribute RGB565
+    attribute RGB5_A1
+    attribute RGB8
+    attribute RGB8I
+    attribute RGB8UI
+    attribute RGB8_SNORM
+    attribute RGB9_E5
+    attribute RGBA
+    attribute RGBA16F
+    attribute RGBA16I
+    attribute RGBA16UI
+    attribute RGBA32F
+    attribute RGBA32I
+    attribute RGBA32UI
+    attribute RGBA4
+    attribute RGBA8
+    attribute RGBA8I
+    attribute RGBA8UI
+    attribute RGBA8_SNORM
+    attribute RGBA_INTEGER
+    attribute RGB_INTEGER
+    attribute RG_INTEGER
+    attribute SAMPLER_2D
+    attribute SAMPLER_2D_ARRAY
+    attribute SAMPLER_2D_ARRAY_SHADOW
+    attribute SAMPLER_2D_SHADOW
+    attribute SAMPLER_3D
+    attribute SAMPLER_BINDING
+    attribute SAMPLER_CUBE
+    attribute SAMPLER_CUBE_SHADOW
+    attribute SAMPLES
+    attribute SAMPLE_ALPHA_TO_COVERAGE
+    attribute SAMPLE_BUFFERS
+    attribute SAMPLE_COVERAGE
+    attribute SAMPLE_COVERAGE_INVERT
+    attribute SAMPLE_COVERAGE_VALUE
+    attribute SCISSOR_BOX
+    attribute SCISSOR_TEST
+    attribute SEPARATE_ATTRIBS
+    attribute SHADER_IMAGE_ACCESS_BARRIER_BIT
+    attribute SHADER_STORAGE_BARRIER_BIT
+    attribute SHADER_STORAGE_BLOCK
+    attribute SHADER_STORAGE_BUFFER
+    attribute SHADER_STORAGE_BUFFER_BINDING
+    attribute SHADER_STORAGE_BUFFER_OFFSET_ALIGNMENT
+    attribute SHADER_STORAGE_BUFFER_SIZE
+    attribute SHADER_STORAGE_BUFFER_START
+    attribute SHADER_TYPE
+    attribute SHADING_LANGUAGE_VERSION
+    attribute SHORT
+    attribute SIGNALED
+    attribute SIGNED_NORMALIZED
+    attribute SRC_ALPHA
+    attribute SRC_ALPHA_SATURATE
+    attribute SRC_COLOR
+    attribute SRGB
+    attribute SRGB8
+    attribute SRGB8_ALPHA8
+    attribute STATIC_COPY
+    attribute STATIC_DRAW
+    attribute STATIC_READ
+    attribute STENCIL
+    attribute STENCIL_ATTACHMENT
+    attribute STENCIL_BACK_FAIL
+    attribute STENCIL_BACK_FUNC
+    attribute STENCIL_BACK_PASS_DEPTH_FAIL
+    attribute STENCIL_BACK_PASS_DEPTH_PASS
+    attribute STENCIL_BACK_REF
+    attribute STENCIL_BACK_VALUE_MASK
+    attribute STENCIL_BACK_WRITEMASK
+    attribute STENCIL_BITS
+    attribute STENCIL_BUFFER_BIT
+    attribute STENCIL_CLEAR_VALUE
+    attribute STENCIL_FAIL
+    attribute STENCIL_FUNC
+    attribute STENCIL_INDEX8
+    attribute STENCIL_PASS_DEPTH_FAIL
+    attribute STENCIL_PASS_DEPTH_PASS
+    attribute STENCIL_REF
+    attribute STENCIL_TEST
+    attribute STENCIL_VALUE_MASK
+    attribute STENCIL_WRITEMASK
+    attribute STREAM_COPY
+    attribute STREAM_DRAW
+    attribute STREAM_READ
+    attribute SUBPIXEL_BITS
+    attribute SYNC_CONDITION
+    attribute SYNC_FENCE
+    attribute SYNC_FLAGS
+    attribute SYNC_FLUSH_COMMANDS_BIT
+    attribute SYNC_GPU_COMMANDS_COMPLETE
+    attribute SYNC_STATUS
+    attribute TEXTURE
+    attribute TEXTURE0
+    attribute TEXTURE1
+    attribute TEXTURE10
+    attribute TEXTURE11
+    attribute TEXTURE12
+    attribute TEXTURE13
+    attribute TEXTURE14
+    attribute TEXTURE15
+    attribute TEXTURE16
+    attribute TEXTURE17
+    attribute TEXTURE18
+    attribute TEXTURE19
+    attribute TEXTURE2
+    attribute TEXTURE20
+    attribute TEXTURE21
+    attribute TEXTURE22
+    attribute TEXTURE23
+    attribute TEXTURE24
+    attribute TEXTURE25
+    attribute TEXTURE26
+    attribute TEXTURE27
+    attribute TEXTURE28
+    attribute TEXTURE29
+    attribute TEXTURE3
+    attribute TEXTURE30
+    attribute TEXTURE31
+    attribute TEXTURE4
+    attribute TEXTURE5
+    attribute TEXTURE6
+    attribute TEXTURE7
+    attribute TEXTURE8
+    attribute TEXTURE9
+    attribute TEXTURE_2D
+    attribute TEXTURE_2D_ARRAY
+    attribute TEXTURE_3D
+    attribute TEXTURE_BASE_LEVEL
+    attribute TEXTURE_BINDING_2D
+    attribute TEXTURE_BINDING_2D_ARRAY
+    attribute TEXTURE_BINDING_3D
+    attribute TEXTURE_BINDING_CUBE_MAP
+    attribute TEXTURE_COMPARE_FUNC
+    attribute TEXTURE_COMPARE_MODE
+    attribute TEXTURE_CUBE_MAP
+    attribute TEXTURE_CUBE_MAP_NEGATIVE_X
+    attribute TEXTURE_CUBE_MAP_NEGATIVE_Y
+    attribute TEXTURE_CUBE_MAP_NEGATIVE_Z
+    attribute TEXTURE_CUBE_MAP_POSITIVE_X
+    attribute TEXTURE_CUBE_MAP_POSITIVE_Y
+    attribute TEXTURE_CUBE_MAP_POSITIVE_Z
+    attribute TEXTURE_FETCH_BARRIER_BIT
+    attribute TEXTURE_IMMUTABLE_FORMAT
+    attribute TEXTURE_IMMUTABLE_LEVELS
+    attribute TEXTURE_MAG_FILTER
+    attribute TEXTURE_MAX_LEVEL
+    attribute TEXTURE_MAX_LOD
+    attribute TEXTURE_MIN_FILTER
+    attribute TEXTURE_MIN_LOD
+    attribute TEXTURE_UPDATE_BARRIER_BIT
+    attribute TEXTURE_WRAP_R
+    attribute TEXTURE_WRAP_S
+    attribute TEXTURE_WRAP_T
+    attribute TIMEOUT_EXPIRED
+    attribute TIMEOUT_IGNORED
+    attribute TOP_LEVEL_ARRAY_SIZE
+    attribute TOP_LEVEL_ARRAY_STRIDE
+    attribute TRANSFORM_FEEDBACK
+    attribute TRANSFORM_FEEDBACK_ACTIVE
+    attribute TRANSFORM_FEEDBACK_BARRIER_BIT
+    attribute TRANSFORM_FEEDBACK_BINDING
+    attribute TRANSFORM_FEEDBACK_BUFFER
+    attribute TRANSFORM_FEEDBACK_BUFFER_BINDING
+    attribute TRANSFORM_FEEDBACK_BUFFER_MODE
+    attribute TRANSFORM_FEEDBACK_BUFFER_SIZE
+    attribute TRANSFORM_FEEDBACK_BUFFER_START
+    attribute TRANSFORM_FEEDBACK_PAUSED
+    attribute TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN
+    attribute TRANSFORM_FEEDBACK_VARYING
+    attribute TRANSFORM_FEEDBACK_VARYINGS
+    attribute TRIANGLES
+    attribute TRIANGLE_FAN
+    attribute TRIANGLE_STRIP
+    attribute TYPE
+    attribute UNIFORM
+    attribute UNIFORM_ARRAY_STRIDE
+    attribute UNIFORM_BARRIER_BIT
+    attribute UNIFORM_BLOCK
+    attribute UNIFORM_BLOCK_ACTIVE_UNIFORMS
+    attribute UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES
+    attribute UNIFORM_BLOCK_BINDING
+    attribute UNIFORM_BLOCK_DATA_SIZE
+    attribute UNIFORM_BLOCK_INDEX
+    attribute UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER
+    attribute UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER
+    attribute UNIFORM_BUFFER
+    attribute UNIFORM_BUFFER_BINDING
+    attribute UNIFORM_BUFFER_OFFSET_ALIGNMENT
+    attribute UNIFORM_BUFFER_SIZE
+    attribute UNIFORM_BUFFER_START
+    attribute UNIFORM_IS_ROW_MAJOR
+    attribute UNIFORM_MATRIX_STRIDE
+    attribute UNIFORM_OFFSET
+    attribute UNIFORM_SIZE
+    attribute UNIFORM_TYPE
+    attribute UNPACK_ALIGNMENT
+    attribute UNPACK_COLORSPACE_CONVERSION_WEBGL
+    attribute UNPACK_FLIP_Y_WEBGL
+    attribute UNPACK_IMAGE_HEIGHT
+    attribute UNPACK_PREMULTIPLY_ALPHA_WEBGL
+    attribute UNPACK_ROW_LENGTH
+    attribute UNPACK_SKIP_IMAGES
+    attribute UNPACK_SKIP_PIXELS
+    attribute UNPACK_SKIP_ROWS
+    attribute UNSIGNALED
+    attribute UNSIGNED_BYTE
+    attribute UNSIGNED_INT
+    attribute UNSIGNED_INT_10F_11F_11F_REV
+    attribute UNSIGNED_INT_24_8
+    attribute UNSIGNED_INT_2_10_10_10_REV
+    attribute UNSIGNED_INT_5_9_9_9_REV
+    attribute UNSIGNED_INT_ATOMIC_COUNTER
+    attribute UNSIGNED_INT_SAMPLER_2D
+    attribute UNSIGNED_INT_SAMPLER_2D_ARRAY
+    attribute UNSIGNED_INT_SAMPLER_3D
+    attribute UNSIGNED_INT_SAMPLER_CUBE
+    attribute UNSIGNED_INT_VEC2
+    attribute UNSIGNED_INT_VEC3
+    attribute UNSIGNED_INT_VEC4
+    attribute UNSIGNED_NORMALIZED
+    attribute UNSIGNED_SHORT
+    attribute UNSIGNED_SHORT_4_4_4_4
+    attribute UNSIGNED_SHORT_5_5_5_1
+    attribute UNSIGNED_SHORT_5_6_5
+    attribute VALIDATE_STATUS
+    attribute VENDOR
+    attribute VERSION
+    attribute VERTEX_ARRAY_BINDING
+    attribute VERTEX_ATTRIB_ARRAY_BARRIER_BIT
+    attribute VERTEX_ATTRIB_ARRAY_BUFFER_BINDING
+    attribute VERTEX_ATTRIB_ARRAY_DIVISOR
+    attribute VERTEX_ATTRIB_ARRAY_ENABLED
+    attribute VERTEX_ATTRIB_ARRAY_INTEGER
+    attribute VERTEX_ATTRIB_ARRAY_NORMALIZED
+    attribute VERTEX_ATTRIB_ARRAY_POINTER
+    attribute VERTEX_ATTRIB_ARRAY_SIZE
+    attribute VERTEX_ATTRIB_ARRAY_STRIDE
+    attribute VERTEX_ATTRIB_ARRAY_TYPE
+    attribute VERTEX_SHADER
+    attribute VIEWPORT
+    attribute WAIT_FAILED
+    attribute WRITE_ONLY
+    attribute ZERO
+    getter canvas
+    getter drawingBufferHeight
+    getter drawingBufferWidth
+    method activeTexture
+    method attachShader
+    method beginQuery
+    method beginTransformFeedback
+    method bindAttribLocation
+    method bindBuffer
+    method bindBufferBase
+    method bindBufferRange
+    method bindFramebuffer
+    method bindImageTexture
+    method bindRenderbuffer
+    method bindSampler
+    method bindTexture
+    method bindTransformFeedback
+    method bindVertexArray
+    method blendColor
+    method blendEquation
+    method blendEquationSeparate
+    method blendFunc
+    method blendFuncSeparate
+    method blitFramebuffer
+    method bufferData
+    method bufferSubData
+    method checkFramebufferStatus
+    method clear
+    method clearBufferfi
+    method clearBufferfv
+    method clearBufferiv
+    method clearBufferuiv
+    method clearColor
+    method clearDepth
+    method clearStencil
+    method clientWaitSync
+    method colorMask
+    method commit
+    method compileShader
+    method compressedTexImage2D
+    method compressedTexImage3D
+    method compressedTexSubImage2D
+    method compressedTexSubImage3D
+    method constructor
+    method copyBufferSubData
+    method copyTexImage2D
+    method copyTexSubImage2D
+    method copyTexSubImage3D
+    method createBuffer
+    method createFramebuffer
+    method createProgram
+    method createQuery
+    method createRenderbuffer
+    method createSampler
+    method createShader
+    method createTexture
+    method createTransformFeedback
+    method createVertexArray
+    method cullFace
+    method deleteBuffer
+    method deleteFramebuffer
+    method deleteProgram
+    method deleteQuery
+    method deleteRenderbuffer
+    method deleteSampler
+    method deleteShader
+    method deleteSync
+    method deleteTexture
+    method deleteTransformFeedback
+    method deleteVertexArray
+    method depthFunc
+    method depthMask
+    method depthRange
+    method detachShader
+    method disable
+    method disableVertexAttribArray
+    method dispatchCompute
+    method dispatchComputeIndirect
+    method drawArrays
+    method drawArraysIndirect
+    method drawArraysInstanced
+    method drawBuffers
+    method drawElements
+    method drawElementsIndirect
+    method drawElementsInstanced
+    method drawRangeElements
+    method enable
+    method enableVertexAttribArray
+    method endQuery
+    method endTransformFeedback
+    method fenceSync
+    method finish
+    method flush
+    method framebufferRenderbuffer
+    method framebufferTexture2D
+    method framebufferTextureLayer
+    method frontFace
+    method generateMipmap
+    method getActiveAttrib
+    method getActiveUniform
+    method getActiveUniformBlockName
+    method getActiveUniformBlockParameter
+    method getActiveUniforms
+    method getAttachedShaders
+    method getAttribLocation
+    method getBufferParameter
+    method getBufferSubData
+    method getContextAttributes
+    method getError
+    method getExtension
+    method getFragDataLocation
+    method getFramebufferAttachmentParameter
+    method getIndexedParameter
+    method getInternalformatParameter
+    method getParameter
+    method getProgramInfoLog
+    method getProgramInterfaceParameter
+    method getProgramParameter
+    method getProgramResource
+    method getProgramResourceIndex
+    method getProgramResourceLocation
+    method getProgramResourceName
+    method getQuery
+    method getQueryParameter
+    method getRenderbufferParameter
+    method getSamplerParameter
+    method getShaderInfoLog
+    method getShaderParameter
+    method getShaderPrecisionFormat
+    method getShaderSource
+    method getSupportedExtensions
+    method getSyncParameter
+    method getTexParameter
+    method getTransformFeedbackVarying
+    method getUniform
+    method getUniformBlockIndex
+    method getUniformIndices
+    method getUniformLocation
+    method getVertexAttrib
+    method getVertexAttribOffset
+    method hint
+    method invalidateFramebuffer
+    method invalidateSubFramebuffer
+    method isBuffer
+    method isContextLost
+    method isEnabled
+    method isFramebuffer
+    method isProgram
+    method isQuery
+    method isRenderbuffer
+    method isSampler
+    method isShader
+    method isSync
+    method isTexture
+    method isTransformFeedback
+    method isVertexArray
+    method lineWidth
+    method linkProgram
+    method makeXRCompatible
+    method memoryBarrier
+    method memoryBarrierByRegion
+    method pauseTransformFeedback
+    method pixelStorei
+    method polygonOffset
+    method readBuffer
+    method readPixels
+    method renderbufferStorage
+    method renderbufferStorageMultisample
+    method resumeTransformFeedback
+    method sampleCoverage
+    method samplerParameterf
+    method samplerParameteri
+    method scissor
+    method shaderSource
+    method stencilFunc
+    method stencilFuncSeparate
+    method stencilMask
+    method stencilMaskSeparate
+    method stencilOp
+    method stencilOpSeparate
+    method texImage2D
+    method texImage3D
+    method texParameterf
+    method texParameteri
+    method texStorage2D
+    method texStorage3D
+    method texSubImage2D
+    method texSubImage3D
+    method transformFeedbackVaryings
+    method uniform1f
+    method uniform1fv
+    method uniform1i
+    method uniform1iv
+    method uniform1ui
+    method uniform1uiv
+    method uniform2f
+    method uniform2fv
+    method uniform2i
+    method uniform2iv
+    method uniform2ui
+    method uniform2uiv
+    method uniform3f
+    method uniform3fv
+    method uniform3i
+    method uniform3iv
+    method uniform3ui
+    method uniform3uiv
+    method uniform4f
+    method uniform4fv
+    method uniform4i
+    method uniform4iv
+    method uniform4ui
+    method uniform4uiv
+    method uniformBlockBinding
+    method uniformMatrix2fv
+    method uniformMatrix2x3fv
+    method uniformMatrix2x4fv
+    method uniformMatrix3fv
+    method uniformMatrix3x2fv
+    method uniformMatrix3x4fv
+    method uniformMatrix4fv
+    method uniformMatrix4x2fv
+    method uniformMatrix4x3fv
+    method useProgram
+    method validateProgram
+    method vertexAttrib1f
+    method vertexAttrib1fv
+    method vertexAttrib2f
+    method vertexAttrib2fv
+    method vertexAttrib3f
+    method vertexAttrib3fv
+    method vertexAttrib4f
+    method vertexAttrib4fv
+    method vertexAttribDivisor
+    method vertexAttribI4i
+    method vertexAttribI4iv
+    method vertexAttribI4ui
+    method vertexAttribI4uiv
+    method vertexAttribIPointer
+    method vertexAttribPointer
+    method viewport
+    method waitSync
+interface WebGL2RenderingContext
+    attribute @@toStringTag
+    attribute ACTIVE_ATTRIBUTES
+    attribute ACTIVE_TEXTURE
+    attribute ACTIVE_UNIFORMS
+    attribute ACTIVE_UNIFORM_BLOCKS
+    attribute ALIASED_LINE_WIDTH_RANGE
+    attribute ALIASED_POINT_SIZE_RANGE
+    attribute ALPHA
+    attribute ALPHA_BITS
+    attribute ALREADY_SIGNALED
+    attribute ALWAYS
+    attribute ANY_SAMPLES_PASSED
+    attribute ANY_SAMPLES_PASSED_CONSERVATIVE
+    attribute ARRAY_BUFFER
+    attribute ARRAY_BUFFER_BINDING
+    attribute ATTACHED_SHADERS
+    attribute BACK
+    attribute BLEND
+    attribute BLEND_COLOR
+    attribute BLEND_DST_ALPHA
+    attribute BLEND_DST_RGB
+    attribute BLEND_EQUATION
+    attribute BLEND_EQUATION_ALPHA
+    attribute BLEND_EQUATION_RGB
+    attribute BLEND_SRC_ALPHA
+    attribute BLEND_SRC_RGB
+    attribute BLUE_BITS
+    attribute BOOL
+    attribute BOOL_VEC2
+    attribute BOOL_VEC3
+    attribute BOOL_VEC4
+    attribute BROWSER_DEFAULT_WEBGL
+    attribute BUFFER_SIZE
+    attribute BUFFER_USAGE
+    attribute BYTE
+    attribute CCW
+    attribute CLAMP_TO_EDGE
+    attribute COLOR
+    attribute COLOR_ATTACHMENT0
+    attribute COLOR_ATTACHMENT1
+    attribute COLOR_ATTACHMENT10
+    attribute COLOR_ATTACHMENT11
+    attribute COLOR_ATTACHMENT12
+    attribute COLOR_ATTACHMENT13
+    attribute COLOR_ATTACHMENT14
+    attribute COLOR_ATTACHMENT15
+    attribute COLOR_ATTACHMENT2
+    attribute COLOR_ATTACHMENT3
+    attribute COLOR_ATTACHMENT4
+    attribute COLOR_ATTACHMENT5
+    attribute COLOR_ATTACHMENT6
+    attribute COLOR_ATTACHMENT7
+    attribute COLOR_ATTACHMENT8
+    attribute COLOR_ATTACHMENT9
+    attribute COLOR_BUFFER_BIT
+    attribute COLOR_CLEAR_VALUE
+    attribute COLOR_WRITEMASK
+    attribute COMPARE_REF_TO_TEXTURE
+    attribute COMPILE_STATUS
+    attribute COMPRESSED_TEXTURE_FORMATS
+    attribute CONDITION_SATISFIED
+    attribute CONSTANT_ALPHA
+    attribute CONSTANT_COLOR
+    attribute CONTEXT_LOST_WEBGL
+    attribute COPY_READ_BUFFER
+    attribute COPY_READ_BUFFER_BINDING
+    attribute COPY_WRITE_BUFFER
+    attribute COPY_WRITE_BUFFER_BINDING
+    attribute CULL_FACE
+    attribute CULL_FACE_MODE
+    attribute CURRENT_PROGRAM
+    attribute CURRENT_QUERY
+    attribute CURRENT_VERTEX_ATTRIB
+    attribute CW
+    attribute DECR
+    attribute DECR_WRAP
+    attribute DELETE_STATUS
+    attribute DEPTH
+    attribute DEPTH24_STENCIL8
+    attribute DEPTH32F_STENCIL8
+    attribute DEPTH_ATTACHMENT
+    attribute DEPTH_BITS
+    attribute DEPTH_BUFFER_BIT
+    attribute DEPTH_CLEAR_VALUE
+    attribute DEPTH_COMPONENT
+    attribute DEPTH_COMPONENT16
+    attribute DEPTH_COMPONENT24
+    attribute DEPTH_COMPONENT32F
+    attribute DEPTH_FUNC
+    attribute DEPTH_RANGE
+    attribute DEPTH_STENCIL
+    attribute DEPTH_STENCIL_ATTACHMENT
+    attribute DEPTH_TEST
+    attribute DEPTH_WRITEMASK
+    attribute DITHER
+    attribute DONT_CARE
+    attribute DRAW_BUFFER0
+    attribute DRAW_BUFFER1
+    attribute DRAW_BUFFER10
+    attribute DRAW_BUFFER11
+    attribute DRAW_BUFFER12
+    attribute DRAW_BUFFER13
+    attribute DRAW_BUFFER14
+    attribute DRAW_BUFFER15
+    attribute DRAW_BUFFER2
+    attribute DRAW_BUFFER3
+    attribute DRAW_BUFFER4
+    attribute DRAW_BUFFER5
+    attribute DRAW_BUFFER6
+    attribute DRAW_BUFFER7
+    attribute DRAW_BUFFER8
+    attribute DRAW_BUFFER9
+    attribute DRAW_FRAMEBUFFER
+    attribute DRAW_FRAMEBUFFER_BINDING
+    attribute DST_ALPHA
+    attribute DST_COLOR
+    attribute DYNAMIC_COPY
+    attribute DYNAMIC_DRAW
+    attribute DYNAMIC_READ
+    attribute ELEMENT_ARRAY_BUFFER
+    attribute ELEMENT_ARRAY_BUFFER_BINDING
+    attribute EQUAL
+    attribute FASTEST
+    attribute FLOAT
+    attribute FLOAT_32_UNSIGNED_INT_24_8_REV
+    attribute FLOAT_MAT2
+    attribute FLOAT_MAT2x3
+    attribute FLOAT_MAT2x4
+    attribute FLOAT_MAT3
+    attribute FLOAT_MAT3x2
+    attribute FLOAT_MAT3x4
+    attribute FLOAT_MAT4
+    attribute FLOAT_MAT4x2
+    attribute FLOAT_MAT4x3
+    attribute FLOAT_VEC2
+    attribute FLOAT_VEC3
+    attribute FLOAT_VEC4
+    attribute FRAGMENT_SHADER
+    attribute FRAGMENT_SHADER_DERIVATIVE_HINT
+    attribute FRAMEBUFFER
+    attribute FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE
+    attribute FRAMEBUFFER_ATTACHMENT_BLUE_SIZE
+    attribute FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING
+    attribute FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE
+    attribute FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE
+    attribute FRAMEBUFFER_ATTACHMENT_GREEN_SIZE
+    attribute FRAMEBUFFER_ATTACHMENT_OBJECT_NAME
+    attribute FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE
+    attribute FRAMEBUFFER_ATTACHMENT_RED_SIZE
+    attribute FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE
+    attribute FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE
+    attribute FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER
+    attribute FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL
+    attribute FRAMEBUFFER_BINDING
+    attribute FRAMEBUFFER_COMPLETE
+    attribute FRAMEBUFFER_DEFAULT
+    attribute FRAMEBUFFER_INCOMPLETE_ATTACHMENT
+    attribute FRAMEBUFFER_INCOMPLETE_DIMENSIONS
+    attribute FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT
+    attribute FRAMEBUFFER_INCOMPLETE_MULTISAMPLE
+    attribute FRAMEBUFFER_UNSUPPORTED
+    attribute FRONT
+    attribute FRONT_AND_BACK
+    attribute FRONT_FACE
+    attribute FUNC_ADD
+    attribute FUNC_REVERSE_SUBTRACT
+    attribute FUNC_SUBTRACT
+    attribute GENERATE_MIPMAP_HINT
+    attribute GEQUAL
+    attribute GREATER
+    attribute GREEN_BITS
+    attribute HALF_FLOAT
+    attribute HIGH_FLOAT
+    attribute HIGH_INT
+    attribute IMPLEMENTATION_COLOR_READ_FORMAT
+    attribute IMPLEMENTATION_COLOR_READ_TYPE
+    attribute INCR
+    attribute INCR_WRAP
+    attribute INT
+    attribute INTERLEAVED_ATTRIBS
+    attribute INT_2_10_10_10_REV
+    attribute INT_SAMPLER_2D
+    attribute INT_SAMPLER_2D_ARRAY
+    attribute INT_SAMPLER_3D
+    attribute INT_SAMPLER_CUBE
+    attribute INT_VEC2
+    attribute INT_VEC3
+    attribute INT_VEC4
+    attribute INVALID_ENUM
+    attribute INVALID_FRAMEBUFFER_OPERATION
+    attribute INVALID_INDEX
+    attribute INVALID_OPERATION
+    attribute INVALID_VALUE
+    attribute INVERT
+    attribute KEEP
+    attribute LEQUAL
+    attribute LESS
+    attribute LINEAR
+    attribute LINEAR_MIPMAP_LINEAR
+    attribute LINEAR_MIPMAP_NEAREST
+    attribute LINES
+    attribute LINE_LOOP
+    attribute LINE_STRIP
+    attribute LINE_WIDTH
+    attribute LINK_STATUS
+    attribute LOW_FLOAT
+    attribute LOW_INT
+    attribute LUMINANCE
+    attribute LUMINANCE_ALPHA
+    attribute MAX
+    attribute MAX_3D_TEXTURE_SIZE
+    attribute MAX_ARRAY_TEXTURE_LAYERS
+    attribute MAX_CLIENT_WAIT_TIMEOUT_WEBGL
+    attribute MAX_COLOR_ATTACHMENTS
+    attribute MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS
+    attribute MAX_COMBINED_TEXTURE_IMAGE_UNITS
+    attribute MAX_COMBINED_UNIFORM_BLOCKS
+    attribute MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS
+    attribute MAX_CUBE_MAP_TEXTURE_SIZE
+    attribute MAX_DRAW_BUFFERS
+    attribute MAX_ELEMENTS_INDICES
+    attribute MAX_ELEMENTS_VERTICES
+    attribute MAX_ELEMENT_INDEX
+    attribute MAX_FRAGMENT_INPUT_COMPONENTS
+    attribute MAX_FRAGMENT_UNIFORM_BLOCKS
+    attribute MAX_FRAGMENT_UNIFORM_COMPONENTS
+    attribute MAX_FRAGMENT_UNIFORM_VECTORS
+    attribute MAX_PROGRAM_TEXEL_OFFSET
+    attribute MAX_RENDERBUFFER_SIZE
+    attribute MAX_SAMPLES
+    attribute MAX_SERVER_WAIT_TIMEOUT
+    attribute MAX_TEXTURE_IMAGE_UNITS
+    attribute MAX_TEXTURE_LOD_BIAS
+    attribute MAX_TEXTURE_SIZE
+    attribute MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS
+    attribute MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS
+    attribute MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS
+    attribute MAX_UNIFORM_BLOCK_SIZE
+    attribute MAX_UNIFORM_BUFFER_BINDINGS
+    attribute MAX_VARYING_COMPONENTS
+    attribute MAX_VARYING_VECTORS
+    attribute MAX_VERTEX_ATTRIBS
+    attribute MAX_VERTEX_OUTPUT_COMPONENTS
+    attribute MAX_VERTEX_TEXTURE_IMAGE_UNITS
+    attribute MAX_VERTEX_UNIFORM_BLOCKS
+    attribute MAX_VERTEX_UNIFORM_COMPONENTS
+    attribute MAX_VERTEX_UNIFORM_VECTORS
+    attribute MAX_VIEWPORT_DIMS
+    attribute MEDIUM_FLOAT
+    attribute MEDIUM_INT
+    attribute MIN
+    attribute MIN_PROGRAM_TEXEL_OFFSET
+    attribute MIRRORED_REPEAT
+    attribute NEAREST
+    attribute NEAREST_MIPMAP_LINEAR
+    attribute NEAREST_MIPMAP_NEAREST
+    attribute NEVER
+    attribute NICEST
+    attribute NONE
+    attribute NOTEQUAL
+    attribute NO_ERROR
+    attribute OBJECT_TYPE
+    attribute ONE
+    attribute ONE_MINUS_CONSTANT_ALPHA
+    attribute ONE_MINUS_CONSTANT_COLOR
+    attribute ONE_MINUS_DST_ALPHA
+    attribute ONE_MINUS_DST_COLOR
+    attribute ONE_MINUS_SRC_ALPHA
+    attribute ONE_MINUS_SRC_COLOR
+    attribute OUT_OF_MEMORY
+    attribute PACK_ALIGNMENT
+    attribute PACK_ROW_LENGTH
+    attribute PACK_SKIP_PIXELS
+    attribute PACK_SKIP_ROWS
+    attribute PIXEL_PACK_BUFFER
+    attribute PIXEL_PACK_BUFFER_BINDING
+    attribute PIXEL_UNPACK_BUFFER
+    attribute PIXEL_UNPACK_BUFFER_BINDING
+    attribute POINTS
+    attribute POLYGON_OFFSET_FACTOR
+    attribute POLYGON_OFFSET_FILL
+    attribute POLYGON_OFFSET_UNITS
+    attribute QUERY_RESULT
+    attribute QUERY_RESULT_AVAILABLE
+    attribute R11F_G11F_B10F
+    attribute R16F
+    attribute R16I
+    attribute R16UI
+    attribute R32F
+    attribute R32I
+    attribute R32UI
+    attribute R8
+    attribute R8I
+    attribute R8UI
+    attribute R8_SNORM
+    attribute RASTERIZER_DISCARD
+    attribute READ_BUFFER
+    attribute READ_FRAMEBUFFER
+    attribute READ_FRAMEBUFFER_BINDING
+    attribute RED
+    attribute RED_BITS
+    attribute RED_INTEGER
+    attribute RENDERBUFFER
+    attribute RENDERBUFFER_ALPHA_SIZE
+    attribute RENDERBUFFER_BINDING
+    attribute RENDERBUFFER_BLUE_SIZE
+    attribute RENDERBUFFER_DEPTH_SIZE
+    attribute RENDERBUFFER_GREEN_SIZE
+    attribute RENDERBUFFER_HEIGHT
+    attribute RENDERBUFFER_INTERNAL_FORMAT
+    attribute RENDERBUFFER_RED_SIZE
+    attribute RENDERBUFFER_SAMPLES
+    attribute RENDERBUFFER_STENCIL_SIZE
+    attribute RENDERBUFFER_WIDTH
+    attribute RENDERER
+    attribute REPEAT
+    attribute REPLACE
+    attribute RG
+    attribute RG16F
+    attribute RG16I
+    attribute RG16UI
+    attribute RG32F
+    attribute RG32I
+    attribute RG32UI
+    attribute RG8
+    attribute RG8I
+    attribute RG8UI
+    attribute RG8_SNORM
+    attribute RGB
+    attribute RGB10_A2
+    attribute RGB10_A2UI
+    attribute RGB16F
+    attribute RGB16I
+    attribute RGB16UI
+    attribute RGB32F
+    attribute RGB32I
+    attribute RGB32UI
+    attribute RGB565
+    attribute RGB5_A1
+    attribute RGB8
+    attribute RGB8I
+    attribute RGB8UI
+    attribute RGB8_SNORM
+    attribute RGB9_E5
+    attribute RGBA
+    attribute RGBA16F
+    attribute RGBA16I
+    attribute RGBA16UI
+    attribute RGBA32F
+    attribute RGBA32I
+    attribute RGBA32UI
+    attribute RGBA4
+    attribute RGBA8
+    attribute RGBA8I
+    attribute RGBA8UI
+    attribute RGBA8_SNORM
+    attribute RGBA_INTEGER
+    attribute RGB_INTEGER
+    attribute RG_INTEGER
+    attribute SAMPLER_2D
+    attribute SAMPLER_2D_ARRAY
+    attribute SAMPLER_2D_ARRAY_SHADOW
+    attribute SAMPLER_2D_SHADOW
+    attribute SAMPLER_3D
+    attribute SAMPLER_BINDING
+    attribute SAMPLER_CUBE
+    attribute SAMPLER_CUBE_SHADOW
+    attribute SAMPLES
+    attribute SAMPLE_ALPHA_TO_COVERAGE
+    attribute SAMPLE_BUFFERS
+    attribute SAMPLE_COVERAGE
+    attribute SAMPLE_COVERAGE_INVERT
+    attribute SAMPLE_COVERAGE_VALUE
+    attribute SCISSOR_BOX
+    attribute SCISSOR_TEST
+    attribute SEPARATE_ATTRIBS
+    attribute SHADER_TYPE
+    attribute SHADING_LANGUAGE_VERSION
+    attribute SHORT
+    attribute SIGNALED
+    attribute SIGNED_NORMALIZED
+    attribute SRC_ALPHA
+    attribute SRC_ALPHA_SATURATE
+    attribute SRC_COLOR
+    attribute SRGB
+    attribute SRGB8
+    attribute SRGB8_ALPHA8
+    attribute STATIC_COPY
+    attribute STATIC_DRAW
+    attribute STATIC_READ
+    attribute STENCIL
+    attribute STENCIL_ATTACHMENT
+    attribute STENCIL_BACK_FAIL
+    attribute STENCIL_BACK_FUNC
+    attribute STENCIL_BACK_PASS_DEPTH_FAIL
+    attribute STENCIL_BACK_PASS_DEPTH_PASS
+    attribute STENCIL_BACK_REF
+    attribute STENCIL_BACK_VALUE_MASK
+    attribute STENCIL_BACK_WRITEMASK
+    attribute STENCIL_BITS
+    attribute STENCIL_BUFFER_BIT
+    attribute STENCIL_CLEAR_VALUE
+    attribute STENCIL_FAIL
+    attribute STENCIL_FUNC
+    attribute STENCIL_INDEX8
+    attribute STENCIL_PASS_DEPTH_FAIL
+    attribute STENCIL_PASS_DEPTH_PASS
+    attribute STENCIL_REF
+    attribute STENCIL_TEST
+    attribute STENCIL_VALUE_MASK
+    attribute STENCIL_WRITEMASK
+    attribute STREAM_COPY
+    attribute STREAM_DRAW
+    attribute STREAM_READ
+    attribute SUBPIXEL_BITS
+    attribute SYNC_CONDITION
+    attribute SYNC_FENCE
+    attribute SYNC_FLAGS
+    attribute SYNC_FLUSH_COMMANDS_BIT
+    attribute SYNC_GPU_COMMANDS_COMPLETE
+    attribute SYNC_STATUS
+    attribute TEXTURE
+    attribute TEXTURE0
+    attribute TEXTURE1
+    attribute TEXTURE10
+    attribute TEXTURE11
+    attribute TEXTURE12
+    attribute TEXTURE13
+    attribute TEXTURE14
+    attribute TEXTURE15
+    attribute TEXTURE16
+    attribute TEXTURE17
+    attribute TEXTURE18
+    attribute TEXTURE19
+    attribute TEXTURE2
+    attribute TEXTURE20
+    attribute TEXTURE21
+    attribute TEXTURE22
+    attribute TEXTURE23
+    attribute TEXTURE24
+    attribute TEXTURE25
+    attribute TEXTURE26
+    attribute TEXTURE27
+    attribute TEXTURE28
+    attribute TEXTURE29
+    attribute TEXTURE3
+    attribute TEXTURE30
+    attribute TEXTURE31
+    attribute TEXTURE4
+    attribute TEXTURE5
+    attribute TEXTURE6
+    attribute TEXTURE7
+    attribute TEXTURE8
+    attribute TEXTURE9
+    attribute TEXTURE_2D
+    attribute TEXTURE_2D_ARRAY
+    attribute TEXTURE_3D
+    attribute TEXTURE_BASE_LEVEL
+    attribute TEXTURE_BINDING_2D
+    attribute TEXTURE_BINDING_2D_ARRAY
+    attribute TEXTURE_BINDING_3D
+    attribute TEXTURE_BINDING_CUBE_MAP
+    attribute TEXTURE_COMPARE_FUNC
+    attribute TEXTURE_COMPARE_MODE
+    attribute TEXTURE_CUBE_MAP
+    attribute TEXTURE_CUBE_MAP_NEGATIVE_X
+    attribute TEXTURE_CUBE_MAP_NEGATIVE_Y
+    attribute TEXTURE_CUBE_MAP_NEGATIVE_Z
+    attribute TEXTURE_CUBE_MAP_POSITIVE_X
+    attribute TEXTURE_CUBE_MAP_POSITIVE_Y
+    attribute TEXTURE_CUBE_MAP_POSITIVE_Z
+    attribute TEXTURE_IMMUTABLE_FORMAT
+    attribute TEXTURE_IMMUTABLE_LEVELS
+    attribute TEXTURE_MAG_FILTER
+    attribute TEXTURE_MAX_LEVEL
+    attribute TEXTURE_MAX_LOD
+    attribute TEXTURE_MIN_FILTER
+    attribute TEXTURE_MIN_LOD
+    attribute TEXTURE_WRAP_R
+    attribute TEXTURE_WRAP_S
+    attribute TEXTURE_WRAP_T
+    attribute TIMEOUT_EXPIRED
+    attribute TIMEOUT_IGNORED
+    attribute TRANSFORM_FEEDBACK
+    attribute TRANSFORM_FEEDBACK_ACTIVE
+    attribute TRANSFORM_FEEDBACK_BINDING
+    attribute TRANSFORM_FEEDBACK_BUFFER
+    attribute TRANSFORM_FEEDBACK_BUFFER_BINDING
+    attribute TRANSFORM_FEEDBACK_BUFFER_MODE
+    attribute TRANSFORM_FEEDBACK_BUFFER_SIZE
+    attribute TRANSFORM_FEEDBACK_BUFFER_START
+    attribute TRANSFORM_FEEDBACK_PAUSED
+    attribute TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN
+    attribute TRANSFORM_FEEDBACK_VARYINGS
+    attribute TRIANGLES
+    attribute TRIANGLE_FAN
+    attribute TRIANGLE_STRIP
+    attribute UNIFORM_ARRAY_STRIDE
+    attribute UNIFORM_BLOCK_ACTIVE_UNIFORMS
+    attribute UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES
+    attribute UNIFORM_BLOCK_BINDING
+    attribute UNIFORM_BLOCK_DATA_SIZE
+    attribute UNIFORM_BLOCK_INDEX
+    attribute UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER
+    attribute UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER
+    attribute UNIFORM_BUFFER
+    attribute UNIFORM_BUFFER_BINDING
+    attribute UNIFORM_BUFFER_OFFSET_ALIGNMENT
+    attribute UNIFORM_BUFFER_SIZE
+    attribute UNIFORM_BUFFER_START
+    attribute UNIFORM_IS_ROW_MAJOR
+    attribute UNIFORM_MATRIX_STRIDE
+    attribute UNIFORM_OFFSET
+    attribute UNIFORM_SIZE
+    attribute UNIFORM_TYPE
+    attribute UNPACK_ALIGNMENT
+    attribute UNPACK_COLORSPACE_CONVERSION_WEBGL
+    attribute UNPACK_FLIP_Y_WEBGL
+    attribute UNPACK_IMAGE_HEIGHT
+    attribute UNPACK_PREMULTIPLY_ALPHA_WEBGL
+    attribute UNPACK_ROW_LENGTH
+    attribute UNPACK_SKIP_IMAGES
+    attribute UNPACK_SKIP_PIXELS
+    attribute UNPACK_SKIP_ROWS
+    attribute UNSIGNALED
+    attribute UNSIGNED_BYTE
+    attribute UNSIGNED_INT
+    attribute UNSIGNED_INT_10F_11F_11F_REV
+    attribute UNSIGNED_INT_24_8
+    attribute UNSIGNED_INT_2_10_10_10_REV
+    attribute UNSIGNED_INT_5_9_9_9_REV
+    attribute UNSIGNED_INT_SAMPLER_2D
+    attribute UNSIGNED_INT_SAMPLER_2D_ARRAY
+    attribute UNSIGNED_INT_SAMPLER_3D
+    attribute UNSIGNED_INT_SAMPLER_CUBE
+    attribute UNSIGNED_INT_VEC2
+    attribute UNSIGNED_INT_VEC3
+    attribute UNSIGNED_INT_VEC4
+    attribute UNSIGNED_NORMALIZED
+    attribute UNSIGNED_SHORT
+    attribute UNSIGNED_SHORT_4_4_4_4
+    attribute UNSIGNED_SHORT_5_5_5_1
+    attribute UNSIGNED_SHORT_5_6_5
+    attribute VALIDATE_STATUS
+    attribute VENDOR
+    attribute VERSION
+    attribute VERTEX_ARRAY_BINDING
+    attribute VERTEX_ATTRIB_ARRAY_BUFFER_BINDING
+    attribute VERTEX_ATTRIB_ARRAY_DIVISOR
+    attribute VERTEX_ATTRIB_ARRAY_ENABLED
+    attribute VERTEX_ATTRIB_ARRAY_INTEGER
+    attribute VERTEX_ATTRIB_ARRAY_NORMALIZED
+    attribute VERTEX_ATTRIB_ARRAY_POINTER
+    attribute VERTEX_ATTRIB_ARRAY_SIZE
+    attribute VERTEX_ATTRIB_ARRAY_STRIDE
+    attribute VERTEX_ATTRIB_ARRAY_TYPE
+    attribute VERTEX_SHADER
+    attribute VIEWPORT
+    attribute WAIT_FAILED
+    attribute ZERO
+    getter canvas
+    getter drawingBufferHeight
+    getter drawingBufferWidth
+    method activeTexture
+    method attachShader
+    method beginQuery
+    method beginTransformFeedback
+    method bindAttribLocation
+    method bindBuffer
+    method bindBufferBase
+    method bindBufferRange
+    method bindFramebuffer
+    method bindRenderbuffer
+    method bindSampler
+    method bindTexture
+    method bindTransformFeedback
+    method bindVertexArray
+    method blendColor
+    method blendEquation
+    method blendEquationSeparate
+    method blendFunc
+    method blendFuncSeparate
+    method blitFramebuffer
+    method bufferData
+    method bufferSubData
+    method checkFramebufferStatus
+    method clear
+    method clearBufferfi
+    method clearBufferfv
+    method clearBufferiv
+    method clearBufferuiv
+    method clearColor
+    method clearDepth
+    method clearStencil
+    method clientWaitSync
+    method colorMask
+    method commit
+    method compileShader
+    method compressedTexImage2D
+    method compressedTexImage3D
+    method compressedTexSubImage2D
+    method compressedTexSubImage3D
+    method constructor
+    method copyBufferSubData
+    method copyTexImage2D
+    method copyTexSubImage2D
+    method copyTexSubImage3D
+    method createBuffer
+    method createFramebuffer
+    method createProgram
+    method createQuery
+    method createRenderbuffer
+    method createSampler
+    method createShader
+    method createTexture
+    method createTransformFeedback
+    method createVertexArray
+    method cullFace
+    method deleteBuffer
+    method deleteFramebuffer
+    method deleteProgram
+    method deleteQuery
+    method deleteRenderbuffer
+    method deleteSampler
+    method deleteShader
+    method deleteSync
+    method deleteTexture
+    method deleteTransformFeedback
+    method deleteVertexArray
+    method depthFunc
+    method depthMask
+    method depthRange
+    method detachShader
+    method disable
+    method disableVertexAttribArray
+    method drawArrays
+    method drawArraysInstanced
+    method drawBuffers
+    method drawElements
+    method drawElementsInstanced
+    method drawRangeElements
+    method enable
+    method enableVertexAttribArray
+    method endQuery
+    method endTransformFeedback
+    method fenceSync
+    method finish
+    method flush
+    method framebufferRenderbuffer
+    method framebufferTexture2D
+    method framebufferTextureLayer
+    method frontFace
+    method generateMipmap
+    method getActiveAttrib
+    method getActiveUniform
+    method getActiveUniformBlockName
+    method getActiveUniformBlockParameter
+    method getActiveUniforms
+    method getAttachedShaders
+    method getAttribLocation
+    method getBufferParameter
+    method getBufferSubData
+    method getContextAttributes
+    method getError
+    method getExtension
+    method getFragDataLocation
+    method getFramebufferAttachmentParameter
+    method getIndexedParameter
+    method getInternalformatParameter
+    method getParameter
+    method getProgramInfoLog
+    method getProgramParameter
+    method getQuery
+    method getQueryParameter
+    method getRenderbufferParameter
+    method getSamplerParameter
+    method getShaderInfoLog
+    method getShaderParameter
+    method getShaderPrecisionFormat
+    method getShaderSource
+    method getSupportedExtensions
+    method getSyncParameter
+    method getTexParameter
+    method getTransformFeedbackVarying
+    method getUniform
+    method getUniformBlockIndex
+    method getUniformIndices
+    method getUniformLocation
+    method getVertexAttrib
+    method getVertexAttribOffset
+    method hint
+    method invalidateFramebuffer
+    method invalidateSubFramebuffer
+    method isBuffer
+    method isContextLost
+    method isEnabled
+    method isFramebuffer
+    method isProgram
+    method isQuery
+    method isRenderbuffer
+    method isSampler
+    method isShader
+    method isSync
+    method isTexture
+    method isTransformFeedback
+    method isVertexArray
+    method lineWidth
+    method linkProgram
+    method makeXRCompatible
+    method pauseTransformFeedback
+    method pixelStorei
+    method polygonOffset
+    method readBuffer
+    method readPixels
+    method renderbufferStorage
+    method renderbufferStorageMultisample
+    method resumeTransformFeedback
+    method sampleCoverage
+    method samplerParameterf
+    method samplerParameteri
+    method scissor
+    method shaderSource
+    method stencilFunc
+    method stencilFuncSeparate
+    method stencilMask
+    method stencilMaskSeparate
+    method stencilOp
+    method stencilOpSeparate
+    method texImage2D
+    method texImage3D
+    method texParameterf
+    method texParameteri
+    method texStorage2D
+    method texStorage3D
+    method texSubImage2D
+    method texSubImage3D
+    method transformFeedbackVaryings
+    method uniform1f
+    method uniform1fv
+    method uniform1i
+    method uniform1iv
+    method uniform1ui
+    method uniform1uiv
+    method uniform2f
+    method uniform2fv
+    method uniform2i
+    method uniform2iv
+    method uniform2ui
+    method uniform2uiv
+    method uniform3f
+    method uniform3fv
+    method uniform3i
+    method uniform3iv
+    method uniform3ui
+    method uniform3uiv
+    method uniform4f
+    method uniform4fv
+    method uniform4i
+    method uniform4iv
+    method uniform4ui
+    method uniform4uiv
+    method uniformBlockBinding
+    method uniformMatrix2fv
+    method uniformMatrix2x3fv
+    method uniformMatrix2x4fv
+    method uniformMatrix3fv
+    method uniformMatrix3x2fv
+    method uniformMatrix3x4fv
+    method uniformMatrix4fv
+    method uniformMatrix4x2fv
+    method uniformMatrix4x3fv
+    method useProgram
+    method validateProgram
+    method vertexAttrib1f
+    method vertexAttrib1fv
+    method vertexAttrib2f
+    method vertexAttrib2fv
+    method vertexAttrib3f
+    method vertexAttrib3fv
+    method vertexAttrib4f
+    method vertexAttrib4fv
+    method vertexAttribDivisor
+    method vertexAttribI4i
+    method vertexAttribI4iv
+    method vertexAttribI4ui
+    method vertexAttribI4uiv
+    method vertexAttribIPointer
+    method vertexAttribPointer
+    method viewport
+    method waitSync
+interface WebGLActiveInfo
+    attribute @@toStringTag
+    getter name
+    getter size
+    getter type
+    method constructor
+interface WebGLBuffer
+    attribute @@toStringTag
+    method constructor
+interface WebGLContextEvent : Event
+    attribute @@toStringTag
+    getter statusMessage
+    method constructor
+interface WebGLFramebuffer
+    attribute @@toStringTag
+    method constructor
+interface WebGLProgram
+    attribute @@toStringTag
+    method constructor
+interface WebGLQuery
+    attribute @@toStringTag
+    method constructor
+interface WebGLRenderbuffer
+    attribute @@toStringTag
+    method constructor
+interface WebGLRenderingContext
+    attribute @@toStringTag
+    attribute ACTIVE_ATTRIBUTES
+    attribute ACTIVE_TEXTURE
+    attribute ACTIVE_UNIFORMS
+    attribute ALIASED_LINE_WIDTH_RANGE
+    attribute ALIASED_POINT_SIZE_RANGE
+    attribute ALPHA
+    attribute ALPHA_BITS
+    attribute ALWAYS
+    attribute ARRAY_BUFFER
+    attribute ARRAY_BUFFER_BINDING
+    attribute ATTACHED_SHADERS
+    attribute BACK
+    attribute BLEND
+    attribute BLEND_COLOR
+    attribute BLEND_DST_ALPHA
+    attribute BLEND_DST_RGB
+    attribute BLEND_EQUATION
+    attribute BLEND_EQUATION_ALPHA
+    attribute BLEND_EQUATION_RGB
+    attribute BLEND_SRC_ALPHA
+    attribute BLEND_SRC_RGB
+    attribute BLUE_BITS
+    attribute BOOL
+    attribute BOOL_VEC2
+    attribute BOOL_VEC3
+    attribute BOOL_VEC4
+    attribute BROWSER_DEFAULT_WEBGL
+    attribute BUFFER_SIZE
+    attribute BUFFER_USAGE
+    attribute BYTE
+    attribute CCW
+    attribute CLAMP_TO_EDGE
+    attribute COLOR_ATTACHMENT0
+    attribute COLOR_BUFFER_BIT
+    attribute COLOR_CLEAR_VALUE
+    attribute COLOR_WRITEMASK
+    attribute COMPILE_STATUS
+    attribute COMPRESSED_TEXTURE_FORMATS
+    attribute CONSTANT_ALPHA
+    attribute CONSTANT_COLOR
+    attribute CONTEXT_LOST_WEBGL
+    attribute CULL_FACE
+    attribute CULL_FACE_MODE
+    attribute CURRENT_PROGRAM
+    attribute CURRENT_VERTEX_ATTRIB
+    attribute CW
+    attribute DECR
+    attribute DECR_WRAP
+    attribute DELETE_STATUS
+    attribute DEPTH_ATTACHMENT
+    attribute DEPTH_BITS
+    attribute DEPTH_BUFFER_BIT
+    attribute DEPTH_CLEAR_VALUE
+    attribute DEPTH_COMPONENT
+    attribute DEPTH_COMPONENT16
+    attribute DEPTH_FUNC
+    attribute DEPTH_RANGE
+    attribute DEPTH_STENCIL
+    attribute DEPTH_STENCIL_ATTACHMENT
+    attribute DEPTH_TEST
+    attribute DEPTH_WRITEMASK
+    attribute DITHER
+    attribute DONT_CARE
+    attribute DST_ALPHA
+    attribute DST_COLOR
+    attribute DYNAMIC_DRAW
+    attribute ELEMENT_ARRAY_BUFFER
+    attribute ELEMENT_ARRAY_BUFFER_BINDING
+    attribute EQUAL
+    attribute FASTEST
+    attribute FLOAT
+    attribute FLOAT_MAT2
+    attribute FLOAT_MAT3
+    attribute FLOAT_MAT4
+    attribute FLOAT_VEC2
+    attribute FLOAT_VEC3
+    attribute FLOAT_VEC4
+    attribute FRAGMENT_SHADER
+    attribute FRAMEBUFFER
+    attribute FRAMEBUFFER_ATTACHMENT_OBJECT_NAME
+    attribute FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE
+    attribute FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE
+    attribute FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL
+    attribute FRAMEBUFFER_BINDING
+    attribute FRAMEBUFFER_COMPLETE
+    attribute FRAMEBUFFER_INCOMPLETE_ATTACHMENT
+    attribute FRAMEBUFFER_INCOMPLETE_DIMENSIONS
+    attribute FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT
+    attribute FRAMEBUFFER_UNSUPPORTED
+    attribute FRONT
+    attribute FRONT_AND_BACK
+    attribute FRONT_FACE
+    attribute FUNC_ADD
+    attribute FUNC_REVERSE_SUBTRACT
+    attribute FUNC_SUBTRACT
+    attribute GENERATE_MIPMAP_HINT
+    attribute GEQUAL
+    attribute GREATER
+    attribute GREEN_BITS
+    attribute HIGH_FLOAT
+    attribute HIGH_INT
+    attribute IMPLEMENTATION_COLOR_READ_FORMAT
+    attribute IMPLEMENTATION_COLOR_READ_TYPE
+    attribute INCR
+    attribute INCR_WRAP
+    attribute INT
+    attribute INT_VEC2
+    attribute INT_VEC3
+    attribute INT_VEC4
+    attribute INVALID_ENUM
+    attribute INVALID_FRAMEBUFFER_OPERATION
+    attribute INVALID_OPERATION
+    attribute INVALID_VALUE
+    attribute INVERT
+    attribute KEEP
+    attribute LEQUAL
+    attribute LESS
+    attribute LINEAR
+    attribute LINEAR_MIPMAP_LINEAR
+    attribute LINEAR_MIPMAP_NEAREST
+    attribute LINES
+    attribute LINE_LOOP
+    attribute LINE_STRIP
+    attribute LINE_WIDTH
+    attribute LINK_STATUS
+    attribute LOW_FLOAT
+    attribute LOW_INT
+    attribute LUMINANCE
+    attribute LUMINANCE_ALPHA
+    attribute MAX_COMBINED_TEXTURE_IMAGE_UNITS
+    attribute MAX_CUBE_MAP_TEXTURE_SIZE
+    attribute MAX_FRAGMENT_UNIFORM_VECTORS
+    attribute MAX_RENDERBUFFER_SIZE
+    attribute MAX_TEXTURE_IMAGE_UNITS
+    attribute MAX_TEXTURE_SIZE
+    attribute MAX_VARYING_VECTORS
+    attribute MAX_VERTEX_ATTRIBS
+    attribute MAX_VERTEX_TEXTURE_IMAGE_UNITS
+    attribute MAX_VERTEX_UNIFORM_VECTORS
+    attribute MAX_VIEWPORT_DIMS
+    attribute MEDIUM_FLOAT
+    attribute MEDIUM_INT
+    attribute MIRRORED_REPEAT
+    attribute NEAREST
+    attribute NEAREST_MIPMAP_LINEAR
+    attribute NEAREST_MIPMAP_NEAREST
+    attribute NEVER
+    attribute NICEST
+    attribute NONE
+    attribute NOTEQUAL
+    attribute NO_ERROR
+    attribute ONE
+    attribute ONE_MINUS_CONSTANT_ALPHA
+    attribute ONE_MINUS_CONSTANT_COLOR
+    attribute ONE_MINUS_DST_ALPHA
+    attribute ONE_MINUS_DST_COLOR
+    attribute ONE_MINUS_SRC_ALPHA
+    attribute ONE_MINUS_SRC_COLOR
+    attribute OUT_OF_MEMORY
+    attribute PACK_ALIGNMENT
+    attribute POINTS
+    attribute POLYGON_OFFSET_FACTOR
+    attribute POLYGON_OFFSET_FILL
+    attribute POLYGON_OFFSET_UNITS
+    attribute RED_BITS
+    attribute RENDERBUFFER
+    attribute RENDERBUFFER_ALPHA_SIZE
+    attribute RENDERBUFFER_BINDING
+    attribute RENDERBUFFER_BLUE_SIZE
+    attribute RENDERBUFFER_DEPTH_SIZE
+    attribute RENDERBUFFER_GREEN_SIZE
+    attribute RENDERBUFFER_HEIGHT
+    attribute RENDERBUFFER_INTERNAL_FORMAT
+    attribute RENDERBUFFER_RED_SIZE
+    attribute RENDERBUFFER_STENCIL_SIZE
+    attribute RENDERBUFFER_WIDTH
+    attribute RENDERER
+    attribute REPEAT
+    attribute REPLACE
+    attribute RGB
+    attribute RGB565
+    attribute RGB5_A1
+    attribute RGBA
+    attribute RGBA4
+    attribute SAMPLER_2D
+    attribute SAMPLER_CUBE
+    attribute SAMPLES
+    attribute SAMPLE_ALPHA_TO_COVERAGE
+    attribute SAMPLE_BUFFERS
+    attribute SAMPLE_COVERAGE
+    attribute SAMPLE_COVERAGE_INVERT
+    attribute SAMPLE_COVERAGE_VALUE
+    attribute SCISSOR_BOX
+    attribute SCISSOR_TEST
+    attribute SHADER_TYPE
+    attribute SHADING_LANGUAGE_VERSION
+    attribute SHORT
+    attribute SRC_ALPHA
+    attribute SRC_ALPHA_SATURATE
+    attribute SRC_COLOR
+    attribute STATIC_DRAW
+    attribute STENCIL_ATTACHMENT
+    attribute STENCIL_BACK_FAIL
+    attribute STENCIL_BACK_FUNC
+    attribute STENCIL_BACK_PASS_DEPTH_FAIL
+    attribute STENCIL_BACK_PASS_DEPTH_PASS
+    attribute STENCIL_BACK_REF
+    attribute STENCIL_BACK_VALUE_MASK
+    attribute STENCIL_BACK_WRITEMASK
+    attribute STENCIL_BITS
+    attribute STENCIL_BUFFER_BIT
+    attribute STENCIL_CLEAR_VALUE
+    attribute STENCIL_FAIL
+    attribute STENCIL_FUNC
+    attribute STENCIL_INDEX8
+    attribute STENCIL_PASS_DEPTH_FAIL
+    attribute STENCIL_PASS_DEPTH_PASS
+    attribute STENCIL_REF
+    attribute STENCIL_TEST
+    attribute STENCIL_VALUE_MASK
+    attribute STENCIL_WRITEMASK
+    attribute STREAM_DRAW
+    attribute SUBPIXEL_BITS
+    attribute TEXTURE
+    attribute TEXTURE0
+    attribute TEXTURE1
+    attribute TEXTURE10
+    attribute TEXTURE11
+    attribute TEXTURE12
+    attribute TEXTURE13
+    attribute TEXTURE14
+    attribute TEXTURE15
+    attribute TEXTURE16
+    attribute TEXTURE17
+    attribute TEXTURE18
+    attribute TEXTURE19
+    attribute TEXTURE2
+    attribute TEXTURE20
+    attribute TEXTURE21
+    attribute TEXTURE22
+    attribute TEXTURE23
+    attribute TEXTURE24
+    attribute TEXTURE25
+    attribute TEXTURE26
+    attribute TEXTURE27
+    attribute TEXTURE28
+    attribute TEXTURE29
+    attribute TEXTURE3
+    attribute TEXTURE30
+    attribute TEXTURE31
+    attribute TEXTURE4
+    attribute TEXTURE5
+    attribute TEXTURE6
+    attribute TEXTURE7
+    attribute TEXTURE8
+    attribute TEXTURE9
+    attribute TEXTURE_2D
+    attribute TEXTURE_BINDING_2D
+    attribute TEXTURE_BINDING_CUBE_MAP
+    attribute TEXTURE_CUBE_MAP
+    attribute TEXTURE_CUBE_MAP_NEGATIVE_X
+    attribute TEXTURE_CUBE_MAP_NEGATIVE_Y
+    attribute TEXTURE_CUBE_MAP_NEGATIVE_Z
+    attribute TEXTURE_CUBE_MAP_POSITIVE_X
+    attribute TEXTURE_CUBE_MAP_POSITIVE_Y
+    attribute TEXTURE_CUBE_MAP_POSITIVE_Z
+    attribute TEXTURE_MAG_FILTER
+    attribute TEXTURE_MIN_FILTER
+    attribute TEXTURE_WRAP_S
+    attribute TEXTURE_WRAP_T
+    attribute TRIANGLES
+    attribute TRIANGLE_FAN
+    attribute TRIANGLE_STRIP
+    attribute UNPACK_ALIGNMENT
+    attribute UNPACK_COLORSPACE_CONVERSION_WEBGL
+    attribute UNPACK_FLIP_Y_WEBGL
+    attribute UNPACK_PREMULTIPLY_ALPHA_WEBGL
+    attribute UNSIGNED_BYTE
+    attribute UNSIGNED_INT
+    attribute UNSIGNED_SHORT
+    attribute UNSIGNED_SHORT_4_4_4_4
+    attribute UNSIGNED_SHORT_5_5_5_1
+    attribute UNSIGNED_SHORT_5_6_5
+    attribute VALIDATE_STATUS
+    attribute VENDOR
+    attribute VERSION
+    attribute VERTEX_ATTRIB_ARRAY_BUFFER_BINDING
+    attribute VERTEX_ATTRIB_ARRAY_ENABLED
+    attribute VERTEX_ATTRIB_ARRAY_NORMALIZED
+    attribute VERTEX_ATTRIB_ARRAY_POINTER
+    attribute VERTEX_ATTRIB_ARRAY_SIZE
+    attribute VERTEX_ATTRIB_ARRAY_STRIDE
+    attribute VERTEX_ATTRIB_ARRAY_TYPE
+    attribute VERTEX_SHADER
+    attribute VIEWPORT
+    attribute ZERO
+    getter canvas
+    getter drawingBufferHeight
+    getter drawingBufferWidth
+    method activeTexture
+    method attachShader
+    method bindAttribLocation
+    method bindBuffer
+    method bindFramebuffer
+    method bindRenderbuffer
+    method bindTexture
+    method blendColor
+    method blendEquation
+    method blendEquationSeparate
+    method blendFunc
+    method blendFuncSeparate
+    method bufferData
+    method bufferSubData
+    method checkFramebufferStatus
+    method clear
+    method clearColor
+    method clearDepth
+    method clearStencil
+    method colorMask
+    method commit
+    method compileShader
+    method compressedTexImage2D
+    method compressedTexSubImage2D
+    method constructor
+    method copyTexImage2D
+    method copyTexSubImage2D
+    method createBuffer
+    method createFramebuffer
+    method createProgram
+    method createRenderbuffer
+    method createShader
+    method createTexture
+    method cullFace
+    method deleteBuffer
+    method deleteFramebuffer
+    method deleteProgram
+    method deleteRenderbuffer
+    method deleteShader
+    method deleteTexture
+    method depthFunc
+    method depthMask
+    method depthRange
+    method detachShader
+    method disable
+    method disableVertexAttribArray
+    method drawArrays
+    method drawElements
+    method enable
+    method enableVertexAttribArray
+    method finish
+    method flush
+    method framebufferRenderbuffer
+    method framebufferTexture2D
+    method frontFace
+    method generateMipmap
+    method getActiveAttrib
+    method getActiveUniform
+    method getAttachedShaders
+    method getAttribLocation
+    method getBufferParameter
+    method getContextAttributes
+    method getError
+    method getExtension
+    method getFramebufferAttachmentParameter
+    method getParameter
+    method getProgramInfoLog
+    method getProgramParameter
+    method getRenderbufferParameter
+    method getShaderInfoLog
+    method getShaderParameter
+    method getShaderPrecisionFormat
+    method getShaderSource
+    method getSupportedExtensions
+    method getTexParameter
+    method getUniform
+    method getUniformLocation
+    method getVertexAttrib
+    method getVertexAttribOffset
+    method hint
+    method isBuffer
+    method isContextLost
+    method isEnabled
+    method isFramebuffer
+    method isProgram
+    method isRenderbuffer
+    method isShader
+    method isTexture
+    method lineWidth
+    method linkProgram
+    method makeXRCompatible
+    method pixelStorei
+    method polygonOffset
+    method readPixels
+    method renderbufferStorage
+    method sampleCoverage
+    method scissor
+    method shaderSource
+    method stencilFunc
+    method stencilFuncSeparate
+    method stencilMask
+    method stencilMaskSeparate
+    method stencilOp
+    method stencilOpSeparate
+    method texImage2D
+    method texParameterf
+    method texParameteri
+    method texSubImage2D
+    method uniform1f
+    method uniform1fv
+    method uniform1i
+    method uniform1iv
+    method uniform2f
+    method uniform2fv
+    method uniform2i
+    method uniform2iv
+    method uniform3f
+    method uniform3fv
+    method uniform3i
+    method uniform3iv
+    method uniform4f
+    method uniform4fv
+    method uniform4i
+    method uniform4iv
+    method uniformMatrix2fv
+    method uniformMatrix3fv
+    method uniformMatrix4fv
+    method useProgram
+    method validateProgram
+    method vertexAttrib1f
+    method vertexAttrib1fv
+    method vertexAttrib2f
+    method vertexAttrib2fv
+    method vertexAttrib3f
+    method vertexAttrib3fv
+    method vertexAttrib4f
+    method vertexAttrib4fv
+    method vertexAttribPointer
+    method viewport
+interface WebGLSampler
+    attribute @@toStringTag
+    method constructor
+interface WebGLShader
+    attribute @@toStringTag
+    method constructor
+interface WebGLShaderPrecisionFormat
+    attribute @@toStringTag
+    getter precision
+    getter rangeMax
+    getter rangeMin
+    method constructor
+interface WebGLSync
+    attribute @@toStringTag
+    method constructor
+interface WebGLTexture
+    attribute @@toStringTag
+    method constructor
+interface WebGLTransformFeedback
+    attribute @@toStringTag
+    method constructor
+interface WebGLUniformLocation
+    attribute @@toStringTag
+    method constructor
+interface WebGLVertexArrayObject
+    attribute @@toStringTag
+    method constructor
+interface WebGLVideoFrameMetadata
+    attribute @@toStringTag
+    getter captureTime
+    getter elapsedProcessingTime
+    getter expectedPresentationTime
+    getter height
+    getter presentationTime
+    getter presentationTimestamp
+    getter presentedFrames
+    getter rtpTimestamp
+    getter width
+    method constructor
+interface WebKitCSSMatrix : DOMMatrixReadOnly
+    attribute @@toStringTag
+    getter a
+    getter b
+    getter c
+    getter d
+    getter e
+    getter f
+    getter m11
+    getter m12
+    getter m13
+    getter m14
+    getter m21
+    getter m22
+    getter m23
+    getter m24
+    getter m31
+    getter m32
+    getter m33
+    getter m34
+    getter m41
+    getter m42
+    getter m43
+    getter m44
+    method constructor
+    method invertSelf
+    method multiplySelf
+    method preMultiplySelf
+    method rotateAxisAngleSelf
+    method rotateFromVectorSelf
+    method rotateSelf
+    method scale3dSelf
+    method scaleSelf
+    method setMatrixValue
+    method skewXSelf
+    method skewYSelf
+    method translateSelf
+    setter a
+    setter b
+    setter c
+    setter d
+    setter e
+    setter f
+    setter m11
+    setter m12
+    setter m13
+    setter m14
+    setter m21
+    setter m22
+    setter m23
+    setter m24
+    setter m31
+    setter m32
+    setter m33
+    setter m34
+    setter m41
+    setter m42
+    setter m43
+    setter m44
+interface WebKitMutationObserver
+    attribute @@toStringTag
+    method constructor
+    method disconnect
+    method observe
+    method takeRecords
+interface WebSocket : EventTarget
+    attribute @@toStringTag
+    attribute CLOSED
+    attribute CLOSING
+    attribute CONNECTING
+    attribute OPEN
+    getter binaryType
+    getter bufferedAmount
+    getter extensions
+    getter onclose
+    getter onerror
+    getter onmessage
+    getter onopen
+    getter protocol
+    getter readyState
+    getter url
+    method close
+    method constructor
+    method send
+    setter binaryType
+    setter onclose
+    setter onerror
+    setter onmessage
+    setter onopen
+interface WebSocketStream
+    attribute @@toStringTag
+    getter closed
+    getter connection
+    getter url
+    method close
+    method constructor
+interface WheelEvent : MouseEvent
+    attribute @@toStringTag
+    attribute DOM_DELTA_LINE
+    attribute DOM_DELTA_PAGE
+    attribute DOM_DELTA_PIXEL
+    getter deltaMode
+    getter deltaX
+    getter deltaY
+    getter deltaZ
+    getter wheelDelta
+    getter wheelDeltaX
+    getter wheelDeltaY
+    method constructor
+interface Window : EventTarget
+    attribute @@toStringTag
+    attribute PERSISTENT
+    attribute TEMPORARY
+    method constructor
+interface Worker : EventTarget
+    attribute @@toStringTag
+    getter onerror
+    getter onmessage
+    method constructor
+    method postMessage
+    method terminate
+    setter onerror
+    setter onmessage
+interface Worklet
+    attribute @@toStringTag
+    method addModule
+    method constructor
+interface WorkletAnimation
+    attribute @@toStringTag
+    getter animatorName
+    getter currentTime
+    getter effect
+    getter playState
+    getter playbackRate
+    getter startTime
+    getter timeline
+    method cancel
+    method constructor
+    method pause
+    method play
+    setter playbackRate
+interface WritableStream
+    attribute @@toStringTag
+    getter locked
+    method abort
+    method constructor
+    method getWriter
+interface WritableStreamDefaultWriter
+    attribute @@toStringTag
+    getter closed
+    getter desiredSize
+    getter ready
+    method abort
+    method close
+    method constructor
+    method releaseLock
+    method write
+interface XMLDocument : Document
+    attribute @@toStringTag
+    method constructor
+interface XMLHttpRequest : XMLHttpRequestEventTarget
+    attribute @@toStringTag
+    attribute DONE
+    attribute HEADERS_RECEIVED
+    attribute LOADING
+    attribute OPENED
+    attribute UNSENT
+    getter onreadystatechange
+    getter readyState
+    getter response
+    getter responseText
+    getter responseType
+    getter responseURL
+    getter responseXML
+    getter status
+    getter statusText
+    getter timeout
+    getter upload
+    getter withCredentials
+    method abort
+    method constructor
+    method getAllResponseHeaders
+    method getResponseHeader
+    method open
+    method overrideMimeType
+    method send
+    method setRequestHeader
+    setter onreadystatechange
+    setter responseType
+    setter timeout
+    setter withCredentials
+interface XMLHttpRequestEventTarget : EventTarget
+    attribute @@toStringTag
+    getter onabort
+    getter onerror
+    getter onload
+    getter onloadend
+    getter onloadstart
+    getter onprogress
+    getter ontimeout
+    method constructor
+    setter onabort
+    setter onerror
+    setter onload
+    setter onloadend
+    setter onloadstart
+    setter onprogress
+    setter ontimeout
+interface XMLHttpRequestUpload : XMLHttpRequestEventTarget
+    attribute @@toStringTag
+    method constructor
+interface XMLSerializer
+    attribute @@toStringTag
+    method constructor
+    method serializeToString
+interface XPathEvaluator
+    attribute @@toStringTag
+    method constructor
+    method createExpression
+    method createNSResolver
+    method evaluate
+interface XPathExpression
+    attribute @@toStringTag
+    method constructor
+    method evaluate
+interface XPathResult
+    attribute @@toStringTag
+    attribute ANY_TYPE
+    attribute ANY_UNORDERED_NODE_TYPE
+    attribute BOOLEAN_TYPE
+    attribute FIRST_ORDERED_NODE_TYPE
+    attribute NUMBER_TYPE
+    attribute ORDERED_NODE_ITERATOR_TYPE
+    attribute ORDERED_NODE_SNAPSHOT_TYPE
+    attribute STRING_TYPE
+    attribute UNORDERED_NODE_ITERATOR_TYPE
+    attribute UNORDERED_NODE_SNAPSHOT_TYPE
+    getter booleanValue
+    getter invalidIteratorState
+    getter numberValue
+    getter resultType
+    getter singleNodeValue
+    getter snapshotLength
+    getter stringValue
+    method constructor
+    method iterateNext
+    method snapshotItem
+interface XR : EventTarget
+    attribute @@toStringTag
+    getter ondevicechange
+    method constructor
+    method isSessionSupported
+    method requestSession
+    method supportsSession
+    setter ondevicechange
+interface XRBoundedReferenceSpace : XRReferenceSpace
+    attribute @@toStringTag
+    getter boundsGeometry
+    method constructor
+interface XRFrame
+    attribute @@toStringTag
+    getter session
+    method constructor
+    method getHitTestResults
+    method getPose
+    method getViewerPose
+interface XRHitResult
+    attribute @@toStringTag
+    getter hitMatrix
+    method constructor
+interface XRHitTestResult
+    attribute @@toStringTag
+    method constructor
+    method getPose
+interface XRHitTestSource
+    attribute @@toStringTag
+    method constructor
+interface XRInputSource
+    attribute @@toStringTag
+    getter gamepad
+    getter gripSpace
+    getter handedness
+    getter profiles
+    getter targetRayMode
+    getter targetRaySpace
+    method constructor
+interface XRInputSourceArray
+    attribute @@toStringTag
+    getter length
+    method @@iterator
+    method constructor
+    method entries
+    method forEach
+    method keys
+    method values
+interface XRInputSourceEvent : Event
+    attribute @@toStringTag
+    getter frame
+    getter inputSource
+    method constructor
+interface XRInputSourcesChangeEvent : Event
+    attribute @@toStringTag
+    getter added
+    getter removed
+    getter session
+    method constructor
+interface XRPose
+    attribute @@toStringTag
+    getter emulatedPosition
+    getter transform
+    method constructor
+interface XRRay
+    attribute @@toStringTag
+    getter direction
+    getter matrix
+    getter origin
+    method constructor
+interface XRReferenceSpace : XRSpace
+    attribute @@toStringTag
+    getter onreset
+    method constructor
+    method getOffsetReferenceSpace
+    setter onreset
+interface XRReferenceSpaceEvent : Event
+    attribute @@toStringTag
+    getter referenceSpace
+    getter transform
+    method constructor
+interface XRRenderState
+    attribute @@toStringTag
+    getter baseLayer
+    getter depthFar
+    getter depthNear
+    getter inlineVerticalFieldOfView
+    method constructor
+interface XRRigidTransform
+    attribute @@toStringTag
+    getter inverse
+    getter matrix
+    getter orientation
+    getter position
+    method constructor
+interface XRSession : EventTarget
+    attribute @@toStringTag
+    getter environmentBlendMode
+    getter inputSources
+    getter onend
+    getter oninputsourceschange
+    getter onselect
+    getter onselectend
+    getter onselectstart
+    getter onvisibilitychange
+    getter renderState
+    getter visibilityState
+    method cancelAnimationFrame
+    method constructor
+    method end
+    method requestAnimationFrame
+    method requestHitTest
+    method requestHitTestSource
+    method requestReferenceSpace
+    method updateRenderState
+    setter onend
+    setter oninputsourceschange
+    setter onselect
+    setter onselectend
+    setter onselectstart
+    setter onvisibilitychange
+interface XRSessionEvent : Event
+    attribute @@toStringTag
+    getter session
+    method constructor
+interface XRSpace : EventTarget
+    attribute @@toStringTag
+    method constructor
+interface XRView
+    attribute @@toStringTag
+    getter eye
+    getter projectionMatrix
+    getter transform
+    method constructor
+interface XRViewerPose : XRPose
+    attribute @@toStringTag
+    getter views
+    method constructor
+interface XRViewport
+    attribute @@toStringTag
+    getter height
+    getter width
+    getter x
+    getter y
+    method constructor
+interface XRWebGLLayer
+    static method getNativeFramebufferScaleFactor
+    attribute @@toStringTag
+    getter antialias
+    getter framebuffer
+    getter framebufferHeight
+    getter framebufferWidth
+    getter ignoreDepthValues
+    method constructor
+    method getViewport
+interface XSLTProcessor
+    attribute @@toStringTag
+    method clearParameters
+    method constructor
+    method getParameter
+    method importStylesheet
+    method removeParameter
+    method reset
+    method setParameter
+    method transformToDocument
+    method transformToFragment
+interface webkitMediaStream : EventTarget
+    attribute @@toStringTag
+    getter active
+    getter id
+    getter onactive
+    getter onaddtrack
+    getter oninactive
+    getter onremovetrack
+    method addTrack
+    method clone
+    method constructor
+    method getAudioTracks
+    method getTrackById
+    method getTracks
+    method getVideoTracks
+    method removeTrack
+    setter onactive
+    setter onaddtrack
+    setter oninactive
+    setter onremovetrack
+interface webkitRTCPeerConnection : EventTarget
+    static method generateCertificate
+    attribute @@toStringTag
+    getter connectionState
+    getter currentLocalDescription
+    getter currentRemoteDescription
+    getter iceConnectionState
+    getter iceGatheringState
+    getter localDescription
+    getter onaddstream
+    getter onconnectionstatechange
+    getter ondatachannel
+    getter onicecandidate
+    getter onicecandidateerror
+    getter oniceconnectionstatechange
+    getter onicegatheringstatechange
+    getter onnegotiationneeded
+    getter onremovestream
+    getter onsignalingstatechange
+    getter ontrack
+    getter pendingLocalDescription
+    getter pendingRemoteDescription
+    getter remoteDescription
+    getter sctp
+    getter signalingState
+    method addIceCandidate
+    method addStream
+    method addTrack
+    method addTransceiver
+    method close
+    method constructor
+    method createAnswer
+    method createDTMFSender
+    method createDataChannel
+    method createOffer
+    method getConfiguration
+    method getLocalStreams
+    method getReceivers
+    method getRemoteStreams
+    method getSenders
+    method getStats
+    method getTransceivers
+    method removeStream
+    method removeTrack
+    method restartIce
+    method setConfiguration
+    method setLocalDescription
+    method setRemoteDescription
+    setter onaddstream
+    setter onconnectionstatechange
+    setter ondatachannel
+    setter onicecandidate
+    setter onicecandidateerror
+    setter oniceconnectionstatechange
+    setter onicegatheringstatechange
+    setter onnegotiationneeded
+    setter onremovestream
+    setter onsignalingstatechange
+    setter ontrack
+interface webkitSpeechGrammar
+    attribute @@toStringTag
+    getter src
+    getter weight
+    method constructor
+    setter src
+    setter weight
+interface webkitSpeechGrammarList
+    attribute @@toStringTag
+    getter length
+    method @@iterator
+    method addFromString
+    method addFromUri
+    method constructor
+    method item
+interface webkitSpeechRecognition : EventTarget
+    attribute @@toStringTag
+    getter continuous
+    getter grammars
+    getter interimResults
+    getter lang
+    getter maxAlternatives
+    getter onaudioend
+    getter onaudiostart
+    getter onend
+    getter onerror
+    getter onnomatch
+    getter onresult
+    getter onsoundend
+    getter onsoundstart
+    getter onspeechend
+    getter onspeechstart
+    getter onstart
+    method abort
+    method constructor
+    method start
+    method stop
+    setter continuous
+    setter grammars
+    setter interimResults
+    setter lang
+    setter maxAlternatives
+    setter onaudioend
+    setter onaudiostart
+    setter onend
+    setter onerror
+    setter onnomatch
+    setter onresult
+    setter onsoundend
+    setter onsoundstart
+    setter onspeechend
+    setter onspeechstart
+    setter onstart
+interface webkitSpeechRecognitionError : Event
+    attribute @@toStringTag
+    getter error
+    getter message
+    method constructor
+interface webkitSpeechRecognitionEvent : Event
+    attribute @@toStringTag
+    getter emma
+    getter interpretation
+    getter resultIndex
+    getter results
+    method constructor
+interface webkitURL
+    static method createObjectURL
+    static method revokeObjectURL
+    attribute @@toStringTag
+    getter hash
+    getter host
+    getter hostname
+    getter href
+    getter origin
+    getter password
+    getter pathname
+    getter port
+    getter protocol
+    getter search
+    getter searchParams
+    getter username
+    method constructor
+    method toJSON
+    method toString
+    setter hash
+    setter host
+    setter hostname
+    setter href
+    setter password
+    setter pathname
+    setter port
+    setter protocol
+    setter search
+    setter username
+[GLOBAL OBJECT]
+    attribute GCController
+    attribute accessibilityController
+    attribute chrome
+    attribute closed
+    attribute console
+    attribute eventSender
+    attribute frames
+    attribute gamepadController
+    attribute globalThis
+    attribute internals
+    attribute length
+    attribute location
+    attribute opener
+    attribute parent
+    attribute propertyNamesInGlobal
+    attribute self
+    attribute testRunner
+    attribute textInputController
+    attribute top
+    attribute window
+    getter applicationCache
+    getter caches
+    getter clientInformation
+    getter cookieStore
+    getter crypto
+    getter customElements
+    getter defaultStatus
+    getter defaultstatus
+    getter devicePixelRatio
+    getter document
+    getter event
+    getter external
+    getter frameElement
+    getter history
+    getter indexedDB
+    getter innerHeight
+    getter innerWidth
+    getter isSecureContext
+    getter localStorage
+    getter locationbar
+    getter menubar
+    getter name
+    getter navigator
+    getter offscreenBuffering
+    getter onabort
+    getter onactivateinvisible
+    getter onafterprint
+    getter onanimationend
+    getter onanimationiteration
+    getter onanimationstart
+    getter onappinstalled
+    getter onauxclick
+    getter onbeforeinstallprompt
+    getter onbeforeprint
+    getter onbeforeunload
+    getter onblur
+    getter oncancel
+    getter oncanplay
+    getter oncanplaythrough
+    getter onchange
+    getter onclick
+    getter onclose
+    getter oncontextmenu
+    getter oncuechange
+    getter ondblclick
+    getter ondevicemotion
+    getter ondeviceorientation
+    getter ondeviceorientationabsolute
+    getter ondrag
+    getter ondragend
+    getter ondragenter
+    getter ondragleave
+    getter ondragover
+    getter ondragstart
+    getter ondrop
+    getter ondurationchange
+    getter onemptied
+    getter onended
+    getter onerror
+    getter onfocus
+    getter onformdata
+    getter ongotpointercapture
+    getter onhashchange
+    getter oninput
+    getter oninvalid
+    getter onkeydown
+    getter onkeypress
+    getter onkeyup
+    getter onlanguagechange
+    getter onload
+    getter onloadeddata
+    getter onloadedmetadata
+    getter onloadstart
+    getter onlostpointercapture
+    getter onmessage
+    getter onmessageerror
+    getter onmousedown
+    getter onmouseenter
+    getter onmouseleave
+    getter onmousemove
+    getter onmouseout
+    getter onmouseover
+    getter onmouseup
+    getter onmousewheel
+    getter onoffline
+    getter ononline
+    getter onoverscroll
+    getter onpagehide
+    getter onpageshow
+    getter onpause
+    getter onplay
+    getter onplaying
+    getter onpointercancel
+    getter onpointerdown
+    getter onpointerenter
+    getter onpointerleave
+    getter onpointermove
+    getter onpointerout
+    getter onpointerover
+    getter onpointerrawupdate
+    getter onpointerup
+    getter onpopstate
+    getter onportalactivate
+    getter onprogress
+    getter onratechange
+    getter onrejectionhandled
+    getter onrendersubtreeactivation
+    getter onreset
+    getter onresize
+    getter onscroll
+    getter onscrollend
+    getter onsearch
+    getter onseeked
+    getter onseeking
+    getter onselect
+    getter onselectionchange
+    getter onselectstart
+    getter onstalled
+    getter onstorage
+    getter onsubmit
+    getter onsuspend
+    getter ontimeupdate
+    getter ontoggle
+    getter ontouchcancel
+    getter ontouchend
+    getter ontouchmove
+    getter ontouchstart
+    getter ontransitionend
+    getter onunhandledrejection
+    getter onunload
+    getter onvolumechange
+    getter onwaiting
+    getter onwebkitanimationend
+    getter onwebkitanimationiteration
+    getter onwebkitanimationstart
+    getter onwebkittransitionend
+    getter onwheel
+    getter origin
+    getter outerHeight
+    getter outerWidth
+    getter pageXOffset
+    getter pageYOffset
+    getter performance
+    getter personalbar
+    getter portalHost
+    getter scheduler
+    getter screen
+    getter screenLeft
+    getter screenTop
+    getter screenX
+    getter screenY
+    getter scrollX
+    getter scrollY
+    getter scrollbars
+    getter sessionStorage
+    getter speechSynthesis
+    getter status
+    getter statusbar
+    getter styleMedia
+    getter toolbar
+    getter trustedTypes
+    getter visualViewport
+    getter webkitStorageInfo
+    method NodeFilter
+    method alert
+    method atob
+    method blur
+    method btoa
+    method cancelAnimationFrame
+    method cancelIdleCallback
+    method cancelPostAnimationFrame
+    method captureEvents
+    method chooseFileSystemEntries
+    method clearInterval
+    method clearTimeout
+    method close
+    method confirm
+    method createImageBitmap
+    method fetch
+    method find
+    method focus
+    method gc
+    method getComputedAccessibleNode
+    method getComputedStyle
+    method getSelection
+    method matchMedia
+    method moveBy
+    method moveTo
+    method open
+    method openDatabase
+    method postMessage
+    method print
+    method prompt
+    method queueMicrotask
+    method releaseEvents
+    method requestAnimationFrame
+    method requestIdleCallback
+    method requestPostAnimationFrame
+    method resizeBy
+    method resizeTo
+    method scroll
+    method scrollBy
+    method scrollTo
+    method setInterval
+    method setTimeout
+    method stop
+    method webkitCancelAnimationFrame
+    method webkitRequestAnimationFrame
+    method webkitRequestFileSystem
+    method webkitResolveLocalFileSystemURL
+    setter clientInformation
+    setter cookieStore
+    setter defaultStatus
+    setter defaultstatus
+    setter devicePixelRatio
+    setter event
+    setter external
+    setter innerHeight
+    setter innerWidth
+    setter locationbar
+    setter menubar
+    setter name
+    setter offscreenBuffering
+    setter onabort
+    setter onactivateinvisible
+    setter onafterprint
+    setter onanimationend
+    setter onanimationiteration
+    setter onanimationstart
+    setter onappinstalled
+    setter onauxclick
+    setter onbeforeinstallprompt
+    setter onbeforeprint
+    setter onbeforeunload
+    setter onblur
+    setter oncancel
+    setter oncanplay
+    setter oncanplaythrough
+    setter onchange
+    setter onclick
+    setter onclose
+    setter oncontextmenu
+    setter oncuechange
+    setter ondblclick
+    setter ondevicemotion
+    setter ondeviceorientation
+    setter ondeviceorientationabsolute
+    setter ondrag
+    setter ondragend
+    setter ondragenter
+    setter ondragleave
+    setter ondragover
+    setter ondragstart
+    setter ondrop
+    setter ondurationchange
+    setter onemptied
+    setter onended
+    setter onerror
+    setter onfocus
+    setter onformdata
+    setter ongotpointercapture
+    setter onhashchange
+    setter oninput
+    setter oninvalid
+    setter onkeydown
+    setter onkeypress
+    setter onkeyup
+    setter onlanguagechange
+    setter onload
+    setter onloadeddata
+    setter onloadedmetadata
+    setter onloadstart
+    setter onlostpointercapture
+    setter onmessage
+    setter onmessageerror
+    setter onmousedown
+    setter onmouseenter
+    setter onmouseleave
+    setter onmousemove
+    setter onmouseout
+    setter onmouseover
+    setter onmouseup
+    setter onmousewheel
+    setter onoffline
+    setter ononline
+    setter onoverscroll
+    setter onpagehide
+    setter onpageshow
+    setter onpause
+    setter onplay
+    setter onplaying
+    setter onpointercancel
+    setter onpointerdown
+    setter onpointerenter
+    setter onpointerleave
+    setter onpointermove
+    setter onpointerout
+    setter onpointerover
+    setter onpointerrawupdate
+    setter onpointerup
+    setter onpopstate
+    setter onportalactivate
+    setter onprogress
+    setter onratechange
+    setter onrejectionhandled
+    setter onrendersubtreeactivation
+    setter onreset
+    setter onresize
+    setter onscroll
+    setter onscrollend
+    setter onsearch
+    setter onseeked
+    setter onseeking
+    setter onselect
+    setter onselectionchange
+    setter onselectstart
+    setter onstalled
+    setter onstorage
+    setter onsubmit
+    setter onsuspend
+    setter ontimeupdate
+    setter ontoggle
+    setter ontouchcancel
+    setter ontouchend
+    setter ontouchmove
+    setter ontouchstart
+    setter ontransitionend
+    setter onunhandledrejection
+    setter onunload
+    setter onvolumechange
+    setter onwaiting
+    setter onwebkitanimationend
+    setter onwebkitanimationiteration
+    setter onwebkitanimationstart
+    setter onwebkittransitionend
+    setter onwheel
+    setter origin
+    setter outerHeight
+    setter outerWidth
+    setter pageXOffset
+    setter pageYOffset
+    setter performance
+    setter personalbar
+    setter scheduler
+    setter screen
+    setter screenLeft
+    setter screenTop
+    setter screenX
+    setter screenY
+    setter scrollX
+    setter scrollY
+    setter scrollbars
+    setter status
+    setter statusbar
+    setter toolbar
+    setter visualViewport
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/third_party/blink/web_tests/geolocation-api/resources/geolocation-mock.js b/third_party/blink/web_tests/geolocation-api/resources/geolocation-mock.js
index 4dd62ea..470c4b0 100644
--- a/third_party/blink/web_tests/geolocation-api/resources/geolocation-mock.js
+++ b/third_party/blink/web_tests/geolocation-api/resources/geolocation-mock.js
@@ -8,7 +8,7 @@
 class GeolocationMock {
   constructor() {
     this.geolocationServiceInterceptor_ = new MojoInterfaceInterceptor(
-        blink.mojom.GeolocationService.name);
+        blink.mojom.GeolocationService.name, "context", true);
     this.geolocationServiceInterceptor_.oninterfacerequest =
         e => this.connectGeolocationService_(e.handle);
     this.geolocationServiceInterceptor_.start();
diff --git a/third_party/blink/web_tests/paint/invalidation/background/background-clip-text-change-expected.html b/third_party/blink/web_tests/paint/invalidation/background/background-clip-text-change-expected.html
new file mode 100644
index 0000000..7539d0d
--- /dev/null
+++ b/third_party/blink/web_tests/paint/invalidation/background/background-clip-text-change-expected.html
@@ -0,0 +1,4 @@
+<!DOCTYPE html>
+<div style="background: linear-gradient(blue, green);
+            -webkit-background-clip: text;
+            -webkit-text-fill-color: transparent">New text</div>
diff --git a/third_party/blink/web_tests/paint/invalidation/background/background-clip-text-change.html b/third_party/blink/web_tests/paint/invalidation/background/background-clip-text-change.html
new file mode 100644
index 0000000..4227c6e
--- /dev/null
+++ b/third_party/blink/web_tests/paint/invalidation/background/background-clip-text-change.html
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<script src="../../../resources/run-after-layout-and-paint.js"></script>
+<script>
+onload = () => {
+  runAfterLayoutAndPaint(() => {
+    target.textContent = "New text"
+  }, true);
+}
+</script>
+<div style="background: linear-gradient(blue, green);
+            -webkit-background-clip: text;
+            -webkit-text-fill-color: transparent">
+  <div>
+    <div>
+      <div id="target">Old text</div>
+    </div>
+  </div>
+</div>
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/api/client/knowncontent/ContentMetadata.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/api/client/knowncontent/ContentMetadata.java
index 81ad6ce..4277b48e6 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/api/client/knowncontent/ContentMetadata.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/api/client/knowncontent/ContentMetadata.java
@@ -14,13 +14,13 @@
 
     private static final String TAG = "ContentMetadata";
 
-    private final String url;
-    private final String title;
-    private final long timePublished;
-    /*@Nullable*/ private final String imageUrl;
-    /*@Nullable*/ private final String publisher;
-    /*@Nullable*/ private final String faviconUrl;
-    /*@Nullable*/ private final String snippet;
+    private final String mUrl;
+    private final String mTitle;
+    private final long mTimePublished;
+    /*@Nullable*/ private final String mImageUrl;
+    /*@Nullable*/ private final String mPublisher;
+    /*@Nullable*/ private final String mFaviconUrl;
+    /*@Nullable*/ private final String mSnippet;
 
     /*@Nullable*/
     public static ContentMetadata maybeCreateContentMetadata(
@@ -53,33 +53,33 @@
             /*@Nullable*/ String publisher,
             /*@Nullable*/ String faviconUrl,
             /*@Nullable*/ String snippet) {
-        this.url = url;
-        this.title = title;
-        this.imageUrl = imageUrl;
-        this.publisher = publisher;
-        this.faviconUrl = faviconUrl;
-        this.snippet = snippet;
-        this.timePublished = timePublished;
+        this.mUrl = url;
+        this.mTitle = title;
+        this.mImageUrl = imageUrl;
+        this.mPublisher = publisher;
+        this.mFaviconUrl = faviconUrl;
+        this.mSnippet = snippet;
+        this.mTimePublished = timePublished;
     }
 
     public String getUrl() {
-        return url;
+        return mUrl;
     }
 
     /** Title for the content. */
     public String getTitle() {
-        return title;
+        return mTitle;
     }
 
     /*@Nullable*/
     public String getImageUrl() {
-        return imageUrl;
+        return mImageUrl;
     }
 
     /** {@link String} representation of the publisher. */
     /*@Nullable*/
     public String getPublisher() {
-        return publisher;
+        return mPublisher;
     }
 
     /**
@@ -87,17 +87,17 @@
      * UNKNOWN_TIME_PUBLISHED} if unknown.
      */
     public long getTimePublished() {
-        return timePublished;
+        return mTimePublished;
     }
 
     /*@Nullable*/
     public String getFaviconUrl() {
-        return faviconUrl;
+        return mFaviconUrl;
     }
 
     /** A {@link String} that can be displayed that is part of the content, typically the start. */
     /*@Nullable*/
     public String getSnippet() {
-        return snippet;
+        return mSnippet;
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/api/client/knowncontent/ContentRemoval.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/api/client/knowncontent/ContentRemoval.java
index fa72452a..35dde58 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/api/client/knowncontent/ContentRemoval.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/api/client/knowncontent/ContentRemoval.java
@@ -6,21 +6,21 @@
 
 /** Information on the removal of a piece of content. */
 public final class ContentRemoval {
-    private final String url;
-    private final boolean requestedByUser;
+    private final String mUrl;
+    private final boolean mRequestedByUser;
 
     public ContentRemoval(String url, boolean requestedByUser) {
-        this.url = url;
-        this.requestedByUser = requestedByUser;
+        this.mUrl = url;
+        this.mRequestedByUser = requestedByUser;
     }
 
     /** Url for removed content. */
     public String getUrl() {
-        return url;
+        return mUrl;
     }
 
     /** Whether the removal was performed through an action of the user. */
     public boolean isRequestedByUser() {
-        return requestedByUser;
+        return mRequestedByUser;
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/api/client/scope/ProcessScopeBuilder.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/api/client/scope/ProcessScopeBuilder.java
index 405eea6..3f71ef1 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/api/client/scope/ProcessScopeBuilder.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/api/client/scope/ProcessScopeBuilder.java
@@ -61,144 +61,147 @@
 /** Creates an instance of {@link ProcessScope} */
 public final class ProcessScopeBuilder {
     // Required fields.
-    private final Configuration configuration;
-    private final Executor sequencedExecutor;
-    private final BasicLoggingApi basicLoggingApi;
-    private final TooltipSupportedApi tooltipSupportedApi;
-    private final NetworkClient unwrappedNetworkClient;
-    private final SchedulerApi unwrappedSchedulerApi;
-    private final DebugBehavior debugBehavior;
-    private final Context context;
-    private final ApplicationInfo applicationInfo;
+    private final Configuration mConfiguration;
+    private final Executor mSequencedExecutor;
+    private final BasicLoggingApi mBasicLoggingApi;
+    private final TooltipSupportedApi mTooltipSupportedApi;
+    private final NetworkClient mUnwrappedNetworkClient;
+    private final SchedulerApi mUnwrappedSchedulerApi;
+    private final DebugBehavior mDebugBehavior;
+    private final Context mContext;
+    private final ApplicationInfo mApplicationInfo;
 
     // Optional fields - if they are not provided, we will use default implementations.
-    /*@MonotonicNonNull*/ private ProtoExtensionProvider protoExtensionProvider;
-    /*@MonotonicNonNull*/ private Clock clock;
+    /*@MonotonicNonNull*/ private ProtoExtensionProvider mProtoExtensionProvider;
+    /*@MonotonicNonNull*/ private Clock mClock;
 
     // Either contentStorage or rawContentStorage must be provided.
-    /*@MonotonicNonNull*/ ContentStorageDirect contentStorage;
-    /*@MonotonicNonNull*/ private ContentStorage rawContentStorage;
+    /*@MonotonicNonNull*/ ContentStorageDirect mContentStorage;
+    /*@MonotonicNonNull*/ private ContentStorage mRawContentStorage;
 
     // Either journalStorage or rawJournalStorage must be provided.
-    /*@MonotonicNonNull*/ JournalStorageDirect journalStorage;
-    /*@MonotonicNonNull*/ private JournalStorage rawJournalStorage;
+    /*@MonotonicNonNull*/ JournalStorageDirect mJournalStorage;
+    /*@MonotonicNonNull*/ private JournalStorage mRawJournalStorage;
 
     /** The APIs are all required to construct the scope. */
     public ProcessScopeBuilder(Configuration configuration, Executor sequencedExecutor,
             BasicLoggingApi basicLoggingApi, NetworkClient networkClient, SchedulerApi schedulerApi,
             DebugBehavior debugBehavior, Context context, ApplicationInfo applicationInfo,
             TooltipSupportedApi tooltipSupportedApi) {
-        this.configuration = configuration;
-        this.sequencedExecutor = sequencedExecutor;
-        this.basicLoggingApi = basicLoggingApi;
-        this.debugBehavior = debugBehavior;
-        this.context = context;
-        this.applicationInfo = applicationInfo;
-        this.unwrappedNetworkClient = networkClient;
-        this.unwrappedSchedulerApi = schedulerApi;
-        this.tooltipSupportedApi = tooltipSupportedApi;
+        this.mConfiguration = configuration;
+        this.mSequencedExecutor = sequencedExecutor;
+        this.mBasicLoggingApi = basicLoggingApi;
+        this.mDebugBehavior = debugBehavior;
+        this.mContext = context;
+        this.mApplicationInfo = applicationInfo;
+        this.mUnwrappedNetworkClient = networkClient;
+        this.mUnwrappedSchedulerApi = schedulerApi;
+        this.mTooltipSupportedApi = tooltipSupportedApi;
     }
 
     public ProcessScopeBuilder setProtoExtensionProvider(
             ProtoExtensionProvider protoExtensionProvider) {
-        this.protoExtensionProvider = protoExtensionProvider;
+        this.mProtoExtensionProvider = protoExtensionProvider;
         return this;
     }
 
     public ProcessScopeBuilder setContentStorage(ContentStorage contentStorage) {
-        rawContentStorage = contentStorage;
+        mRawContentStorage = contentStorage;
         return this;
     }
 
     public ProcessScopeBuilder setContentStorageDirect(ContentStorageDirect contentStorage) {
-        this.contentStorage = contentStorage;
+        this.mContentStorage = contentStorage;
         return this;
     }
 
     public ProcessScopeBuilder setJournalStorage(JournalStorage journalStorage) {
-        rawJournalStorage = journalStorage;
+        mRawJournalStorage = journalStorage;
         return this;
     }
 
     public ProcessScopeBuilder setJournalStorageDirect(JournalStorageDirect journalStorage) {
-        this.journalStorage = journalStorage;
+        this.mJournalStorage = journalStorage;
         return this;
     }
 
     @VisibleForTesting
     ContentStorageDirect buildContentStorage(MainThreadRunner mainThreadRunner) {
-        if (contentStorage == null) {
+        if (mContentStorage == null) {
             boolean useDirect =
-                    configuration.getValueOrDefault(ConfigKey.USE_DIRECT_STORAGE, false);
-            if (useDirect && rawContentStorage != null
-                    && rawContentStorage instanceof ContentStorageDirect) {
-                contentStorage = (ContentStorageDirect) rawContentStorage;
-            } else if (rawContentStorage != null) {
-                contentStorage = new ContentStorageDirectImpl(rawContentStorage, mainThreadRunner);
+                    mConfiguration.getValueOrDefault(ConfigKey.USE_DIRECT_STORAGE, false);
+            if (useDirect && mRawContentStorage != null
+                    && mRawContentStorage instanceof ContentStorageDirect) {
+                mContentStorage = (ContentStorageDirect) mRawContentStorage;
+            } else if (mRawContentStorage != null) {
+                mContentStorage =
+                        new ContentStorageDirectImpl(mRawContentStorage, mainThreadRunner);
             } else {
                 throw new IllegalStateException(
                         "one of ContentStorage, ContentStorageDirect must be provided");
             }
         }
-        return contentStorage;
+        return mContentStorage;
     }
 
     @VisibleForTesting
     JournalStorageDirect buildJournalStorage(MainThreadRunner mainThreadRunner) {
-        if (journalStorage == null) {
+        if (mJournalStorage == null) {
             boolean useDirect =
-                    configuration.getValueOrDefault(ConfigKey.USE_DIRECT_STORAGE, false);
-            if (useDirect && rawJournalStorage != null
-                    && rawJournalStorage instanceof JournalStorageDirect) {
-                journalStorage = (JournalStorageDirect) rawJournalStorage;
-            } else if (rawJournalStorage != null) {
-                journalStorage = new JournalStorageDirectImpl(rawJournalStorage, mainThreadRunner);
+                    mConfiguration.getValueOrDefault(ConfigKey.USE_DIRECT_STORAGE, false);
+            if (useDirect && mRawJournalStorage != null
+                    && mRawJournalStorage instanceof JournalStorageDirect) {
+                mJournalStorage = (JournalStorageDirect) mRawJournalStorage;
+            } else if (mRawJournalStorage != null) {
+                mJournalStorage =
+                        new JournalStorageDirectImpl(mRawJournalStorage, mainThreadRunner);
             } else {
                 throw new IllegalStateException(
                         "one of JournalStorage, JournalStorageDirect must be provided");
             }
         }
-        return journalStorage;
+        return mJournalStorage;
     }
 
     public ProcessScope build() {
         MainThreadRunner mainThreadRunner = new MainThreadRunner();
-        contentStorage = buildContentStorage(mainThreadRunner);
-        journalStorage = buildJournalStorage(mainThreadRunner);
+        mContentStorage = buildContentStorage(mainThreadRunner);
+        mJournalStorage = buildJournalStorage(mainThreadRunner);
 
         ThreadUtils threadUtils = new ThreadUtils();
 
         boolean directHostCallEnabled =
-                configuration.getValueOrDefault(ConfigKey.USE_DIRECT_STORAGE, false);
+                mConfiguration.getValueOrDefault(ConfigKey.USE_DIRECT_STORAGE, false);
         NetworkClient networkClient;
         SchedulerApi schedulerApi;
-        if (unwrappedNetworkClient instanceof DirectHostSupported && directHostCallEnabled) {
-            networkClient = unwrappedNetworkClient;
+        if (mUnwrappedNetworkClient instanceof DirectHostSupported && directHostCallEnabled) {
+            networkClient = mUnwrappedNetworkClient;
         } else {
-            networkClient =
-                    new NetworkClientWrapper(unwrappedNetworkClient, threadUtils, mainThreadRunner);
+            networkClient = new NetworkClientWrapper(
+                    mUnwrappedNetworkClient, threadUtils, mainThreadRunner);
         }
-        if (unwrappedSchedulerApi instanceof DirectHostSupported && directHostCallEnabled) {
-            schedulerApi = unwrappedSchedulerApi;
+        if (mUnwrappedSchedulerApi instanceof DirectHostSupported && directHostCallEnabled) {
+            schedulerApi = mUnwrappedSchedulerApi;
         } else {
             schedulerApi =
-                    new SchedulerApiWrapper(unwrappedSchedulerApi, threadUtils, mainThreadRunner);
+                    new SchedulerApiWrapper(mUnwrappedSchedulerApi, threadUtils, mainThreadRunner);
         }
 
         // Build default component instances if necessary.
-        if (protoExtensionProvider == null) {
+        if (mProtoExtensionProvider == null) {
             // Return an empty list of extensions by default.
-            protoExtensionProvider = ArrayList::new;
+            mProtoExtensionProvider = ArrayList::new;
         }
-        FeedExtensionRegistry extensionRegistry = new FeedExtensionRegistry(protoExtensionProvider);
-        if (clock == null) {
-            clock = new SystemClockImpl();
+        FeedExtensionRegistry extensionRegistry =
+                new FeedExtensionRegistry(mProtoExtensionProvider);
+        if (mClock == null) {
+            mClock = new SystemClockImpl();
         }
         TimingUtils timingUtils = new TimingUtils();
         TaskQueue taskQueue =
-                new TaskQueue(basicLoggingApi, sequencedExecutor, mainThreadRunner, clock);
-        FeedStore store = new FeedStore(configuration, timingUtils, extensionRegistry,
-                contentStorage, journalStorage, threadUtils, taskQueue, clock, basicLoggingApi,
+                new TaskQueue(mBasicLoggingApi, mSequencedExecutor, mainThreadRunner, mClock);
+        FeedStore store = new FeedStore(mConfiguration, timingUtils, extensionRegistry,
+                mContentStorage, mJournalStorage, threadUtils, taskQueue, mClock, mBasicLoggingApi,
                 mainThreadRunner);
 
         FeedAppLifecycleListener lifecycleListener = new FeedAppLifecycleListener(threadUtils);
@@ -207,35 +210,35 @@
         ProtocolAdapter protocolAdapter = new FeedProtocolAdapter(
                 Collections.singletonList(new PietRequiredContentAdapter()), timingUtils);
         ActionReader actionReader =
-                new FeedActionReader(store, clock, protocolAdapter, taskQueue, configuration);
-        FeedRequestManager feedRequestManager = new FeedRequestManagerImpl(configuration,
+                new FeedActionReader(store, mClock, protocolAdapter, taskQueue, mConfiguration);
+        FeedRequestManager feedRequestManager = new FeedRequestManagerImpl(mConfiguration,
                 networkClient, protocolAdapter, extensionRegistry, schedulerApi, taskQueue,
-                timingUtils, threadUtils, actionReader, context, applicationInfo, mainThreadRunner,
-                basicLoggingApi, tooltipSupportedApi);
+                timingUtils, threadUtils, actionReader, mContext, mApplicationInfo,
+                mainThreadRunner, mBasicLoggingApi, mTooltipSupportedApi);
         ActionUploadRequestManager actionUploadRequestManager =
-                new FeedActionUploadRequestManager(configuration, networkClient, protocolAdapter,
-                        extensionRegistry, taskQueue, threadUtils, store, clock);
+                new FeedActionUploadRequestManager(mConfiguration, networkClient, protocolAdapter,
+                        extensionRegistry, taskQueue, threadUtils, store, mClock);
         FeedSessionManagerFactory fsmFactory = new FeedSessionManagerFactory(taskQueue, store,
                 timingUtils, threadUtils, protocolAdapter, feedRequestManager,
-                actionUploadRequestManager, schedulerApi, configuration, clock, lifecycleListener,
-                mainThreadRunner, basicLoggingApi);
+                actionUploadRequestManager, schedulerApi, mConfiguration, mClock, lifecycleListener,
+                mainThreadRunner, mBasicLoggingApi);
         FeedSessionManager feedSessionManager = fsmFactory.create();
         RequestManagerImpl clientRequestManager =
                 new RequestManagerImpl(feedRequestManager, feedSessionManager);
         ActionManager actionManager = new FeedActionManagerImpl(
-                feedSessionManager, store, threadUtils, taskQueue, mainThreadRunner, clock);
+                feedSessionManager, store, threadUtils, taskQueue, mainThreadRunner, mClock);
 
         FeedKnownContent feedKnownContent =
                 new FeedKnownContentImpl(feedSessionManager, mainThreadRunner, threadUtils);
 
         ClearAllListener clearAllListener = new ClearAllListener(
                 taskQueue, feedSessionManager, store, threadUtils, lifecycleListener);
-        return new FeedProcessScope(basicLoggingApi, networkClient,
+        return new FeedProcessScope(mBasicLoggingApi, networkClient,
                 Validators.checkNotNull(protocolAdapter),
                 Validators.checkNotNull(clientRequestManager),
                 Validators.checkNotNull(feedSessionManager), store, timingUtils, threadUtils,
-                taskQueue, mainThreadRunner, lifecycleListener, clock, debugBehavior, actionManager,
-                configuration, feedKnownContent, extensionRegistry, clearAllListener,
-                tooltipSupportedApi, applicationInfo);
+                taskQueue, mainThreadRunner, lifecycleListener, mClock, mDebugBehavior,
+                actionManager, mConfiguration, feedKnownContent, extensionRegistry,
+                clearAllListener, mTooltipSupportedApi, mApplicationInfo);
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/api/client/scope/StreamScopeBuilder.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/api/client/scope/StreamScopeBuilder.java
index 82fd4174..067d8d4 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/api/client/scope/StreamScopeBuilder.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/api/client/scope/StreamScopeBuilder.java
@@ -44,38 +44,38 @@
 /** A builder that creates a {@link StreamScope}. */
 public final class StreamScopeBuilder {
     // Required external dependencies.
-    private final Context context;
-    private final ActionApi actionApi;
-    private final ImageLoaderApi imageLoaderApi;
+    private final Context mContext;
+    private final ActionApi mActionApi;
+    private final ImageLoaderApi mImageLoaderApi;
 
-    private final ProtocolAdapter protocolAdapter;
-    private final FeedSessionManager feedSessionManager;
-    private final ThreadUtils threadUtils;
-    private final TimingUtils timingUtils;
-    private final TaskQueue taskQueue;
-    private final MainThreadRunner mainThreadRunner;
-    private final Clock clock;
-    private final ActionManager actionManager;
-    private final CardConfiguration cardConfiguration;
-    private final StreamConfiguration streamConfiguration;
-    private final DebugBehavior debugBehavior;
-    private final Configuration config;
-    private final SnackbarApi snackbarApi;
-    private final BasicLoggingApi basicLoggingApi;
-    private final OfflineIndicatorApi offlineIndicatorApi;
-    private final FeedKnownContent feedKnownContent;
-    private final TooltipApi tooltipApi;
-    private final ApplicationInfo applicationInfo;
-    private final FeedExtensionRegistry feedExtensionRegistry;
-    private boolean isBackgroundDark;
+    private final ProtocolAdapter mProtocolAdapter;
+    private final FeedSessionManager mFeedSessionManager;
+    private final ThreadUtils mThreadUtils;
+    private final TimingUtils mTimingUtils;
+    private final TaskQueue mTaskQueue;
+    private final MainThreadRunner mMainThreadRunner;
+    private final Clock mClock;
+    private final ActionManager mActionManager;
+    private final CardConfiguration mCardConfiguration;
+    private final StreamConfiguration mStreamConfiguration;
+    private final DebugBehavior mDebugBehavior;
+    private final Configuration mConfig;
+    private final SnackbarApi mSnackbarApi;
+    private final BasicLoggingApi mBasicLoggingApi;
+    private final OfflineIndicatorApi mOfflineIndicatorApi;
+    private final FeedKnownContent mFeedKnownContent;
+    private final TooltipApi mTooltipApi;
+    private final ApplicationInfo mApplicationInfo;
+    private final FeedExtensionRegistry mFeedExtensionRegistry;
+    private boolean mIsBackgroundDark;
 
     // Optional internal components to override the default implementations.
-    /*@MonotonicNonNull*/ private ActionParserFactory actionParserFactory;
-    /*@MonotonicNonNull*/ private ModelProviderFactory modelProviderFactory;
-    /*@MonotonicNonNull*/ private Stream stream;
-    /*@MonotonicNonNull*/ private StreamFactory streamFactory;
-    /*@MonotonicNonNull*/ private CustomElementProvider customElementProvider;
-    /*@MonotonicNonNull*/ private HostBindingProvider hostBindingProvider;
+    /*@MonotonicNonNull*/ private ActionParserFactory mActionParserFactory;
+    /*@MonotonicNonNull*/ private ModelProviderFactory mModelProviderFactory;
+    /*@MonotonicNonNull*/ private Stream mStream;
+    /*@MonotonicNonNull*/ private StreamFactory mStreamFactory;
+    /*@MonotonicNonNull*/ private CustomElementProvider mCustomElementProvider;
+    /*@MonotonicNonNull*/ private HostBindingProvider mHostBindingProvider;
 
     /** Construct this builder using {@link ProcessScope#createStreamScopeBuilder} */
     public StreamScopeBuilder(Context context, ActionApi actionApi, ImageLoaderApi imageLoaderApi,
@@ -88,82 +88,82 @@
             FeedKnownContent feedKnownContent, TooltipApi tooltipApi,
             TooltipSupportedApi tooltipSupportedApi, ApplicationInfo applicationInfo,
             FeedExtensionRegistry feedExtensionRegistry) {
-        this.context = context;
-        this.actionApi = actionApi;
-        this.imageLoaderApi = imageLoaderApi;
-        this.protocolAdapter = protocolAdapter;
-        this.feedSessionManager = feedSessionManager;
-        this.threadUtils = threadUtils;
-        this.timingUtils = timingUtils;
-        this.taskQueue = taskQueue;
-        this.mainThreadRunner = mainThreadRunner;
-        this.streamConfiguration = streamConfiguration;
-        this.cardConfiguration = cardConfiguration;
-        this.clock = clock;
-        this.debugBehavior = debugBehavior;
-        this.actionManager = actionManager;
-        this.config = config;
-        this.snackbarApi = snackbarApi;
-        this.basicLoggingApi = basicLoggingApi;
-        this.offlineIndicatorApi = offlineIndicatorApi;
-        this.feedKnownContent = feedKnownContent;
-        this.tooltipApi = tooltipApi;
-        this.applicationInfo = applicationInfo;
-        this.feedExtensionRegistry = feedExtensionRegistry;
+        this.mContext = context;
+        this.mActionApi = actionApi;
+        this.mImageLoaderApi = imageLoaderApi;
+        this.mProtocolAdapter = protocolAdapter;
+        this.mFeedSessionManager = feedSessionManager;
+        this.mThreadUtils = threadUtils;
+        this.mTimingUtils = timingUtils;
+        this.mTaskQueue = taskQueue;
+        this.mMainThreadRunner = mainThreadRunner;
+        this.mStreamConfiguration = streamConfiguration;
+        this.mCardConfiguration = cardConfiguration;
+        this.mClock = clock;
+        this.mDebugBehavior = debugBehavior;
+        this.mActionManager = actionManager;
+        this.mConfig = config;
+        this.mSnackbarApi = snackbarApi;
+        this.mBasicLoggingApi = basicLoggingApi;
+        this.mOfflineIndicatorApi = offlineIndicatorApi;
+        this.mFeedKnownContent = feedKnownContent;
+        this.mTooltipApi = tooltipApi;
+        this.mApplicationInfo = applicationInfo;
+        this.mFeedExtensionRegistry = feedExtensionRegistry;
     }
 
     public StreamScopeBuilder setIsBackgroundDark(boolean isBackgroundDark) {
-        this.isBackgroundDark = isBackgroundDark;
+        this.mIsBackgroundDark = isBackgroundDark;
         return this;
     }
 
     public StreamScopeBuilder setStreamFactory(StreamFactory streamFactory) {
-        this.streamFactory = streamFactory;
+        this.mStreamFactory = streamFactory;
         return this;
     }
 
     public StreamScopeBuilder setModelProviderFactory(ModelProviderFactory modelProviderFactory) {
-        this.modelProviderFactory = modelProviderFactory;
+        this.mModelProviderFactory = modelProviderFactory;
         return this;
     }
 
     public StreamScopeBuilder setCustomElementProvider(
             CustomElementProvider customElementProvider) {
-        this.customElementProvider = customElementProvider;
+        this.mCustomElementProvider = customElementProvider;
         return this;
     }
 
     public StreamScopeBuilder setHostBindingProvider(HostBindingProvider hostBindingProvider) {
-        this.hostBindingProvider = hostBindingProvider;
+        this.mHostBindingProvider = hostBindingProvider;
         return this;
     }
 
     public StreamScope build() {
-        if (modelProviderFactory == null) {
-            modelProviderFactory = new FeedModelProviderFactory(feedSessionManager, threadUtils,
-                    timingUtils, taskQueue, mainThreadRunner, config, basicLoggingApi);
+        if (mModelProviderFactory == null) {
+            mModelProviderFactory = new FeedModelProviderFactory(mFeedSessionManager, mThreadUtils,
+                    mTimingUtils, mTaskQueue, mMainThreadRunner, mConfig, mBasicLoggingApi);
         }
-        if (actionParserFactory == null) {
-            actionParserFactory = new FeedActionParserFactory(protocolAdapter, basicLoggingApi);
+        if (mActionParserFactory == null) {
+            mActionParserFactory = new FeedActionParserFactory(mProtocolAdapter, mBasicLoggingApi);
         }
-        if (customElementProvider == null) {
-            customElementProvider = new ThrowingCustomElementProvider();
+        if (mCustomElementProvider == null) {
+            mCustomElementProvider = new ThrowingCustomElementProvider();
         }
-        if (hostBindingProvider == null) {
-            hostBindingProvider = new HostBindingProvider();
+        if (mHostBindingProvider == null) {
+            mHostBindingProvider = new HostBindingProvider();
         }
-        if (streamFactory == null) {
-            streamFactory = new BasicStreamFactory();
+        if (mStreamFactory == null) {
+            mStreamFactory = new BasicStreamFactory();
         }
-        stream = streamFactory.build(Validators.checkNotNull(actionParserFactory), context,
-                applicationInfo.getBuildType(), cardConfiguration, imageLoaderApi,
-                Validators.checkNotNull(customElementProvider), debugBehavior, clock,
-                Validators.checkNotNull(modelProviderFactory),
-                Validators.checkNotNull(hostBindingProvider), offlineIndicatorApi, config,
-                actionApi, actionManager, snackbarApi, streamConfiguration, feedExtensionRegistry,
-                basicLoggingApi, mainThreadRunner, isBackgroundDark, tooltipApi, threadUtils,
-                feedKnownContent);
+        mStream = mStreamFactory.build(Validators.checkNotNull(mActionParserFactory), mContext,
+                mApplicationInfo.getBuildType(), mCardConfiguration, mImageLoaderApi,
+                Validators.checkNotNull(mCustomElementProvider), mDebugBehavior, mClock,
+                Validators.checkNotNull(mModelProviderFactory),
+                Validators.checkNotNull(mHostBindingProvider), mOfflineIndicatorApi, mConfig,
+                mActionApi, mActionManager, mSnackbarApi, mStreamConfiguration,
+                mFeedExtensionRegistry, mBasicLoggingApi, mMainThreadRunner, mIsBackgroundDark,
+                mTooltipApi, mThreadUtils, mFeedKnownContent);
         return new FeedStreamScope(
-                Validators.checkNotNull(stream), Validators.checkNotNull(modelProviderFactory));
+                Validators.checkNotNull(mStream), Validators.checkNotNull(mModelProviderFactory));
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/api/client/stream/NonDismissibleHeader.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/api/client/stream/NonDismissibleHeader.java
index 1a819ec..0565a5f 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/api/client/stream/NonDismissibleHeader.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/api/client/stream/NonDismissibleHeader.java
@@ -10,15 +10,15 @@
  * Class providing a default implementation for {@link Header} instances that are not dismissible.
  */
 public class NonDismissibleHeader implements Header {
-    private final View view;
+    private final View mView;
 
     public NonDismissibleHeader(View view) {
-        this.view = view;
+        this.mView = view;
     }
 
     @Override
     public View getView() {
-        return view;
+        return mView;
     }
 
     @Override
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/api/common/MutationContext.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/api/common/MutationContext.java
index 59e42a1..630cd0b 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/api/common/MutationContext.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/api/common/MutationContext.java
@@ -12,35 +12,35 @@
  * request and pass this information back with the response.
  */
 public final class MutationContext {
-    /*@Nullable*/ private final StreamToken continuationToken;
-    /*@Nullable*/ private final String requestingSessionId;
-    private final boolean userInitiated;
+    /*@Nullable*/ private final StreamToken mContinuationToken;
+    /*@Nullable*/ private final String mRequestingSessionId;
+    private final boolean mUserInitiated;
 
     /** Static used to represent an empty Mutation Context */
     public static final MutationContext EMPTY_CONTEXT =
             new MutationContext(null, null, UiContext.getDefaultInstance(), false);
 
-    private final UiContext uiContext;
+    private final UiContext mUiContext;
 
     private MutationContext(
             /*@Nullable*/ StreamToken continuationToken,
             /*@Nullable*/ String requestingSessionId, UiContext uiContext, boolean userInitiated) {
-        this.continuationToken = continuationToken;
-        this.requestingSessionId = requestingSessionId;
-        this.userInitiated = userInitiated;
-        this.uiContext = uiContext;
+        this.mContinuationToken = continuationToken;
+        this.mRequestingSessionId = requestingSessionId;
+        this.mUserInitiated = userInitiated;
+        this.mUiContext = uiContext;
     }
 
     /** Returns the continuation token used to make the request. */
     /*@Nullable*/
     public StreamToken getContinuationToken() {
-        return continuationToken;
+        return mContinuationToken;
     }
 
     /** Returns the session which made the request. */
     /*@Nullable*/
     public String getRequestingSessionId() {
-        return requestingSessionId;
+        return mRequestingSessionId;
     }
 
     /**
@@ -48,48 +48,48 @@
      * UiContext#getDefaultInstance()} if none was present.
      */
     public UiContext getUiContext() {
-        return uiContext;
+        return mUiContext;
     }
 
     /** Returns {@code true} if the mutation was user initiated. */
     public boolean isUserInitiated() {
-        return userInitiated;
+        return mUserInitiated;
     }
 
     /**
      * Builder for creating a {@link com.google.android.libraries.feed.api.common.MutationContext
      */
     public static final class Builder {
-        /*@MonotonicNonNull*/ private StreamToken continuationToken;
-        /*@MonotonicNonNull*/ private String requestingSessionId;
-        private UiContext uiContext = UiContext.getDefaultInstance();
-        private boolean userInitiated;
+        /*@MonotonicNonNull*/ private StreamToken mContinuationToken;
+        /*@MonotonicNonNull*/ private String mRequestingSessionId;
+        private UiContext mUiContext = UiContext.getDefaultInstance();
+        private boolean mUserInitiated;
 
         public Builder() {}
 
         public Builder setContinuationToken(StreamToken continuationToken) {
-            this.continuationToken = continuationToken;
+            this.mContinuationToken = continuationToken;
             return this;
         }
 
         public Builder setRequestingSessionId(String requestingSessionId) {
-            this.requestingSessionId = requestingSessionId;
+            this.mRequestingSessionId = requestingSessionId;
             return this;
         }
 
         public Builder setUserInitiated(boolean userInitiated) {
-            this.userInitiated = userInitiated;
+            this.mUserInitiated = userInitiated;
             return this;
         }
 
         public Builder setUiContext(UiContext uiContext) {
-            this.uiContext = uiContext;
+            this.mUiContext = uiContext;
             return this;
         }
 
         public MutationContext build() {
             return new MutationContext(
-                    continuationToken, requestingSessionId, uiContext, userInitiated);
+                    mContinuationToken, mRequestingSessionId, mUiContext, mUserInitiated);
         }
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/api/host/config/ApplicationInfo.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/api/host/config/ApplicationInfo.java
index 885ebf1..99a1ba3 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/api/host/config/ApplicationInfo.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/api/host/config/ApplicationInfo.java
@@ -52,72 +52,72 @@
     }
 
     @AppType
-    private final int appType;
+    private final int mAppType;
     @Architecture
-    private final int architecture;
+    private final int mArchitecture;
     @BuildType
-    private final int buildType;
-    private final String versionString;
+    private final int mBuildType;
+    private final String mVersionString;
 
     private ApplicationInfo(int appType, int architecture, int buildType, String versionString) {
-        this.appType = appType;
-        this.architecture = architecture;
-        this.buildType = buildType;
-        this.versionString = versionString;
+        this.mAppType = appType;
+        this.mArchitecture = architecture;
+        this.mBuildType = buildType;
+        this.mVersionString = versionString;
     }
 
     @AppType
     public int getAppType() {
-        return appType;
+        return mAppType;
     }
 
     @Architecture
     public int getArchitecture() {
-        return architecture;
+        return mArchitecture;
     }
 
     @BuildType
     public int getBuildType() {
-        return buildType;
+        return mBuildType;
     }
 
     public String getVersionString() {
-        return versionString;
+        return mVersionString;
     }
 
     /** Builder class used to create {@link ApplicationInfo} objects. */
     public static final class Builder {
         private static final String TAG = "Builder";
 
-        private final Context context;
+        private final Context mContext;
         @AppType
-        private int appType = AppType.UNKNOWN_APP;
+        private int mAppType = AppType.UNKNOWN_APP;
         @Architecture
-        private int architecture = Architecture.UNKNOWN_ACHITECTURE;
+        private int mAchitecture = Architecture.UNKNOWN_ACHITECTURE;
         @BuildType
-        private int buildType = BuildType.UNKNOWN_BUILD_TYPE;
+        private int mBuildType = BuildType.UNKNOWN_BUILD_TYPE;
 
-        private String versionString;
+        private String mVersionString;
 
         public Builder(Context context) {
-            this.context = context;
+            this.mContext = context;
         }
 
         /** Sets the type of client application. */
         public Builder setAppType(@AppType int appType) {
-            this.appType = appType;
+            this.mAppType = appType;
             return this;
         }
 
         /** Sets the CPU architecture that the client application was built for. */
         public Builder setArchitecture(@Architecture int architecture) {
-            this.architecture = architecture;
+            this.mAchitecture = architecture;
             return this;
         }
 
         /** Sets the release stage of the build for the client application. */
         public Builder setBuildType(@BuildType int buildType) {
-            this.buildType = buildType;
+            this.mBuildType = buildType;
             return this;
         }
 
@@ -128,21 +128,21 @@
          * manifest (see https://developer.android.com/studio/publish/versioning).
          */
         public Builder setVersionString(String versionString) {
-            this.versionString = versionString;
+            this.mVersionString = versionString;
             return this;
         }
 
         public ApplicationInfo build() {
-            if (versionString == null) {
-                versionString = getDefaultVersionString();
+            if (mVersionString == null) {
+                mVersionString = getDefaultVersionString();
             }
-            return new ApplicationInfo(appType, architecture, buildType, versionString);
+            return new ApplicationInfo(mAppType, mAchitecture, mBuildType, mVersionString);
         }
 
         private String getDefaultVersionString() {
             try {
                 PackageInfo pInfo =
-                        context.getPackageManager().getPackageInfo(context.getPackageName(), 0);
+                        mContext.getPackageManager().getPackageInfo(mContext.getPackageName(), 0);
                 return pInfo.versionName;
             } catch (NameNotFoundException e) {
                 Logger.w(TAG, e, "Cannot find package name.");
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/api/host/config/Configuration.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/api/host/config/Configuration.java
index 012af42..f57615d 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/api/host/config/Configuration.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/api/host/config/Configuration.java
@@ -151,10 +151,10 @@
         String VIEW_MIN_TIME_MS = "view_min_time_ms";
     }
 
-    private final HashMap<String, Object> values;
+    private final HashMap<String, Object> mValues;
 
     private Configuration(HashMap<String, Object> values) {
-        this.values = values;
+        this.mValues = values;
     }
 
     public String getValueOrDefault(String key, String defaultValue) {
@@ -179,10 +179,10 @@
      * @throws ClassCastException if the value can't be cast to {@code T}.
      */
     private <T> T getValueOrDefaultUnchecked(String key, T defaultValue) {
-        if (values.containsKey(key)) {
+        if (mValues.containsKey(key)) {
             // The caller assumes the responsibility of ensuring this cast succeeds
             @SuppressWarnings("unchecked")
-            T castedValue = (T) values.get(key);
+            T castedValue = (T) mValues.get(key);
             return castedValue;
         } else {
             return defaultValue;
@@ -191,12 +191,12 @@
 
     /** Returns true if a value exists for the {@code key}. */
     public boolean hasValue(String key) {
-        return values.containsKey(key);
+        return mValues.containsKey(key);
     }
 
     /** Returns a {@link Builder} for this {@link Configuration}. */
     public Builder toBuilder() {
-        return new Builder(values);
+        return new Builder(mValues);
     }
 
     /** Returns a default {@link Configuration}. */
@@ -206,10 +206,10 @@
 
     /** Builder class used to create {@link Configuration} objects. */
     public static final class Builder {
-        private final HashMap<String, Object> values;
+        private final HashMap<String, Object> mValues;
 
         private Builder(HashMap<String, Object> values) {
-            this.values = new HashMap<>(values);
+            this.mValues = new HashMap<>(values);
         }
 
         public Builder() {
@@ -217,27 +217,27 @@
         }
 
         public Builder put(@ConfigKey String key, String value) {
-            values.put(key, value);
+            mValues.put(key, value);
             return this;
         }
 
         public Builder put(@ConfigKey String key, long value) {
-            values.put(key, value);
+            mValues.put(key, value);
             return this;
         }
 
         public Builder put(@ConfigKey String key, boolean value) {
-            values.put(key, value);
+            mValues.put(key, value);
             return this;
         }
 
         public Builder put(@ConfigKey String key, double value) {
-            values.put(key, value);
+            mValues.put(key, value);
             return this;
         }
 
         public Configuration build() {
-            return new Configuration(values);
+            return new Configuration(mValues);
         }
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/api/host/config/DebugBehavior.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/api/host/config/DebugBehavior.java
index e915a09..bc60463 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/api/host/config/DebugBehavior.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/api/host/config/DebugBehavior.java
@@ -18,13 +18,13 @@
     /** Convenience constant for configuration that disables all debug behavior. */
     public static final DebugBehavior SILENT = new DebugBehavior(false);
 
-    private final boolean showDebugViews;
+    private final boolean mShowDebugViews;
 
     private DebugBehavior(boolean showDebugViews) {
-        this.showDebugViews = showDebugViews;
+        this.mShowDebugViews = showDebugViews;
     }
 
     public boolean getShowDebugViews() {
-        return showDebugViews;
+        return mShowDebugViews;
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/api/host/network/HttpRequest.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/api/host/network/HttpRequest.java
index dc3cd6f5..b44d0c56 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/api/host/network/HttpRequest.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/api/host/network/HttpRequest.java
@@ -31,31 +31,31 @@
         String DELETE = "DELETE";
     }
 
-    private final Uri uri;
-    private final byte[] body;
-    private final @HttpMethod String method;
-    private final List<HttpHeader> headers;
+    private final Uri mUri;
+    private final byte[] mBody;
+    private final @HttpMethod String mMethod;
+    private final List<HttpHeader> mHeaders;
 
     public HttpRequest(Uri uri, @HttpMethod String method, List<HttpHeader> headers, byte[] body) {
-        this.uri = uri;
-        this.body = body;
-        this.method = method;
-        this.headers = Collections.unmodifiableList(new ArrayList<>(headers));
+        this.mUri = uri;
+        this.mBody = body;
+        this.mMethod = method;
+        this.mHeaders = Collections.unmodifiableList(new ArrayList<>(headers));
     }
 
     public Uri getUri() {
-        return uri;
+        return mUri;
     }
 
     public byte[] getBody() {
-        return body;
+        return mBody;
     }
 
     public @HttpMethod String getMethod() {
-        return method;
+        return mMethod;
     }
 
     public List<HttpHeader> getHeaders() {
-        return headers;
+        return mHeaders;
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/api/host/network/HttpResponse.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/api/host/network/HttpResponse.java
index f2ae686..4b292bf4 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/api/host/network/HttpResponse.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/api/host/network/HttpResponse.java
@@ -6,12 +6,12 @@
 
 /** Representation of an HTTP response. */
 public final class HttpResponse {
-    private final int responseCode;
-    private final byte[] responseBody;
+    private final int mResponseCode;
+    private final byte[] mResponseBody;
 
     public HttpResponse(int responseCode, byte[] responseBody) {
-        this.responseCode = responseCode;
-        this.responseBody = responseBody;
+        this.mResponseCode = responseCode;
+        this.mResponseBody = responseBody;
     }
 
     /**
@@ -21,11 +21,11 @@
      * network issue and no request was able to be sent.
      */
     public int getResponseCode() {
-        return responseCode;
+        return mResponseCode;
     }
 
     /** Gets the body for the response. */
     public byte[] getResponseBody() {
-        return responseBody;
+        return mResponseBody;
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/api/host/storage/CommitResult.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/api/host/storage/CommitResult.java
index 007f7c0..f8e0654 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/api/host/storage/CommitResult.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/api/host/storage/CommitResult.java
@@ -16,14 +16,14 @@
     }
 
     public @Result int getResult() {
-        return result;
+        return mResult;
     }
 
-    private final @Result int result;
+    private final @Result int mResult;
 
     // Private constructor - use static instances
     private CommitResult(@Result int result) {
-        this.result = result;
+        this.mResult = result;
     }
 
     public static final CommitResult SUCCESS = new CommitResult(Result.SUCCESS);
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/api/host/storage/ContentMutation.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/api/host/storage/ContentMutation.java
index 36df9be..303eee90 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/api/host/storage/ContentMutation.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/api/host/storage/ContentMutation.java
@@ -18,15 +18,15 @@
  * ContentStorage}.
  */
 public final class ContentMutation {
-    private final List<ContentOperation> operations;
+    private final List<ContentOperation> mOperations;
 
     private ContentMutation(List<ContentOperation> operations) {
-        this.operations = Collections.unmodifiableList(operations);
+        this.mOperations = Collections.unmodifiableList(operations);
     }
 
     /** An unmodifiable list of operations to be committed by {@link ContentStorage}. */
     public List<ContentOperation> getOperations() {
-        return operations;
+        return mOperations;
     }
 
     /**
@@ -34,8 +34,8 @@
      * {@link ContentStorage}.
      */
     public static final class Builder {
-        private final ArrayList<ContentOperation> operations = new ArrayList<>();
-        private final ContentOperationListSimplifier simplifier =
+        private final ArrayList<ContentOperation> mOperations = new ArrayList<>();
+        private final ContentOperationListSimplifier mSimplifier =
                 new ContentOperationListSimplifier();
 
         /**
@@ -45,7 +45,7 @@
          * assigned multiple times, only the last value will be persisted.
          */
         public Builder upsert(String key, byte[] value) {
-            operations.add(new Upsert(key, value));
+            mOperations.add(new Upsert(key, value));
             return this;
         }
 
@@ -59,7 +59,7 @@
          * operation will take effect.
          */
         public Builder delete(String key) {
-            operations.add(new Delete(key));
+            mOperations.add(new Delete(key));
             return this;
         }
 
@@ -73,13 +73,13 @@
          * only the last operation will take effect.
          */
         public Builder deleteByPrefix(String prefix) {
-            operations.add(new DeleteByPrefix(prefix));
+            mOperations.add(new DeleteByPrefix(prefix));
             return this;
         }
 
         /** Deletes all values from {@link ContentStorage}. */
         public Builder deleteAll() {
-            operations.add(new DeleteAll());
+            mOperations.add(new DeleteAll());
             return this;
         }
 
@@ -88,7 +88,7 @@
          * ContentMutation} the simplified list.
          */
         public ContentMutation build() {
-            return new ContentMutation(simplifier.simplify(operations));
+            return new ContentMutation(mSimplifier.simplify(mOperations));
         }
     }
 
@@ -103,11 +103,12 @@
 
         ContentMutation that = (ContentMutation) o;
 
-        return operations != null ? operations.equals(that.operations) : that.operations == null;
+        return mOperations != null ? mOperations.equals(that.mOperations)
+                                   : that.mOperations == null;
     }
 
     @Override
     public int hashCode() {
-        return operations != null ? operations.hashCode() : 0;
+        return mOperations != null ? mOperations.hashCode() : 0;
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/api/host/storage/ContentOperation.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/api/host/storage/ContentOperation.java
index 60e128f..227c292 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/api/host/storage/ContentOperation.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/api/host/storage/ContentOperation.java
@@ -24,14 +24,14 @@
     }
 
     public @Type int getType() {
-        return type;
+        return mType;
     }
 
-    private final @Type int type;
+    private final @Type int mType;
 
     // Only the following classes may extend ContentOperation
     private ContentOperation(@Type int type) {
-        this.type = type;
+        this.mType = type;
     }
 
     /**
@@ -39,21 +39,21 @@
      * byte[])}.
      */
     public static final class Upsert extends ContentOperation {
-        private final String key;
-        private final byte[] value;
+        private final String mKey;
+        private final byte[] mValue;
 
         Upsert(String key, byte[] value) {
             super(Type.UPSERT);
-            this.key = key;
-            this.value = value;
+            this.mKey = key;
+            this.mValue = value;
         }
 
         public String getKey() {
-            return key;
+            return mKey;
         }
 
         public byte[] getValue() {
-            return value;
+            return mValue;
         }
 
         @Override
@@ -64,7 +64,7 @@
 
             if (o instanceof Upsert) {
                 Upsert upsert = (Upsert) o;
-                return key.equals(upsert.key) && Arrays.equals(value, upsert.value);
+                return mKey.equals(upsert.mKey) && Arrays.equals(mValue, upsert.mValue);
             } else {
                 return false;
             }
@@ -72,8 +72,8 @@
 
         @Override
         public int hashCode() {
-            int result = key.hashCode();
-            result = 31 * result + Arrays.hashCode(value);
+            int result = mKey.hashCode();
+            result = 31 * result + Arrays.hashCode(mValue);
             return result;
         }
     }
@@ -82,15 +82,15 @@
      * A {@link ContentOperation} created by calling {@link ContentMutation.Builder#delete(String)}.
      */
     public static final class Delete extends ContentOperation {
-        private final String key;
+        private final String mKey;
 
         Delete(String key) {
             super(Type.DELETE);
-            this.key = key;
+            this.mKey = key;
         }
 
         public String getKey() {
-            return key;
+            return mKey;
         }
 
         @Override
@@ -101,7 +101,7 @@
 
             if (o instanceof Delete) {
                 Delete delete = (Delete) o;
-                return key.equals(delete.key);
+                return mKey.equals(delete.mKey);
             } else {
                 return false;
             }
@@ -109,7 +109,7 @@
 
         @Override
         public int hashCode() {
-            return key.hashCode();
+            return mKey.hashCode();
         }
     }
 
@@ -118,15 +118,15 @@
      * ContentMutation.Builder#deleteByPrefix(String)}.
      */
     public static final class DeleteByPrefix extends ContentOperation {
-        private final String prefix;
+        private final String mPrefix;
 
         DeleteByPrefix(String prefix) {
             super(Type.DELETE_BY_PREFIX);
-            this.prefix = prefix;
+            this.mPrefix = prefix;
         }
 
         public String getPrefix() {
-            return prefix;
+            return mPrefix;
         }
 
         @Override
@@ -137,7 +137,7 @@
 
             if (o instanceof DeleteByPrefix) {
                 DeleteByPrefix that = (DeleteByPrefix) o;
-                return prefix.equals(that.prefix);
+                return mPrefix.equals(that.mPrefix);
             } else {
                 return false;
             }
@@ -145,7 +145,7 @@
 
         @Override
         public int hashCode() {
-            return prefix.hashCode();
+            return mPrefix.hashCode();
         }
     }
 
@@ -168,11 +168,11 @@
 
         ContentOperation operation = (ContentOperation) o;
 
-        return type == operation.type;
+        return mType == operation.mType;
     }
 
     @Override
     public int hashCode() {
-        return type;
+        return mType;
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/api/host/storage/JournalMutation.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/api/host/storage/JournalMutation.java
index 32bab4f3..3f3934b3 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/api/host/storage/JournalMutation.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/api/host/storage/JournalMutation.java
@@ -17,22 +17,22 @@
  * class is used to commit changes to a journal in {@link JournalStorage}.
  */
 public final class JournalMutation {
-    private final String journalName;
-    private final List<JournalOperation> operations;
+    private final String mJournalName;
+    private final List<JournalOperation> mOperations;
 
     private JournalMutation(String journalName, List<JournalOperation> operations) {
-        this.journalName = journalName;
-        this.operations = Collections.unmodifiableList(operations);
+        this.mJournalName = journalName;
+        this.mOperations = Collections.unmodifiableList(operations);
     }
 
     /** An unmodifiable list of operations to be committed by {@link JournalStorage}. */
     public List<JournalOperation> getOperations() {
-        return operations;
+        return mOperations;
     }
 
     /** The name of the journal this mutation should be applied to. */
     public String getJournalName() {
-        return journalName;
+        return mJournalName;
     }
 
     /**
@@ -40,11 +40,11 @@
      * underlying {@link JournalStorage}.
      */
     public static final class Builder {
-        private final ArrayList<JournalOperation> operations = new ArrayList<>();
-        private final String journalName;
+        private final ArrayList<JournalOperation> mOperations = new ArrayList<>();
+        private final String mJournalName;
 
         public Builder(String journalName) {
-            this.journalName = journalName;
+            this.mJournalName = journalName;
         }
 
         /**
@@ -53,25 +53,25 @@
          * <p>This method can be called repeatedly to append multiple times.
          */
         public Builder append(byte[] value) {
-            operations.add(new Append(value));
+            mOperations.add(new Append(value));
             return this;
         }
 
         /** Copies the journal to {@code toJournalName}. */
         public Builder copy(String toJournalName) {
-            operations.add(new Copy(toJournalName));
+            mOperations.add(new Copy(toJournalName));
             return this;
         }
 
         /** Deletes the journal. */
         public Builder delete() {
-            operations.add(new Delete());
+            mOperations.add(new Delete());
             return this;
         }
 
         /** Creates a {@link JournalMutation} based on the operations added in this builder. */
         public JournalMutation build() {
-            return new JournalMutation(journalName, new ArrayList<>(operations));
+            return new JournalMutation(mJournalName, new ArrayList<>(mOperations));
         }
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/api/host/storage/JournalOperation.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/api/host/storage/JournalOperation.java
index 314db8df..3b3aa4ec 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/api/host/storage/JournalOperation.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/api/host/storage/JournalOperation.java
@@ -20,29 +20,29 @@
     }
 
     public @Type int getType() {
-        return type;
+        return mType;
     }
 
-    private final @Type int type;
+    private final @Type int mType;
 
     // Only the following classes may extend JournalOperation
     private JournalOperation(@Type int type) {
-        this.type = type;
+        this.mType = type;
     }
 
     /**
      * A {@link JournalOperation} created by calling {@link JournalMutation.Builder#append(byte[])}.
      */
     public static final class Append extends JournalOperation {
-        private final byte[] value;
+        private final byte[] mValue;
 
         Append(byte[] value) {
             super(Type.APPEND);
-            this.value = value;
+            this.mValue = value;
         }
 
         public byte[] getValue() {
-            return value;
+            return mValue;
         }
     }
 
@@ -50,15 +50,15 @@
      * A {@link JournalOperation} created by calling {@link JournalMutation.Builder#copy(String)}.
      */
     public static final class Copy extends JournalOperation {
-        private final String toJournalName;
+        private final String mToJournalName;
 
         Copy(String toJournalName) {
             super(Type.COPY);
-            this.toJournalName = toJournalName;
+            this.mToJournalName = toJournalName;
         }
 
         public String getToJournalName() {
-            return toJournalName;
+            return mToJournalName;
         }
     }
 
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/api/internal/common/DismissActionWithSemanticProperties.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/api/internal/common/DismissActionWithSemanticProperties.java
index 5861e42..4f2c53d 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/api/internal/common/DismissActionWithSemanticProperties.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/api/internal/common/DismissActionWithSemanticProperties.java
@@ -13,21 +13,21 @@
  * dismissed content, and any semantic properties associated with it.
  */
 public final class DismissActionWithSemanticProperties {
-    private final ContentId contentId;
-    private final byte /*@Nullable*/[] semanticProperties;
+    private final ContentId mContentId;
+    private final byte /*@Nullable*/[] mSemanticProperties;
 
     public DismissActionWithSemanticProperties(
             ContentId contentId, byte /*@Nullable*/[] semanticProperties) {
-        this.contentId = contentId;
-        this.semanticProperties = semanticProperties;
+        this.mContentId = contentId;
+        this.mSemanticProperties = semanticProperties;
     }
 
     public ContentId getContentId() {
-        return contentId;
+        return mContentId;
     }
 
     public byte /*@Nullable*/[] getSemanticProperties() {
-        return semanticProperties;
+        return mSemanticProperties;
     }
 
     @Override
@@ -41,16 +41,16 @@
 
         DismissActionWithSemanticProperties that = (DismissActionWithSemanticProperties) o;
 
-        if (!contentId.equals(that.contentId)) {
+        if (!mContentId.equals(that.mContentId)) {
             return false;
         }
-        return Arrays.equals(semanticProperties, that.semanticProperties);
+        return Arrays.equals(mSemanticProperties, that.mSemanticProperties);
     }
 
     @Override
     public int hashCode() {
-        int result = contentId.hashCode();
-        result = 31 * result + Arrays.hashCode(semanticProperties);
+        int result = mContentId.hashCode();
+        result = 31 * result + Arrays.hashCode(mSemanticProperties);
         return result;
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/api/internal/common/testing/InternalProtocolBuilder.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/api/internal/common/testing/InternalProtocolBuilder.java
index 7a446f8..80fba400 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/api/internal/common/testing/InternalProtocolBuilder.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/api/internal/common/testing/InternalProtocolBuilder.java
@@ -18,31 +18,32 @@
 
 /** This is a builder class for creating internal protocol elements. */
 public class InternalProtocolBuilder {
-    private final ContentIdGenerators idGenerators = new ContentIdGenerators();
-    private final List<StreamDataOperation> dataOperations = new ArrayList<>();
+    private final ContentIdGenerators mIdGenerators = new ContentIdGenerators();
+    private final List<StreamDataOperation> mDataOperations = new ArrayList<>();
 
     /** This adds a Root Feature into the Stream of data operations */
     public InternalProtocolBuilder addRootFeature() {
         StreamFeature streamFeature = StreamFeature.newBuilder()
-                                              .setContentId(idGenerators.createRootContentId(0))
+                                              .setContentId(mIdGenerators.createRootContentId(0))
                                               .build();
-        StreamStructure streamStructure = StreamStructure.newBuilder()
-                                                  .setOperation(Operation.UPDATE_OR_APPEND)
-                                                  .setContentId(idGenerators.createRootContentId(0))
-                                                  .build();
+        StreamStructure streamStructure =
+                StreamStructure.newBuilder()
+                        .setOperation(Operation.UPDATE_OR_APPEND)
+                        .setContentId(mIdGenerators.createRootContentId(0))
+                        .build();
         StreamPayload streamPayload =
                 StreamPayload.newBuilder().setStreamFeature(streamFeature).build();
-        dataOperations.add(StreamDataOperation.newBuilder()
-                                   .setStreamStructure(streamStructure)
-                                   .setStreamPayload(streamPayload)
-                                   .build());
+        mDataOperations.add(StreamDataOperation.newBuilder()
+                                    .setStreamStructure(streamStructure)
+                                    .setStreamPayload(streamPayload)
+                                    .build());
         return this;
     }
 
     public InternalProtocolBuilder addClearOperation() {
         StreamStructure streamStructure =
                 StreamStructure.newBuilder().setOperation(Operation.CLEAR_ALL).build();
-        dataOperations.add(
+        mDataOperations.add(
                 StreamDataOperation.newBuilder().setStreamStructure(streamStructure).build());
         return this;
     }
@@ -56,10 +57,10 @@
                                                   .build();
         StreamPayload streamPayload =
                 StreamPayload.newBuilder().setStreamSharedState(streamSharedState).build();
-        dataOperations.add(StreamDataOperation.newBuilder()
-                                   .setStreamStructure(streamStructure)
-                                   .setStreamPayload(streamPayload)
-                                   .build());
+        mDataOperations.add(StreamDataOperation.newBuilder()
+                                    .setStreamStructure(streamStructure)
+                                    .setStreamPayload(streamPayload)
+                                    .build());
         return this;
     }
 
@@ -71,10 +72,10 @@
                                                   .build();
         StreamPayload streamPayload =
                 StreamPayload.newBuilder().setStreamToken(streamToken).build();
-        dataOperations.add(StreamDataOperation.newBuilder()
-                                   .setStreamStructure(streamStructure)
-                                   .setStreamPayload(streamPayload)
-                                   .build());
+        mDataOperations.add(StreamDataOperation.newBuilder()
+                                    .setStreamStructure(streamStructure)
+                                    .setStreamPayload(streamPayload)
+                                    .build());
         return this;
     }
 
@@ -88,10 +89,10 @@
                                                   .build();
         StreamPayload streamPayload =
                 StreamPayload.newBuilder().setStreamFeature(streamFeature).build();
-        dataOperations.add(StreamDataOperation.newBuilder()
-                                   .setStreamStructure(streamStructure)
-                                   .setStreamPayload(streamPayload)
-                                   .build());
+        mDataOperations.add(StreamDataOperation.newBuilder()
+                                    .setStreamStructure(streamStructure)
+                                    .setStreamPayload(streamPayload)
+                                    .build());
         return this;
     }
 
@@ -101,13 +102,13 @@
                                                   .setContentId(contentId)
                                                   .setParentContentId(parentId)
                                                   .build();
-        dataOperations.add(
+        mDataOperations.add(
                 StreamDataOperation.newBuilder().setStreamStructure(streamStructure).build());
         return this;
     }
 
     public InternalProtocolBuilder addRequiredContent(String contentId) {
-        dataOperations.add(
+        mDataOperations.add(
                 StreamDataOperation.newBuilder()
                         .setStreamStructure(StreamStructure.newBuilder()
                                                     .setOperation(Operation.REQUIRED_CONTENT)
@@ -117,7 +118,7 @@
     }
 
     public List<StreamDataOperation> build() {
-        return new ArrayList<>(dataOperations);
+        return new ArrayList<>(mDataOperations);
     }
 
     /**
@@ -126,7 +127,7 @@
      */
     public List<StreamStructure> buildAsStreamStructure() {
         List<StreamStructure> streamStructures = new ArrayList<>();
-        for (StreamDataOperation operation : dataOperations) {
+        for (StreamDataOperation operation : mDataOperations) {
             // For the structure, ignore the shared state
             if (operation.getStreamPayload().hasStreamSharedState()) {
                 continue;
@@ -138,7 +139,7 @@
 
     public List<PayloadWithId> buildAsPayloadWithId() {
         List<PayloadWithId> payloads = new ArrayList<>();
-        for (StreamDataOperation operation : dataOperations) {
+        for (StreamDataOperation operation : mDataOperations) {
             // For the structure, ignore the shared state
             if (operation.getStreamPayload().hasStreamSharedState()) {
                 continue;
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/api/internal/modelprovider/ModelError.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/api/internal/modelprovider/ModelError.java
index c64bff1..de42122 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/api/internal/modelprovider/ModelError.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/api/internal/modelprovider/ModelError.java
@@ -29,22 +29,22 @@
         int SYNTHETIC_TOKEN_ERROR = 3;
     }
 
-    private final @ErrorType int errorType;
-    /*@Nullable*/ private final ByteString continuationToken;
+    private final @ErrorType int mErrorType;
+    /*@Nullable*/ private final ByteString mContinuationToken;
 
     public ModelError(@ErrorType int errorType, /*@Nullable*/ ByteString continuationToken) {
-        this.errorType = errorType;
-        this.continuationToken = continuationToken;
+        this.mErrorType = errorType;
+        this.mContinuationToken = continuationToken;
     }
 
     /** Returns the ErrorType assocated with the error. */
     public @ErrorType int getErrorType() {
-        return errorType;
+        return mErrorType;
     }
 
     /** This should be non-null if the ErrorType is PAGINATION_ERROR. */
     /*@Nullable*/
     public ByteString getContinuationToken() {
-        return continuationToken;
+        return mContinuationToken;
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/api/internal/modelprovider/RemoveTracking.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/api/internal/modelprovider/RemoveTracking.java
index 9db2b2e..1c31594 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/api/internal/modelprovider/RemoveTracking.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/api/internal/modelprovider/RemoveTracking.java
@@ -23,9 +23,9 @@
  * addition, the {@code Consumer} is called before the change operation.
  */
 public final class RemoveTracking<T> {
-    private final Function<StreamFeature, /*@Nullable*/ T> filterPredicate;
-    private final Consumer<List<T>> consumer;
-    private final List<T> matchingItems = new ArrayList<>();
+    private final Function<StreamFeature, /*@Nullable*/ T> mFilterPredicate;
+    private final Consumer<List<T>> mConsumer;
+    private final List<T> mMatchingItems = new ArrayList<>();
 
     /**
      * Create the state necessary to call transform and filter the removed subtree before calling
@@ -34,17 +34,17 @@
      */
     public RemoveTracking(
             Function<StreamFeature, /*@Nullable*/ T> filterPredicate, Consumer<List<T>> consumer) {
-        this.filterPredicate = filterPredicate;
-        this.consumer = consumer;
+        this.mFilterPredicate = filterPredicate;
+        this.mConsumer = consumer;
     }
 
     /**
      * Called to transform and filter a {@link StreamFeature} found within a subtree being removed.
      */
     public void filterStreamFeature(StreamFeature streamFeature) {
-        T value = filterPredicate.apply(streamFeature);
+        T value = mFilterPredicate.apply(streamFeature);
         if (value != null) {
-            matchingItems.add(value);
+            mMatchingItems.add(value);
         }
     }
 
@@ -52,6 +52,6 @@
      * Called on the main thread call the {@link Consumer} after all removes have been processed.
      */
     public void triggerConsumerUpdate() {
-        consumer.accept(matchingItems);
+        mConsumer.accept(mMatchingItems);
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/api/internal/modelprovider/TokenCompleted.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/api/internal/modelprovider/TokenCompleted.java
index 8c779df..7fc0eabd 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/api/internal/modelprovider/TokenCompleted.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/api/internal/modelprovider/TokenCompleted.java
@@ -6,10 +6,10 @@
 
 /** Defines completion of a continuation token initiated request. */
 public final class TokenCompleted {
-    private final ModelCursor modelCursor;
+    private final ModelCursor mModelCursor;
 
     public TokenCompleted(ModelCursor modelCursor) {
-        this.modelCursor = modelCursor;
+        this.mModelCursor = modelCursor;
     }
 
     /**
@@ -17,6 +17,6 @@
      * token was found.
      */
     public ModelCursor getCursor() {
-        return modelCursor;
+        return mModelCursor;
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/api/internal/scope/ClearAllListener.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/api/internal/scope/ClearAllListener.java
index 5f2482a2..27bfea8 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/api/internal/scope/ClearAllListener.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/api/internal/scope/ClearAllListener.java
@@ -25,21 +25,21 @@
 public final class ClearAllListener implements FeedLifecycleListener, Dumpable {
     private static final String TAG = "ClearAllListener";
 
-    private final TaskQueue taskQueue;
-    private final FeedSessionManager feedSessionManager;
-    private final /*@Nullable*/ Resettable store;
-    private final ThreadUtils threadUtils;
-    private int clearCount;
-    private int refreshCount;
+    private final TaskQueue mTaskQueue;
+    private final FeedSessionManager mFeedSessionManager;
+    private final /*@Nullable*/ Resettable mStore;
+    private final ThreadUtils mThreadUtils;
+    private int mClearCount;
+    private int mRefreshCount;
 
     @SuppressWarnings("argument.type.incompatible") // ok call to registerObserver
     public ClearAllListener(TaskQueue taskQueue, FeedSessionManager feedSessionManager,
             /*@Nullable*/ Resettable store, ThreadUtils threadUtils,
             FeedObservable<FeedLifecycleListener> lifecycleListenerObservable) {
-        this.taskQueue = taskQueue;
-        this.feedSessionManager = feedSessionManager;
-        this.store = store;
-        this.threadUtils = threadUtils;
+        this.mTaskQueue = taskQueue;
+        this.mFeedSessionManager = feedSessionManager;
+        this.mStore = store;
+        this.mThreadUtils = threadUtils;
 
         lifecycleListenerObservable.registerObserver(this);
     }
@@ -48,10 +48,10 @@
     public void onLifecycleEvent(String event) {
         switch (event) {
             case LifecycleEvent.CLEAR_ALL:
-                taskQueue.execute(Task.CLEAR_ALL, TaskType.IMMEDIATE, this::clearAll);
+                mTaskQueue.execute(Task.CLEAR_ALL, TaskType.IMMEDIATE, this::clearAll);
                 break;
             case LifecycleEvent.CLEAR_ALL_WITH_REFRESH:
-                taskQueue.execute(
+                mTaskQueue.execute(
                         Task.CLEAR_ALL_WITH_REFRESH, TaskType.IMMEDIATE, this::clearAllWithRefresh);
                 break;
             default:
@@ -60,33 +60,33 @@
     }
 
     private void clearAll() {
-        threadUtils.checkNotMainThread();
-        clearCount++;
+        mThreadUtils.checkNotMainThread();
+        mClearCount++;
 
         Logger.i(TAG, "starting clearAll");
         // Clear the task queue first, preventing any tasks from running until initialization
-        taskQueue.reset();
+        mTaskQueue.reset();
         // reset the session state
-        feedSessionManager.reset();
-        if (store != null) {
-            store.reset();
+        mFeedSessionManager.reset();
+        if (mStore != null) {
+            mStore.reset();
         }
         // Initialize the TaskQueue so new tasks will start running
-        taskQueue.completeReset();
+        mTaskQueue.completeReset();
     }
 
     private void clearAllWithRefresh() {
-        threadUtils.checkNotMainThread();
+        mThreadUtils.checkNotMainThread();
         clearAll();
-        feedSessionManager.triggerRefresh(
+        mFeedSessionManager.triggerRefresh(
                 null, RequestReason.CLEAR_ALL, UiContext.getDefaultInstance());
-        refreshCount++;
+        mRefreshCount++;
     }
 
     @Override
     public void dump(Dumper dumper) {
         dumper.title(TAG);
-        dumper.forKey("clearCount").value(clearCount);
-        dumper.forKey("clearWithRefreshCount").value(refreshCount);
+        dumper.forKey("clearCount").value(mClearCount);
+        dumper.forKey("clearWithRefreshCount").value(mRefreshCount);
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/api/internal/scope/FeedProcessScope.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/api/internal/scope/FeedProcessScope.java
index 3c32dc19..404c172 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/api/internal/scope/FeedProcessScope.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/api/internal/scope/FeedProcessScope.java
@@ -48,26 +48,26 @@
 public final class FeedProcessScope implements ProcessScope {
     private static final String TAG = "FeedProcessScope";
 
-    private final NetworkClient networkClient;
-    private final ProtocolAdapter protocolAdapter;
-    private final RequestManager requestManager;
-    private final FeedSessionManager feedSessionManager;
-    private final Store store;
-    private final TimingUtils timingUtils;
-    private final ThreadUtils threadUtils;
-    private final TaskQueue taskQueue;
-    private final MainThreadRunner mainThreadRunner;
-    private final AppLifecycleListener appLifecycleListener;
-    private final Clock clock;
-    private final DebugBehavior debugBehavior;
-    private final ActionManager actionManager;
-    private final Configuration configuration;
-    private final FeedKnownContent feedKnownContent;
-    private final FeedExtensionRegistry feedExtensionRegistry;
-    private final ClearAllListener clearAllListener;
-    private final BasicLoggingApi basicLoggingApi;
-    private final TooltipSupportedApi tooltipSupportedApi;
-    private final ApplicationInfo applicationInfo;
+    private final NetworkClient mNetworkClient;
+    private final ProtocolAdapter mProtocolAdapter;
+    private final RequestManager mRequestManager;
+    private final FeedSessionManager mFeedSessionManager;
+    private final Store mStore;
+    private final TimingUtils mTimingUtils;
+    private final ThreadUtils mThreadUtils;
+    private final TaskQueue mTaskQueue;
+    private final MainThreadRunner mMainThreadRunner;
+    private final AppLifecycleListener mAppLifecycleListener;
+    private final Clock mClock;
+    private final DebugBehavior mDebugBehavior;
+    private final ActionManager mActionManager;
+    private final Configuration mConfiguration;
+    private final FeedKnownContent mFeedKnownContent;
+    private final FeedExtensionRegistry mFeedExtensionRegistry;
+    private final ClearAllListener mClearAllListener;
+    private final BasicLoggingApi mBasicLoggingApi;
+    private final TooltipSupportedApi mTooltipSupportedApi;
+    private final ApplicationInfo mApplicationInfo;
 
     /** Created through the {@link Builder}. */
     public FeedProcessScope(BasicLoggingApi basicLoggingApi, NetworkClient networkClient,
@@ -79,51 +79,51 @@
             FeedKnownContent feedKnownContent, FeedExtensionRegistry feedExtensionRegistry,
             ClearAllListener clearAllListener, TooltipSupportedApi tooltipSupportedApi,
             ApplicationInfo applicationInfo) {
-        this.basicLoggingApi = basicLoggingApi;
-        this.networkClient = networkClient;
-        this.protocolAdapter = protocolAdapter;
-        this.requestManager = requestManager;
-        this.feedSessionManager = feedSessionManager;
-        this.store = store;
-        this.timingUtils = timingUtils;
-        this.threadUtils = threadUtils;
-        this.taskQueue = taskQueue;
-        this.mainThreadRunner = mainThreadRunner;
-        this.appLifecycleListener = appLifecycleListener;
-        this.clock = clock;
-        this.debugBehavior = debugBehavior;
-        this.actionManager = actionManager;
-        this.configuration = configuration;
-        this.feedKnownContent = feedKnownContent;
-        this.feedExtensionRegistry = feedExtensionRegistry;
-        this.clearAllListener = clearAllListener;
-        this.tooltipSupportedApi = tooltipSupportedApi;
-        this.applicationInfo = applicationInfo;
+        this.mBasicLoggingApi = basicLoggingApi;
+        this.mNetworkClient = networkClient;
+        this.mProtocolAdapter = protocolAdapter;
+        this.mRequestManager = requestManager;
+        this.mFeedSessionManager = feedSessionManager;
+        this.mStore = store;
+        this.mTimingUtils = timingUtils;
+        this.mThreadUtils = threadUtils;
+        this.mTaskQueue = taskQueue;
+        this.mMainThreadRunner = mainThreadRunner;
+        this.mAppLifecycleListener = appLifecycleListener;
+        this.mClock = clock;
+        this.mDebugBehavior = debugBehavior;
+        this.mActionManager = actionManager;
+        this.mConfiguration = configuration;
+        this.mFeedKnownContent = feedKnownContent;
+        this.mFeedExtensionRegistry = feedExtensionRegistry;
+        this.mClearAllListener = clearAllListener;
+        this.mTooltipSupportedApi = tooltipSupportedApi;
+        this.mApplicationInfo = applicationInfo;
     }
 
     @Override
     public void dump(Dumper dumper) {
         dumper.title(TAG);
-        if (protocolAdapter instanceof Dumpable) {
-            dumper.dump((Dumpable) protocolAdapter);
+        if (mProtocolAdapter instanceof Dumpable) {
+            dumper.dump((Dumpable) mProtocolAdapter);
         }
-        dumper.dump(timingUtils);
-        if (feedSessionManager instanceof Dumpable) {
-            dumper.dump((Dumpable) feedSessionManager);
+        dumper.dump(mTimingUtils);
+        if (mFeedSessionManager instanceof Dumpable) {
+            dumper.dump((Dumpable) mFeedSessionManager);
         }
-        if (store instanceof Dumpable) {
-            dumper.dump((Dumpable) store);
+        if (mStore instanceof Dumpable) {
+            dumper.dump((Dumpable) mStore);
         }
-        dumper.dump(clearAllListener);
+        dumper.dump(mClearAllListener);
     }
 
     @Override
     public void onDestroy() {
         try {
             Logger.i(TAG, "FeedProcessScope onDestroy called");
-            networkClient.close();
-            taskQueue.reset();
-            taskQueue.completeReset();
+            mNetworkClient.close();
+            mTaskQueue.reset();
+            mTaskQueue.completeReset();
         } catch (Exception ignored) {
             // Ignore exception when closing.
         }
@@ -131,41 +131,41 @@
 
     @Deprecated
     public ProtocolAdapter getProtocolAdapter() {
-        return protocolAdapter;
+        return mProtocolAdapter;
     }
 
     @Override
     public RequestManager getRequestManager() {
-        return requestManager;
+        return mRequestManager;
     }
 
     @Deprecated
     public TimingUtils getTimingUtils() {
-        return timingUtils;
+        return mTimingUtils;
     }
 
     @Override
     public TaskQueue getTaskQueue() {
-        return taskQueue;
+        return mTaskQueue;
     }
 
     @Override
     public AppLifecycleListener getAppLifecycleListener() {
-        return appLifecycleListener;
+        return mAppLifecycleListener;
     }
 
     @Deprecated
     public ActionManager getActionManager() {
-        return actionManager;
+        return mActionManager;
     }
 
     public KnownContent getKnownContent() {
-        return feedKnownContent;
+        return mFeedKnownContent;
     }
 
     @Deprecated
     public FeedExtensionRegistry getFeedExtensionRegistry() {
-        return feedExtensionRegistry;
+        return mFeedExtensionRegistry;
     }
 
     /**
@@ -179,10 +179,11 @@
             StreamConfiguration streamConfiguration, CardConfiguration cardConfiguration,
             SnackbarApi snackbarApi, OfflineIndicatorApi offlineIndicatorApi,
             TooltipApi tooltipApi) {
-        return new StreamScopeBuilder(context, actionApi, imageLoaderApi, protocolAdapter,
-                feedSessionManager, threadUtils, timingUtils, taskQueue, mainThreadRunner, clock,
-                debugBehavior, streamConfiguration, cardConfiguration, actionManager, configuration,
-                snackbarApi, basicLoggingApi, offlineIndicatorApi, feedKnownContent, tooltipApi,
-                tooltipSupportedApi, applicationInfo, feedExtensionRegistry);
+        return new StreamScopeBuilder(context, actionApi, imageLoaderApi, mProtocolAdapter,
+                mFeedSessionManager, mThreadUtils, mTimingUtils, mTaskQueue, mMainThreadRunner,
+                mClock, mDebugBehavior, streamConfiguration, cardConfiguration, mActionManager,
+                mConfiguration, snackbarApi, mBasicLoggingApi, offlineIndicatorApi,
+                mFeedKnownContent, tooltipApi, mTooltipSupportedApi, mApplicationInfo,
+                mFeedExtensionRegistry);
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/api/internal/scope/FeedStreamScope.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/api/internal/scope/FeedStreamScope.java
index bbc79b0..1c3499b1 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/api/internal/scope/FeedStreamScope.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/api/internal/scope/FeedStreamScope.java
@@ -10,21 +10,21 @@
 
 /** Per-stream instance of the feed library. */
 public final class FeedStreamScope implements StreamScope {
-    private final Stream stream;
-    private final ModelProviderFactory modelProviderFactory;
+    private final Stream mStream;
+    private final ModelProviderFactory mModelProviderFactory;
 
     public FeedStreamScope(Stream stream, ModelProviderFactory modelProviderFactory) {
-        this.stream = stream;
-        this.modelProviderFactory = modelProviderFactory;
+        this.mStream = stream;
+        this.mModelProviderFactory = modelProviderFactory;
     }
 
     @Override
     public Stream getStream() {
-        return stream;
+        return mStream;
     }
 
     @Override
     public ModelProviderFactory getModelProviderFactory() {
-        return modelProviderFactory;
+        return mModelProviderFactory;
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/basicstream/BasicStream.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/basicstream/BasicStream.java
index 9535ea75..a063eb4 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/basicstream/BasicStream.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/basicstream/BasicStream.java
@@ -97,58 +97,58 @@
     private static final long DEFAULT_MINIMUM_SPINNER_SHOW_TIME_MS = 500L;
     private static final long DEFAULT_SPINNER_DELAY_TIME_MS = 500L;
 
-    private final CardConfiguration cardConfiguration;
-    private final Clock clock;
-    private final Context context;
-    private final ThreadUtils threadUtils;
-    private final PietManager pietManager;
-    private final ModelProviderFactory modelProviderFactory;
-    private final ActionParserFactory actionParserFactory;
-    private final ActionApi actionApi;
-    private final ActionManager actionManager;
-    private final Configuration configuration;
-    private final SnackbarApi snackbarApi;
-    private final StreamContentChangedListener streamContentChangedListener;
-    private final DeepestContentTracker deepestContentTracker;
-    private final BasicLoggingApi basicLoggingApi;
-    private final long immediateContentThreshold;
-    private final StreamOfflineMonitor streamOfflineMonitor;
-    private final MainThreadRunner mainThreadRunner;
-    private final FeedKnownContent feedKnownContent;
-    private final ViewLoggingUpdater viewLoggingUpdater;
-    private final TooltipApi tooltipApi;
-    private final UiSessionRequestLogger uiSessionRequestLogger;
-    private final StreamConfiguration streamConfiguration;
-    private final BasicStreamScrollMonitor scrollMonitor;
-    private final long minimumSpinnerShowTime;
-    private final long spinnerDelayTime;
+    private final CardConfiguration mCardConfiguration;
+    private final Clock mClock;
+    private final Context mContext;
+    private final ThreadUtils mThreadUtils;
+    private final PietManager mPietManager;
+    private final ModelProviderFactory mModelProviderFactory;
+    private final ActionParserFactory mActionParserFactory;
+    private final ActionApi mActionApi;
+    private final ActionManager mActionManager;
+    private final Configuration mConfiguration;
+    private final SnackbarApi mSnackbarApi;
+    private final StreamContentChangedListener mStreamContentChangedListener;
+    private final DeepestContentTracker mDeepestContentTracker;
+    private final BasicLoggingApi mBasicLoggingApi;
+    private final long mImmediateContentThreshold;
+    private final StreamOfflineMonitor mStreamOfflineMonitor;
+    private final MainThreadRunner mMainThreadRunner;
+    private final FeedKnownContent mFeedKnownContent;
+    private final ViewLoggingUpdater mViewLoggingUpdater;
+    private final TooltipApi mTooltipApi;
+    private final UiSessionRequestLogger mUiSessionRequestLogger;
+    private final StreamConfiguration mStreamConfiguration;
+    private final BasicStreamScrollMonitor mScrollMonitor;
+    private final long mMinimumSpinnerShowTime;
+    private final long mSpinnerDelayTime;
 
-    private RecyclerView recyclerView;
-    private ContextMenuManager contextMenuManager;
-    private List<Header> headers;
-    private StreamRecyclerViewAdapter adapter;
-    private ScrollListenerNotifier scrollListenerNotifier;
-    private ScrollRestorer scrollRestorer;
-    private long sessionStartTimestamp;
-    private long initialLoadingSpinnerStartTime;
-    private boolean isInitialLoad = true;
-    private boolean isRestoring;
-    private boolean isDestroyed;
-    private boolean isStreamContentVisible = true;
+    private RecyclerView mRecyclerView;
+    private ContextMenuManager mContextMenuManager;
+    private List<Header> mHeaders;
+    private StreamRecyclerViewAdapter mAdapter;
+    private ScrollListenerNotifier mScrollListenerNotifier;
+    private ScrollRestorer mScrollRestorer;
+    private long mSessionStartTimestamp;
+    private long mInitialLoadingSpinnerStartTime;
+    private boolean mIsInitialLoad = true;
+    private boolean mIsRestoring;
+    private boolean mIsDestroyed;
+    private boolean mIsStreamContentVisible = true;
 
     @LoggingState
-    private int loggingState = LoggingState.STARTING;
+    private int mLoggingState = LoggingState.STARTING;
 
-    /*@MonotonicNonNull*/ private ModelProvider modelProvider;
-    /*@MonotonicNonNull*/ private StreamDriver streamDriver;
+    /*@MonotonicNonNull*/ private ModelProvider mModelProvider;
+    /*@MonotonicNonNull*/ private StreamDriver mStreamDriver;
 
-    /*@Nullable*/ private String savedSessionId;
-    /*@Nullable*/ private CancelableTask cancellableShowSpinnerRunnable;
+    /*@Nullable*/ private String mSavedSessionId;
+    /*@Nullable*/ private CancelableTask mCancellableShowSpinnerRunnable;
 
     // TODO: instead of using a nullable field, pipe UiContext through the creation of
     // ModelProviders to onSessionStart().
-    private UiRefreshReason uiRefreshReason = UiRefreshReason.getDefaultInstance();
-    private StreamItemAnimator itemAnimator;
+    private UiRefreshReason mUiRefreshReason = UiRefreshReason.getDefaultInstance();
+    private StreamItemAnimator mItemAnimator;
 
     public BasicStream(Context context, StreamConfiguration streamConfiguration,
             CardConfiguration cardConfiguration, ImageLoaderApi imageLoaderApi,
@@ -160,38 +160,38 @@
             Configuration configuration, SnackbarApi snackbarApi, BasicLoggingApi basicLoggingApi,
             OfflineIndicatorApi offlineIndicatorApi, MainThreadRunner mainThreadRunner,
             FeedKnownContent feedKnownContent, TooltipApi tooltipApi, boolean isBackgroundDark) {
-        this.cardConfiguration = cardConfiguration;
-        this.clock = clock;
-        this.threadUtils = threadUtils;
-        this.streamOfflineMonitor = new StreamOfflineMonitor(offlineIndicatorApi);
-        this.headers = headers;
-        this.modelProviderFactory = modelProviderFactory;
-        this.streamConfiguration = streamConfiguration;
-        this.actionParserFactory = actionParserFactory;
-        this.actionApi = actionApi;
-        this.actionManager = actionManager;
-        this.configuration = configuration;
-        this.snackbarApi = snackbarApi;
-        this.mainThreadRunner = mainThreadRunner;
-        this.streamContentChangedListener = createStreamContentChangedListener();
-        this.deepestContentTracker = new DeepestContentTracker();
-        this.basicLoggingApi = basicLoggingApi;
-        this.immediateContentThreshold =
+        this.mCardConfiguration = cardConfiguration;
+        this.mClock = clock;
+        this.mThreadUtils = threadUtils;
+        this.mStreamOfflineMonitor = new StreamOfflineMonitor(offlineIndicatorApi);
+        this.mHeaders = headers;
+        this.mModelProviderFactory = modelProviderFactory;
+        this.mStreamConfiguration = streamConfiguration;
+        this.mActionParserFactory = actionParserFactory;
+        this.mActionApi = actionApi;
+        this.mActionManager = actionManager;
+        this.mConfiguration = configuration;
+        this.mSnackbarApi = snackbarApi;
+        this.mMainThreadRunner = mainThreadRunner;
+        this.mStreamContentChangedListener = createStreamContentChangedListener();
+        this.mDeepestContentTracker = new DeepestContentTracker();
+        this.mBasicLoggingApi = basicLoggingApi;
+        this.mImmediateContentThreshold =
                 configuration.getValueOrDefault(ConfigKey.LOGGING_IMMEDIATE_CONTENT_THRESHOLD_MS,
                         DEFAULT_LOGGING_IMMEDIATE_CONTENT_THRESHOLD_MS);
-        this.feedKnownContent = feedKnownContent;
-        viewLoggingUpdater = createViewLoggingUpdater();
-        this.uiSessionRequestLogger = new UiSessionRequestLogger(clock, basicLoggingApi);
-        this.tooltipApi = tooltipApi;
-        this.pietManager = createPietManager(context, cardConfiguration, imageLoaderApi,
+        this.mFeedKnownContent = feedKnownContent;
+        mViewLoggingUpdater = createViewLoggingUpdater();
+        this.mUiSessionRequestLogger = new UiSessionRequestLogger(clock, basicLoggingApi);
+        this.mTooltipApi = tooltipApi;
+        this.mPietManager = createPietManager(context, cardConfiguration, imageLoaderApi,
                 customElementProvider, debugBehavior, clock, hostBindingProvider,
-                streamOfflineMonitor, configuration, isBackgroundDark);
-        this.context =
+                mStreamOfflineMonitor, configuration, isBackgroundDark);
+        this.mContext =
                 new ContextThemeWrapper(context, (isBackgroundDark ? R.style.Dark : R.style.Light));
-        this.scrollMonitor = new BasicStreamScrollMonitor(clock);
-        this.minimumSpinnerShowTime = configuration.getValueOrDefault(
+        this.mScrollMonitor = new BasicStreamScrollMonitor(clock);
+        this.mMinimumSpinnerShowTime = configuration.getValueOrDefault(
                 ConfigKey.SPINNER_MINIMUM_SHOW_TIME_MS, DEFAULT_MINIMUM_SPINNER_SHOW_TIME_MS);
-        this.spinnerDelayTime = configuration.getValueOrDefault(
+        this.mSpinnerDelayTime = configuration.getValueOrDefault(
                 ConfigKey.SPINNER_DELAY_MS, DEFAULT_SPINNER_DELAY_TIME_MS);
     }
 
@@ -232,12 +232,12 @@
 
     @Override
     public void onCreate(/*@Nullable*/ String savedInstanceState) {
-        checkState(recyclerView == null, "Can't call onCreate() multiple times.");
+        checkState(mRecyclerView == null, "Can't call onCreate() multiple times.");
         setupRecyclerView();
 
         if (savedInstanceState == null) {
-            scrollRestorer =
-                    createScrollRestorer(configuration, recyclerView, scrollListenerNotifier, null);
+            mScrollRestorer = createScrollRestorer(
+                    mConfiguration, mRecyclerView, mScrollListenerNotifier, null);
             return;
         }
 
@@ -246,34 +246,34 @@
                     Base64.decode(savedInstanceState, Base64.DEFAULT));
 
             if (streamSavedInstanceState.hasSessionId()) {
-                savedSessionId = streamSavedInstanceState.getSessionId();
+                mSavedSessionId = streamSavedInstanceState.getSessionId();
             }
 
-            scrollRestorer = createScrollRestorer(configuration, recyclerView,
-                    scrollListenerNotifier, streamSavedInstanceState.getScrollState());
+            mScrollRestorer = createScrollRestorer(mConfiguration, mRecyclerView,
+                    mScrollListenerNotifier, streamSavedInstanceState.getScrollState());
         } catch (IllegalArgumentException | InvalidProtocolBufferException e) {
             Logger.wtf(TAG, "Could not parse saved instance state String.");
-            scrollRestorer =
-                    createScrollRestorer(configuration, recyclerView, scrollListenerNotifier, null);
+            mScrollRestorer = createScrollRestorer(
+                    mConfiguration, mRecyclerView, mScrollListenerNotifier, null);
         }
     }
 
     @Override
     public void onShow() {
         // Only create model provider if Stream content is visible.
-        if (isStreamContentVisible) {
+        if (mIsStreamContentVisible) {
             createModelProviderAndStreamDriver();
         } else {
-            if (loggingState == LoggingState.STARTING) {
-                basicLoggingApi.onOpenedWithNoContent();
-                loggingState = LoggingState.LOGGED_NO_CONTENT;
+            if (mLoggingState == LoggingState.STARTING) {
+                mBasicLoggingApi.onOpenedWithNoContent();
+                mLoggingState = LoggingState.LOGGED_NO_CONTENT;
             }
 
             // If Stream content is not visible, we will not create the StreamDriver and restore the
             // scroll position automatically. So we try to restore the scroll position before.
-            scrollRestorer.maybeRestoreScroll();
+            mScrollRestorer.maybeRestoreScroll();
         }
-        adapter.setShown(true);
+        mAdapter.setShown(true);
     }
 
     @Override
@@ -284,28 +284,28 @@
 
     @Override
     public void onHide() {
-        adapter.setShown(false);
-        contextMenuManager.dismissPopup();
+        mAdapter.setShown(false);
+        mContextMenuManager.dismissPopup();
     }
 
     @Override
     public void onDestroy() {
-        if (isDestroyed) {
+        if (mIsDestroyed) {
             Logger.e(TAG, "onDestroy() called multiple times.");
             return;
         }
-        adapter.onDestroy();
-        recyclerView.removeOnLayoutChangeListener(this);
-        if (modelProvider != null) {
-            modelProvider.unregisterObserver(this);
-            modelProvider.detachModelProvider();
+        mAdapter.onDestroy();
+        mRecyclerView.removeOnLayoutChangeListener(this);
+        if (mModelProvider != null) {
+            mModelProvider.unregisterObserver(this);
+            mModelProvider.detachModelProvider();
         }
-        if (streamDriver != null) {
-            streamDriver.onDestroy();
+        if (mStreamDriver != null) {
+            mStreamDriver.onDestroy();
         }
-        streamOfflineMonitor.onDestroy();
-        uiSessionRequestLogger.onDestroy();
-        isDestroyed = true;
+        mStreamOfflineMonitor.onDestroy();
+        mUiSessionRequestLogger.onDestroy();
+        mIsDestroyed = true;
     }
 
     @Override
@@ -318,12 +318,12 @@
     @Override
     public String getSavedInstanceStateString() {
         StreamSavedInstanceState.Builder builder = StreamSavedInstanceState.newBuilder();
-        if (modelProvider != null && modelProvider.getSessionId() != null) {
-            builder.setSessionId(checkNotNull(modelProvider.getSessionId()));
+        if (mModelProvider != null && mModelProvider.getSessionId() != null) {
+            builder.setSessionId(checkNotNull(mModelProvider.getSessionId()));
         }
 
         ScrollState scrollState =
-                scrollRestorer.getScrollStateForScrollRestore(adapter.getHeaderCount());
+                mScrollRestorer.getScrollStateForScrollRestore(mAdapter.getHeaderCount());
         if (scrollState != null) {
             builder.setScrollState(scrollState);
         }
@@ -333,56 +333,56 @@
 
     @Override
     public View getView() {
-        checkState(recyclerView != null, "Must call onCreate() before getView()");
-        return recyclerView;
+        checkState(mRecyclerView != null, "Must call onCreate() before getView()");
+        return mRecyclerView;
     }
 
     @VisibleForTesting
     StreamRecyclerViewAdapter getAdapter() {
-        return adapter;
+        return mAdapter;
     }
 
     @Override
     public void setHeaderViews(List<Header> headers) {
         Logger.i(TAG, "Setting %s header views, currently have %s headers", headers.size(),
-                this.headers.size());
+                this.mHeaders.size());
 
-        this.headers = headers;
-        adapter.setHeaders(headers);
+        this.mHeaders = headers;
+        mAdapter.setHeaders(headers);
     }
 
     @Override
     public void setStreamContentVisibility(boolean visible) {
-        checkNotNull(adapter, "onCreate must be called before setStreamContentVisibility");
+        checkNotNull(mAdapter, "onCreate must be called before setStreamContentVisibility");
 
-        if (visible == isStreamContentVisible) {
+        if (visible == mIsStreamContentVisible) {
             return;
         }
 
-        isStreamContentVisible = visible;
+        mIsStreamContentVisible = visible;
 
-        if (isStreamContentVisible) {
-            viewLoggingUpdater.resetViewTracking();
+        if (mIsStreamContentVisible) {
+            mViewLoggingUpdater.resetViewTracking();
         }
 
         // If Stream content was previously not visible, ModelProvider might need to be created.
-        if (isStreamContentVisible && modelProvider == null) {
+        if (mIsStreamContentVisible && mModelProvider == null) {
             createModelProviderAndStreamDriver();
         }
 
-        itemAnimator.setStreamVisibility(isStreamContentVisible);
-        adapter.setStreamContentVisible(isStreamContentVisible);
+        mItemAnimator.setStreamVisibility(mIsStreamContentVisible);
+        mAdapter.setStreamContentVisible(mIsStreamContentVisible);
     }
 
     @Override
     public void trim() {
-        pietManager.purgeRecyclerPools();
-        recyclerView.getRecycledViewPool().clear();
+        mPietManager.purgeRecyclerPools();
+        mRecyclerView.getRecycledViewPool().clear();
     }
 
     @Override
     public void smoothScrollBy(int dx, int dy) {
-        recyclerView.smoothScrollBy(dx, dy);
+        mRecyclerView.smoothScrollBy(dx, dy);
     }
 
     @Override
@@ -391,7 +391,7 @@
             return POSITION_NOT_KNOWN;
         }
 
-        LinearLayoutManager layoutManager = (LinearLayoutManager) recyclerView.getLayoutManager();
+        LinearLayoutManager layoutManager = (LinearLayoutManager) mRecyclerView.getLayoutManager();
         if (layoutManager == null) {
             return POSITION_NOT_KNOWN;
         }
@@ -406,7 +406,7 @@
 
     @Override
     public boolean isChildAtPositionVisible(int position) {
-        LinearLayoutManager layoutManager = (LinearLayoutManager) recyclerView.getLayoutManager();
+        LinearLayoutManager layoutManager = (LinearLayoutManager) mRecyclerView.getLayoutManager();
         if (layoutManager == null) {
             return false;
         }
@@ -423,121 +423,121 @@
 
     @Override
     public void addScrollListener(ScrollListener listener) {
-        scrollListenerNotifier.addScrollListener(listener);
+        mScrollListenerNotifier.addScrollListener(listener);
     }
 
     @Override
     public void removeScrollListener(ScrollListener listener) {
-        scrollListenerNotifier.removeScrollListener(listener);
+        mScrollListenerNotifier.removeScrollListener(listener);
     }
 
     @Override
     public void addOnContentChangedListener(ContentChangedListener listener) {
-        streamContentChangedListener.addContentChangedListener(listener);
+        mStreamContentChangedListener.addContentChangedListener(listener);
     }
 
     @Override
     public void removeOnContentChangedListener(ContentChangedListener listener) {
-        streamContentChangedListener.removeContentChangedListener(listener);
+        mStreamContentChangedListener.removeContentChangedListener(listener);
     }
 
     @Override
     public void triggerRefresh() {
-        if (streamDriver == null || modelProvider == null) {
+        if (mStreamDriver == null || mModelProvider == null) {
             Logger.w(TAG,
                     "Refresh requested before Stream was shown.  Scheduler should be used instead "
                             + "in this instance.");
             return;
         }
 
-        // This invalidates the modelProvider, which results in onSessionFinished() then
+        // This invalidates the mModelProvider, which results in onSessionFinished() then
         // onSessionStart() being called, leading to recreating the entire stream.
-        streamDriver.showSpinner();
-        modelProvider.triggerRefresh(RequestReason.HOST_REQUESTED);
+        mStreamDriver.showSpinner();
+        mModelProvider.triggerRefresh(RequestReason.HOST_REQUESTED);
     }
 
     @Override
     public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft,
             int oldTop, int oldRight, int oldBottom) {
         if ((oldLeft != 0 && left != oldLeft) || (oldRight != 0 && right != oldRight)) {
-            checkNotNull(adapter, "onCreate must be called before so that adapter is set.")
+            checkNotNull(mAdapter, "onCreate must be called before so that adapter is set.")
                     .rebind();
         }
 
-        contextMenuManager.dismissPopup();
+        mContextMenuManager.dismissPopup();
     }
 
     private void setupRecyclerView() {
-        recyclerView = new RecyclerView(context);
-        scrollListenerNotifier = createScrollListenerNotifier(
-                streamContentChangedListener, scrollMonitor, mainThreadRunner);
-        recyclerView.addOnScrollListener(scrollMonitor);
-        adapter = createRecyclerViewAdapter(context, cardConfiguration, pietManager,
-                deepestContentTracker, streamContentChangedListener, scrollMonitor, configuration,
-                new PietEventLogger(basicLoggingApi));
-        adapter.setHeaders(headers);
-        recyclerView.setId(R.id.feed_stream_recycler_view);
-        recyclerView.setLayoutManager(createRecyclerViewLayoutManager(context));
-        contextMenuManager = createContextMenuManager(recyclerView, new MenuMeasurer(context));
-        new ItemTouchHelper(new StreamItemTouchCallbacks()).attachToRecyclerView(recyclerView);
-        recyclerView.setAdapter(adapter);
-        recyclerView.setClipToPadding(false);
+        mRecyclerView = new RecyclerView(mContext);
+        mScrollListenerNotifier = createScrollListenerNotifier(
+                mStreamContentChangedListener, mScrollMonitor, mMainThreadRunner);
+        mRecyclerView.addOnScrollListener(mScrollMonitor);
+        mAdapter = createRecyclerViewAdapter(mContext, mCardConfiguration, mPietManager,
+                mDeepestContentTracker, mStreamContentChangedListener, mScrollMonitor,
+                mConfiguration, new PietEventLogger(mBasicLoggingApi));
+        mAdapter.setHeaders(mHeaders);
+        mRecyclerView.setId(R.id.feed_stream_recycler_view);
+        mRecyclerView.setLayoutManager(createRecyclerViewLayoutManager(mContext));
+        mContextMenuManager = createContextMenuManager(mRecyclerView, new MenuMeasurer(mContext));
+        new ItemTouchHelper(new StreamItemTouchCallbacks()).attachToRecyclerView(mRecyclerView);
+        mRecyclerView.setAdapter(mAdapter);
+        mRecyclerView.setClipToPadding(false);
         if (VERSION.SDK_INT > VERSION_CODES.JELLY_BEAN) {
-            recyclerView.setPaddingRelative(streamConfiguration.getPaddingStart(),
-                    streamConfiguration.getPaddingTop(), streamConfiguration.getPaddingEnd(),
-                    streamConfiguration.getPaddingBottom());
+            mRecyclerView.setPaddingRelative(mStreamConfiguration.getPaddingStart(),
+                    mStreamConfiguration.getPaddingTop(), mStreamConfiguration.getPaddingEnd(),
+                    mStreamConfiguration.getPaddingBottom());
         } else {
-            recyclerView.setPadding(streamConfiguration.getPaddingStart(),
-                    streamConfiguration.getPaddingTop(), streamConfiguration.getPaddingEnd(),
-                    streamConfiguration.getPaddingBottom());
+            mRecyclerView.setPadding(mStreamConfiguration.getPaddingStart(),
+                    mStreamConfiguration.getPaddingTop(), mStreamConfiguration.getPaddingEnd(),
+                    mStreamConfiguration.getPaddingBottom());
         }
 
-        itemAnimator = new StreamItemAnimator(streamContentChangedListener);
-        itemAnimator.setStreamVisibility(isStreamContentVisible);
+        mItemAnimator = new StreamItemAnimator(mStreamContentChangedListener);
+        mItemAnimator.setStreamVisibility(mIsStreamContentVisible);
 
-        recyclerView.setItemAnimator(itemAnimator);
-        recyclerView.addOnLayoutChangeListener(this);
+        mRecyclerView.setItemAnimator(mItemAnimator);
+        mRecyclerView.addOnLayoutChangeListener(this);
     }
 
     private void updateAdapterAfterSessionStart(ModelProvider modelProvider) {
-        StreamDriver newStreamDriver = createStreamDriver(actionApi, actionManager,
-                actionParserFactory, modelProvider, threadUtils, clock, configuration, context,
-                snackbarApi, streamContentChangedListener, scrollRestorer, basicLoggingApi,
-                streamOfflineMonitor, feedKnownContent, contextMenuManager, isRestoring,
-                /* isInitialLoad= */ false, mainThreadRunner, tooltipApi, uiRefreshReason,
-                scrollListenerNotifier);
+        StreamDriver newStreamDriver = createStreamDriver(mActionApi, mActionManager,
+                mActionParserFactory, modelProvider, mThreadUtils, mClock, mConfiguration, mContext,
+                mSnackbarApi, mStreamContentChangedListener, mScrollRestorer, mBasicLoggingApi,
+                mStreamOfflineMonitor, mFeedKnownContent, mContextMenuManager, mIsRestoring,
+                /* isInitialLoad= */ false, mMainThreadRunner, mTooltipApi, mUiRefreshReason,
+                mScrollListenerNotifier);
 
-        uiRefreshReason = UiRefreshReason.getDefaultInstance();
+        mUiRefreshReason = UiRefreshReason.getDefaultInstance();
 
         // If after starting a new session the Stream is still empty, we should show the zero state.
         if (newStreamDriver.getLeafFeatureDrivers().isEmpty()) {
             newStreamDriver.showZeroState(ZeroStateShowReason.NO_CONTENT);
         }
-        if (loggingState == LoggingState.STARTING && modelProvider.getCurrentState() == State.READY
+        if (mLoggingState == LoggingState.STARTING && modelProvider.getCurrentState() == State.READY
                 && modelProvider.getRootFeature() == null) {
-            basicLoggingApi.onOpenedWithNoContent();
-            loggingState = LoggingState.LOGGED_NO_CONTENT;
+            mBasicLoggingApi.onOpenedWithNoContent();
+            mLoggingState = LoggingState.LOGGED_NO_CONTENT;
         }
 
         // If old and new stream driver are both showing the zero state, do not replace the old
         // stream driver. This prevents the zero state flashing if the old and new stream drivers
         // are both displaying the same content. The old stream driver will be updated with the new
         // model provider.
-        if (streamDriver != null && streamDriver.isZeroStateBeingShown()
+        if (mStreamDriver != null && mStreamDriver.isZeroStateBeingShown()
                 && newStreamDriver.isZeroStateBeingShown()) {
-            streamDriver.setModelProviderForZeroState(modelProvider);
+            mStreamDriver.setModelProviderForZeroState(modelProvider);
             newStreamDriver.onDestroy();
             return;
         }
-        if (streamDriver != null) {
-            streamDriver.onDestroy();
+        if (mStreamDriver != null) {
+            mStreamDriver.onDestroy();
         }
-        streamDriver = newStreamDriver;
-        adapter.setDriver(newStreamDriver);
-        deepestContentTracker.reset();
+        mStreamDriver = newStreamDriver;
+        mAdapter.setDriver(newStreamDriver);
+        mDeepestContentTracker.reset();
 
-        if (streamDriver.hasContent()) {
-            isInitialLoad = false;
+        if (mStreamDriver.hasContent()) {
+            mIsInitialLoad = false;
         }
 
         logContent();
@@ -545,33 +545,33 @@
 
     @Override
     public void onSessionStart(UiContext uiContext) {
-        threadUtils.checkMainThread();
+        mThreadUtils.checkMainThread();
 
-        if (cancellableShowSpinnerRunnable != null) {
-            cancellableShowSpinnerRunnable.cancel();
-            cancellableShowSpinnerRunnable = null;
+        if (mCancellableShowSpinnerRunnable != null) {
+            mCancellableShowSpinnerRunnable.cancel();
+            mCancellableShowSpinnerRunnable = null;
         }
 
         ModelProvider localModelProvider =
-                checkNotNull(modelProvider, "Model Provider must be set if a session is active");
+                checkNotNull(mModelProvider, "Model Provider must be set if a session is active");
         // On initial load, if a loading spinner is currently being shown, the spinner must be shown
         // for at least the time specified in MINIMUM_SPINNER_SHOW_TIME.
-        if (isInitialLoad && initialLoadingSpinnerStartTime != 0L) {
-            long spinnerDisplayTime = clock.currentTimeMillis() - initialLoadingSpinnerStartTime;
+        if (mIsInitialLoad && mInitialLoadingSpinnerStartTime != 0L) {
+            long spinnerDisplayTime = mClock.currentTimeMillis() - mInitialLoadingSpinnerStartTime;
             // If MINIMUM_SPINNER_SHOW_TIME has elapsed, the new content can be shown immediately.
-            if (spinnerDisplayTime >= minimumSpinnerShowTime) {
+            if (spinnerDisplayTime >= mMinimumSpinnerShowTime) {
                 updateAdapterAfterSessionStart(localModelProvider);
             } else {
                 // If MINIMUM_SPINNER_SHOW_TIME has not elapsed, the new content should only be
                 // shown once the remaining time has been fulfilled.
-                mainThreadRunner.executeWithDelay(TAG + " onSessionStart", () -> {
+                mMainThreadRunner.executeWithDelay(TAG + " onSessionStart", () -> {
                     // Only show content if model providers are the same. If they are different,
                     // this indicates that the session finished before the spinner show time
                     // elapsed.
-                    if (modelProvider == localModelProvider) {
+                    if (mModelProvider == localModelProvider) {
                         updateAdapterAfterSessionStart(localModelProvider);
                     }
-                }, minimumSpinnerShowTime - spinnerDisplayTime);
+                }, mMinimumSpinnerShowTime - spinnerDisplayTime);
             }
         } else {
             updateAdapterAfterSessionStart(localModelProvider);
@@ -579,27 +579,27 @@
     }
 
     private void logContent() {
-        if (loggingState == LoggingState.STARTING) {
-            long timeToPopulateMs = clock.currentTimeMillis() - sessionStartTimestamp;
-            if (timeToPopulateMs > immediateContentThreshold) {
-                basicLoggingApi.onOpenedWithNoImmediateContent();
+        if (mLoggingState == LoggingState.STARTING) {
+            long timeToPopulateMs = mClock.currentTimeMillis() - mSessionStartTimestamp;
+            if (timeToPopulateMs > mImmediateContentThreshold) {
+                mBasicLoggingApi.onOpenedWithNoImmediateContent();
             }
 
-            if (checkNotNull(streamDriver).hasContent()) {
-                basicLoggingApi.onOpenedWithContent((int) timeToPopulateMs,
-                        checkNotNull(streamDriver).getLeafFeatureDrivers().size());
+            if (checkNotNull(mStreamDriver).hasContent()) {
+                mBasicLoggingApi.onOpenedWithContent((int) timeToPopulateMs,
+                        checkNotNull(mStreamDriver).getLeafFeatureDrivers().size());
                 // onOpenedWithContent should only be logged the first time the Stream is opened up.
-                loggingState = LoggingState.LOGGED_CONTENT_SHOWN;
+                mLoggingState = LoggingState.LOGGED_CONTENT_SHOWN;
             } else {
-                basicLoggingApi.onOpenedWithNoContent();
-                loggingState = LoggingState.LOGGED_NO_CONTENT;
+                mBasicLoggingApi.onOpenedWithNoContent();
+                mLoggingState = LoggingState.LOGGED_NO_CONTENT;
             }
         }
     }
 
     @Override
     public void onSessionFinished(UiContext uiContext) {
-        if (isDestroyed) {
+        if (mIsDestroyed) {
             // This seems to be getting called after onDestroy(), resulting in unregistering from
             // the ModelProvider twice, which causes a crash.
             Logger.e(TAG, "onSessionFinished called after onDestroy()");
@@ -611,29 +611,29 @@
         // scroll it would be to a card which is no longer present.  For simplicity just abandon
         // scroll restoring for now.  We can improve logic if this doesn't prove to be sufficient
         // enough.
-        scrollRestorer.abandonRestoringScroll();
+        mScrollRestorer.abandonRestoringScroll();
 
         // At this point, the StreamDriver shouldn't be null. However, the
-        // cancellableShowSpinnerRunnable could be null or not, depending on whether this spinner is
-        // finishing because a failed restore or because the session started. If a spinner is queued
-        // to show, we want to show that one with its delay, otherwise we show a new one with a new
-        // delay.
-        if (streamDriver != null && cancellableShowSpinnerRunnable == null) {
+        // mCancellableShowSpinnerRunnable could be null or not, depending on whether this spinner
+        // is finishing because a failed restore or because the session started. If a spinner is
+        // queued to show, we want to show that one with its delay, otherwise we show a new one with
+        // a new delay.
+        if (mStreamDriver != null && mCancellableShowSpinnerRunnable == null) {
             showSpinnerWithDelay();
         }
 
-        isRestoring = false;
+        mIsRestoring = false;
 
-        if (modelProvider != null) {
-            modelProvider.unregisterObserver(this);
+        if (mModelProvider != null) {
+            mModelProvider.unregisterObserver(this);
         }
-        uiRefreshReason = uiContext.getExtension(UiRefreshReason.uiRefreshReasonExtension);
+        mUiRefreshReason = uiContext.getExtension(UiRefreshReason.uiRefreshReasonExtension);
 
         // TODO: Instead of setting the refresh reseason, pipe the UiContext through here.
-        modelProvider = modelProviderFactory.createNew(
-                deepestContentTracker, UiContext.getDefaultInstance());
+        mModelProvider = mModelProviderFactory.createNew(
+                mDeepestContentTracker, UiContext.getDefaultInstance());
 
-        registerObserversOnModelProvider(modelProvider);
+        registerObserversOnModelProvider(mModelProvider);
     }
 
     @Override
@@ -642,26 +642,26 @@
             Logger.wtf(TAG, "Not expecting non NO_CARDS_ERROR type.");
         }
 
-        if (loggingState == LoggingState.STARTING) {
-            basicLoggingApi.onOpenedWithNoContent();
-            loggingState = LoggingState.LOGGED_NO_CONTENT;
+        if (mLoggingState == LoggingState.STARTING) {
+            mBasicLoggingApi.onOpenedWithNoContent();
+            mLoggingState = LoggingState.LOGGED_NO_CONTENT;
         }
 
-        scrollRestorer.abandonRestoringScroll();
-        if (streamDriver != null) {
-            streamDriver.showZeroState(ZeroStateShowReason.ERROR);
+        mScrollRestorer.abandonRestoringScroll();
+        if (mStreamDriver != null) {
+            mStreamDriver.showZeroState(ZeroStateShowReason.ERROR);
         }
     }
 
     private void createModelProviderAndStreamDriver() {
-        if (modelProvider == null) {
+        if (mModelProvider == null) {
             // For nullness checker
             ModelProvider localModelProvider = null;
-            String localSavedSessionId = savedSessionId;
+            String localSavedSessionId = mSavedSessionId;
             if (localSavedSessionId != null) {
-                isRestoring = true;
+                mIsRestoring = true;
                 Logger.d(TAG, "Attempting to restoring session with id: %s.", localSavedSessionId);
-                localModelProvider = modelProviderFactory.create(
+                localModelProvider = mModelProviderFactory.create(
                         localSavedSessionId, UiContext.getDefaultInstance());
             }
 
@@ -669,40 +669,40 @@
                 // If a session is no longer valid then a ModelProvider will not have been created
                 // above.
                 Logger.d(TAG, "Creating new session for showing.");
-                localModelProvider = modelProviderFactory.createNew(
-                        deepestContentTracker, UiContext.getDefaultInstance());
+                localModelProvider = mModelProviderFactory.createNew(
+                        mDeepestContentTracker, UiContext.getDefaultInstance());
             }
 
-            sessionStartTimestamp = clock.currentTimeMillis();
-            modelProvider = localModelProvider;
+            mSessionStartTimestamp = mClock.currentTimeMillis();
+            mModelProvider = localModelProvider;
 
-            registerObserversOnModelProvider(modelProvider);
+            registerObserversOnModelProvider(mModelProvider);
         }
 
-        if (streamDriver == null) {
+        if (mStreamDriver == null) {
             // If the ModelProvider is not ready we don't want to restore the Stream at all. Instead
             // we need to wait for it to become active and we can reset the StreamDriver with the
             // correct scroll restorer in order to finally restore scroll position.
-            ScrollRestorer initialScrollRestorer = modelProvider.getCurrentState() == State.READY
-                    ? scrollRestorer
+            ScrollRestorer initialScrollRestorer = mModelProvider.getCurrentState() == State.READY
+                    ? mScrollRestorer
                     : createNonRestoringScrollRestorer(
-                            configuration, recyclerView, scrollListenerNotifier);
+                            mConfiguration, mRecyclerView, mScrollListenerNotifier);
 
-            streamDriver = createStreamDriver(actionApi, actionManager, actionParserFactory,
-                    modelProvider, threadUtils, clock, configuration, context, snackbarApi,
-                    streamContentChangedListener, initialScrollRestorer, basicLoggingApi,
-                    streamOfflineMonitor, feedKnownContent, contextMenuManager, isRestoring,
-                    isInitialLoad, mainThreadRunner, tooltipApi,
-                    UiRefreshReason.getDefaultInstance(), scrollListenerNotifier);
+            mStreamDriver = createStreamDriver(mActionApi, mActionManager, mActionParserFactory,
+                    mModelProvider, mThreadUtils, mClock, mConfiguration, mContext, mSnackbarApi,
+                    mStreamContentChangedListener, initialScrollRestorer, mBasicLoggingApi,
+                    mStreamOfflineMonitor, mFeedKnownContent, mContextMenuManager, mIsRestoring,
+                    mIsInitialLoad, mMainThreadRunner, mTooltipApi,
+                    UiRefreshReason.getDefaultInstance(), mScrollListenerNotifier);
 
             showSpinnerWithDelay();
-            adapter.setDriver(streamDriver);
+            mAdapter.setDriver(mStreamDriver);
         }
     }
 
     private void showSpinnerWithDelay() {
-        cancellableShowSpinnerRunnable = mainThreadRunner.executeWithDelay(
-                TAG + " onShow", new ShowSpinnerRunnable(), spinnerDelayTime);
+        mCancellableShowSpinnerRunnable = mMainThreadRunner.executeWithDelay(
+                TAG + " onShow", new ShowSpinnerRunnable(), mSpinnerDelayTime);
     }
 
     private String convertStreamSavedInstanceStateToString(
@@ -712,7 +712,7 @@
 
     private void registerObserversOnModelProvider(ModelProvider modelProvider) {
         modelProvider.registerObserver(this);
-        uiSessionRequestLogger.onSessionRequested(modelProvider);
+        mUiSessionRequestLogger.onSessionRequested(modelProvider);
     }
 
     @VisibleForTesting
@@ -728,8 +728,8 @@
         return new StreamDriver(actionApi, actionManager, actionParserFactory, modelProvider,
                 threadUtils, clock, configuration, context, snackbarApi, contentChangedListener,
                 scrollRestorer, basicLoggingApi, streamOfflineMonitor, feedKnownContent,
-                contextMenuManager, restoring, isInitialLoad, mainThreadRunner, viewLoggingUpdater,
-                tooltipApi, uiRefreshReason, scrollMonitor);
+                contextMenuManager, restoring, isInitialLoad, mainThreadRunner, mViewLoggingUpdater,
+                tooltipApi, uiRefreshReason, mScrollMonitor);
     }
 
     @VisibleForTesting
@@ -739,7 +739,7 @@
             StreamContentChangedListener streamContentChangedListener,
             ScrollObservable scrollObservable, Configuration configuration,
             PietEventLogger pietEventLogger) {
-        return new StreamRecyclerViewAdapter(context, recyclerView, cardConfiguration, pietManager,
+        return new StreamRecyclerViewAdapter(context, mRecyclerView, cardConfiguration, pietManager,
                 deepestContentTracker, streamContentChangedListener, scrollObservable,
                 configuration, pietEventLogger);
     }
@@ -781,9 +781,9 @@
             RecyclerView recyclerView, MenuMeasurer menuMeasurer) {
         ContextMenuManager manager;
         if (VERSION.SDK_INT > VERSION_CODES.M) {
-            manager = new ContextMenuManagerImpl(menuMeasurer, context);
+            manager = new ContextMenuManagerImpl(menuMeasurer, mContext);
         } else {
-            manager = new FloatingContextMenuManager(context);
+            manager = new FloatingContextMenuManager(mContext);
         }
         manager.setView(recyclerView);
         return manager;
@@ -805,9 +805,9 @@
     private final class ShowSpinnerRunnable implements Runnable {
         @Override
         public void run() {
-            checkNotNull(streamDriver).showSpinner();
-            initialLoadingSpinnerStartTime = clock.currentTimeMillis();
-            BasicStream.this.cancellableShowSpinnerRunnable = null;
+            checkNotNull(mStreamDriver).showSpinner();
+            mInitialLoadingSpinnerStartTime = mClock.currentTimeMillis();
+            BasicStream.this.mCancellableShowSpinnerRunnable = null;
         }
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/basicstream/internal/StreamItemAnimator.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/basicstream/internal/StreamItemAnimator.java
index 3c4467bfd..f01f6efe 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/basicstream/internal/StreamItemAnimator.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/basicstream/internal/StreamItemAnimator.java
@@ -15,21 +15,21 @@
  * after animations occur.
  */
 public class StreamItemAnimator extends DefaultItemAnimator {
-    private final ContentChangedListener contentChangedListener;
-    private boolean isStreamContentVisible;
+    private final ContentChangedListener mContentChangedListener;
+    private boolean mIsStreamContentVisible;
 
     public StreamItemAnimator(ContentChangedListener contentChangedListener) {
-        this.contentChangedListener = contentChangedListener;
+        this.mContentChangedListener = contentChangedListener;
     }
 
     @Override
     public void onAnimationFinished(RecyclerView.ViewHolder viewHolder) {
         super.onAnimationFinished(viewHolder);
-        contentChangedListener.onContentChanged();
+        mContentChangedListener.onContentChanged();
     }
 
     public void setStreamVisibility(boolean isStreamContentVisible) {
-        if (this.isStreamContentVisible == isStreamContentVisible) {
+        if (this.mIsStreamContentVisible == isStreamContentVisible) {
             return;
         }
 
@@ -40,11 +40,11 @@
             endAnimations();
         }
 
-        this.isStreamContentVisible = isStreamContentVisible;
+        this.mIsStreamContentVisible = isStreamContentVisible;
     }
 
     @VisibleForTesting
     public boolean getStreamContentVisibility() {
-        return isStreamContentVisible;
+        return mIsStreamContentVisible;
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/basicstream/internal/StreamRecyclerViewAdapter.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/basicstream/internal/StreamRecyclerViewAdapter.java
index 45e26aa..24b9c162 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/basicstream/internal/StreamRecyclerViewAdapter.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/basicstream/internal/StreamRecyclerViewAdapter.java
@@ -51,23 +51,23 @@
         extends RecyclerView.Adapter<FeedViewHolder> implements StreamContentListener {
     private static final String TAG = "StreamRecyclerViewAdapt";
 
-    private final Context context;
-    private final View viewport;
-    private final CardConfiguration cardConfiguration;
-    private final PietManager pietManager;
-    private final Configuration configuration;
-    private final List<LeafFeatureDriver> leafFeatureDrivers;
-    private final List<HeaderDriver> headers;
-    private final HashMap<FeedViewHolder, LeafFeatureDriver> boundViewHolderToLeafFeatureDriverMap;
-    private final DeepestContentTracker deepestContentTracker;
-    private final ContentChangedListener contentChangedListener;
-    private final PietEventLogger eventLogger;
+    private final Context mContext;
+    private final View mViewport;
+    private final CardConfiguration mCardConfiguration;
+    private final PietManager mPietManager;
+    private final Configuration mConfiguration;
+    private final List<LeafFeatureDriver> mLeafFeatureDrivers;
+    private final List<HeaderDriver> mHeaders;
+    private final HashMap<FeedViewHolder, LeafFeatureDriver> mBoundViewHolderToLeafFeatureDriverMap;
+    private final DeepestContentTracker mDeepestContentTracker;
+    private final ContentChangedListener mContentChangedListener;
+    private final PietEventLogger mEventLogger;
 
-    private boolean streamContentVisible;
-    private boolean shown;
+    private boolean mStreamContentVisible;
+    private boolean mShown;
 
-    /*@Nullable*/ private StreamDriver streamDriver;
-    private final ScrollObservable scrollObservable;
+    /*@Nullable*/ private StreamDriver mStreamDriver;
+    private final ScrollObservable mScrollObservable;
 
     // Suppress initialization warnings for calling setHasStableIds on RecyclerView.Adapter
     @SuppressWarnings("initialization")
@@ -76,20 +76,20 @@
             DeepestContentTracker deepestContentTracker,
             ContentChangedListener contentChangedListener, ScrollObservable scrollObservable,
             Configuration configuration, PietEventLogger eventLogger) {
-        this.context = context;
-        this.viewport = viewport;
-        this.cardConfiguration = cardConfiguration;
-        this.pietManager = pietManager;
-        this.contentChangedListener = contentChangedListener;
-        this.configuration = configuration;
-        headers = new ArrayList<>();
-        leafFeatureDrivers = new ArrayList<>();
+        this.mContext = context;
+        this.mViewport = viewport;
+        this.mCardConfiguration = cardConfiguration;
+        this.mPietManager = pietManager;
+        this.mContentChangedListener = contentChangedListener;
+        this.mConfiguration = configuration;
+        mHeaders = new ArrayList<>();
+        mLeafFeatureDrivers = new ArrayList<>();
         setHasStableIds(true);
-        boundViewHolderToLeafFeatureDriverMap = new HashMap<>();
-        streamContentVisible = true;
-        this.deepestContentTracker = deepestContentTracker;
-        this.scrollObservable = scrollObservable;
-        this.eventLogger = eventLogger;
+        mBoundViewHolderToLeafFeatureDriverMap = new HashMap<>();
+        mStreamContentVisible = true;
+        this.mDeepestContentTracker = deepestContentTracker;
+        this.mScrollObservable = scrollObservable;
+        this.mEventLogger = eventLogger;
     }
 
     @Override
@@ -101,15 +101,15 @@
             return new HeaderViewHolder(frameLayout);
         } else if (viewType == TYPE_CONTINUATION) {
             return new ContinuationViewHolder(
-                    configuration, parent.getContext(), frameLayout, cardConfiguration);
+                    mConfiguration, parent.getContext(), frameLayout, mCardConfiguration);
         } else if (viewType == TYPE_NO_CONTENT) {
-            return new NoContentViewHolder(cardConfiguration, parent.getContext(), frameLayout);
+            return new NoContentViewHolder(mCardConfiguration, parent.getContext(), frameLayout);
         } else if (viewType == TYPE_ZERO_STATE) {
-            return new ZeroStateViewHolder(parent.getContext(), frameLayout, cardConfiguration);
+            return new ZeroStateViewHolder(parent.getContext(), frameLayout, mCardConfiguration);
         }
 
-        return new PietViewHolder(cardConfiguration, frameLayout, pietManager, scrollObservable,
-                viewport, context, configuration, eventLogger);
+        return new PietViewHolder(mCardConfiguration, frameLayout, mPietManager, mScrollObservable,
+                mViewport, mContext, mConfiguration, mEventLogger);
     }
 
     @Override
@@ -117,27 +117,28 @@
         Logger.d(TAG, "onBindViewHolder for index: %s", index);
         if (isHeader(index)) {
             Logger.d(TAG, "Binding header at index %s", index);
-            HeaderDriver headerDriver = headers.get(index);
+            HeaderDriver headerDriver = mHeaders.get(index);
             headerDriver.bind(viewHolder);
-            boundViewHolderToLeafFeatureDriverMap.put(viewHolder, headerDriver);
+            mBoundViewHolderToLeafFeatureDriverMap.put(viewHolder, headerDriver);
             return;
         }
 
         int streamIndex = positionToStreamIndex(index);
 
         Logger.d(TAG, "onBindViewHolder for stream index: %s", streamIndex);
-        LeafFeatureDriver leafFeatureDriver = leafFeatureDrivers.get(streamIndex);
+        LeafFeatureDriver leafFeatureDriver = mLeafFeatureDrivers.get(streamIndex);
 
-        deepestContentTracker.updateDeepestContentTracker(
+        mDeepestContentTracker.updateDeepestContentTracker(
                 streamIndex, leafFeatureDriver.getContentId());
 
         leafFeatureDriver.bind(viewHolder);
-        boundViewHolderToLeafFeatureDriverMap.put(viewHolder, leafFeatureDriver);
+        mBoundViewHolderToLeafFeatureDriverMap.put(viewHolder, leafFeatureDriver);
     }
 
     @Override
     public void onViewRecycled(FeedViewHolder viewHolder) {
-        LeafFeatureDriver leafFeatureDriver = boundViewHolderToLeafFeatureDriverMap.get(viewHolder);
+        LeafFeatureDriver leafFeatureDriver =
+                mBoundViewHolderToLeafFeatureDriverMap.get(viewHolder);
 
         if (leafFeatureDriver == null) {
             Logger.wtf(TAG, "Could not find driver for unbinding");
@@ -145,13 +146,13 @@
         }
 
         leafFeatureDriver.unbind();
-        boundViewHolderToLeafFeatureDriverMap.remove(viewHolder);
+        mBoundViewHolderToLeafFeatureDriverMap.remove(viewHolder);
     }
 
     @Override
     public int getItemCount() {
-        int driverSize = streamContentVisible ? leafFeatureDrivers.size() : 0;
-        return driverSize + headers.size();
+        int driverSize = mStreamContentVisible ? mLeafFeatureDrivers.size() : 0;
+        return driverSize + mHeaders.size();
     }
 
     @Override
@@ -161,42 +162,42 @@
             return TYPE_HEADER;
         }
 
-        return leafFeatureDrivers.get(positionToStreamIndex(position)).getItemViewType();
+        return mLeafFeatureDrivers.get(positionToStreamIndex(position)).getItemViewType();
     }
 
     @Override
     public long getItemId(int position) {
         if (isHeader(position)) {
-            return headers.get(position).hashCode();
+            return mHeaders.get(position).hashCode();
         }
 
-        return leafFeatureDrivers.get(positionToStreamIndex(position)).itemId();
+        return mLeafFeatureDrivers.get(positionToStreamIndex(position)).itemId();
     }
 
     public void rebind() {
-        for (LeafFeatureDriver driver : boundViewHolderToLeafFeatureDriverMap.values()) {
+        for (LeafFeatureDriver driver : mBoundViewHolderToLeafFeatureDriverMap.values()) {
             driver.maybeRebind();
         }
     }
 
     @VisibleForTesting
     public List<LeafFeatureDriver> getLeafFeatureDrivers() {
-        return leafFeatureDrivers;
+        return mLeafFeatureDrivers;
     }
 
     private boolean isHeader(int position) {
-        return position < headers.size();
+        return position < mHeaders.size();
     }
 
     private int positionToStreamIndex(int position) {
-        return position - headers.size();
+        return position - mHeaders.size();
     }
 
     public void setHeaders(List<Header> newHeaders) {
         // TODO: Move header orchestration into separate class once header orchestration
         // logic is complex enough.
         List<Header> oldHeaders = new ArrayList<>();
-        for (HeaderDriver headerDriver : headers) {
+        for (HeaderDriver headerDriver : mHeaders) {
             oldHeaders.add(headerDriver.getHeader());
         }
         DiffResult diffResult =
@@ -205,45 +206,45 @@
     }
 
     public int getHeaderCount() {
-        return headers.size();
+        return mHeaders.size();
     }
 
     public void setStreamContentVisible(boolean streamContentVisible) {
-        if (this.streamContentVisible == streamContentVisible) {
+        if (this.mStreamContentVisible == streamContentVisible) {
             return;
         }
-        this.streamContentVisible = streamContentVisible;
+        this.mStreamContentVisible = streamContentVisible;
 
-        if (leafFeatureDrivers.isEmpty()) {
+        if (mLeafFeatureDrivers.isEmpty()) {
             // Nothing to alter in RecyclerView if there is no leaf content.
             return;
         }
 
         if (streamContentVisible) {
-            notifyItemRangeInserted(headers.size(), leafFeatureDrivers.size());
+            notifyItemRangeInserted(mHeaders.size(), mLeafFeatureDrivers.size());
         } else {
-            notifyItemRangeRemoved(headers.size(), leafFeatureDrivers.size());
+            notifyItemRangeRemoved(mHeaders.size(), mLeafFeatureDrivers.size());
         }
     }
 
     public void setDriver(StreamDriver newStreamDriver) {
-        if (streamDriver != null) {
-            streamDriver.setStreamContentListener(null);
+        if (mStreamDriver != null) {
+            mStreamDriver.setStreamContentListener(null);
         }
 
-        notifyItemRangeRemoved(headers.size(), leafFeatureDrivers.size());
-        leafFeatureDrivers.clear();
+        notifyItemRangeRemoved(mHeaders.size(), mLeafFeatureDrivers.size());
+        mLeafFeatureDrivers.clear();
 
         // It is important that we get call getLeafFeatureDrivers before setting the content
         // listener. If this is done in the other order, it is possible that the StreamDriver
         // notifies us of something being added inside of the getLeafFeatureDrivers() call,
         // resulting in two copies of the LeafFeatureDriver being shown.
-        leafFeatureDrivers.addAll(newStreamDriver.getLeafFeatureDrivers());
+        mLeafFeatureDrivers.addAll(newStreamDriver.getLeafFeatureDrivers());
         newStreamDriver.setStreamContentListener(this);
 
-        streamDriver = newStreamDriver;
-        if (streamContentVisible) {
-            notifyItemRangeInserted(headers.size(), leafFeatureDrivers.size());
+        mStreamDriver = newStreamDriver;
+        if (mStreamContentVisible) {
+            notifyItemRangeInserted(mHeaders.size(), mLeafFeatureDrivers.size());
         }
 
         newStreamDriver.maybeRestoreScroll();
@@ -255,11 +256,11 @@
             return;
         }
 
-        leafFeatureDrivers.addAll(index, newFeatureDrivers);
+        mLeafFeatureDrivers.addAll(index, newFeatureDrivers);
 
-        int insertionIndex = headers.size() + index;
+        int insertionIndex = mHeaders.size() + index;
 
-        if (streamContentVisible) {
+        if (mStreamContentVisible) {
             notifyItemRangeInserted(insertionIndex, newFeatureDrivers.size());
         }
         maybeNotifyContentChanged();
@@ -267,12 +268,12 @@
 
     @Override
     public void notifyContentRemoved(int index) {
-        int removalIndex = headers.size() + index;
+        int removalIndex = mHeaders.size() + index;
 
-        leafFeatureDrivers.remove(index);
-        deepestContentTracker.removeContentId(index);
+        mLeafFeatureDrivers.remove(index);
+        mDeepestContentTracker.removeContentId(index);
 
-        if (streamContentVisible) {
+        if (mStreamContentVisible) {
             notifyItemRemoved(removalIndex);
         }
         maybeNotifyContentChanged();
@@ -280,17 +281,17 @@
 
     @Override
     public void notifyContentsCleared() {
-        int itemCount = leafFeatureDrivers.size();
-        leafFeatureDrivers.clear();
+        int itemCount = mLeafFeatureDrivers.size();
+        mLeafFeatureDrivers.clear();
 
-        if (streamContentVisible) {
-            notifyItemRangeRemoved(headers.size(), itemCount);
+        if (mStreamContentVisible) {
+            notifyItemRangeRemoved(mHeaders.size(), itemCount);
         }
         maybeNotifyContentChanged();
     }
 
     public void onDestroy() {
-        for (HeaderDriver header : headers) {
+        for (HeaderDriver header : mHeaders) {
             header.unbind();
         }
 
@@ -298,22 +299,22 @@
     }
 
     public void setShown(boolean shown) {
-        this.shown = shown;
+        this.mShown = shown;
     }
 
     private void maybeNotifyContentChanged() {
         // If Stream is not shown on screen, host should be notified as animations will not run and
         // the host will not be notified through StreamItemAnimator.
-        if (!shown) {
-            contentChangedListener.onContentChanged();
+        if (!mShown) {
+            mContentChangedListener.onContentChanged();
         }
     }
 
     @VisibleForTesting
     void dismissHeader(Header header) {
         int indexToRemove = -1;
-        for (int i = 0; i < headers.size(); i++) {
-            if (headers.get(i).getHeader() == header) {
+        for (int i = 0; i < mHeaders.size(); i++) {
+            if (mHeaders.get(i).getHeader() == header) {
                 indexToRemove = i;
             }
         }
@@ -322,7 +323,7 @@
             return;
         }
 
-        headers.remove(indexToRemove).onDestroy();
+        mHeaders.remove(indexToRemove).onDestroy();
         notifyItemRemoved(indexToRemove);
         header.onDismissed();
     }
@@ -333,47 +334,47 @@
     }
 
     private static class HeaderDiffCallback extends DiffUtil.Callback {
-        private final List<Header> oldHeaders;
-        private final List<Header> newHeaders;
+        private final List<Header> mOldHeaders;
+        private final List<Header> mNewHeaders;
 
         private HeaderDiffCallback(List<Header> oldHeaders, List<Header> newHeaders) {
-            this.oldHeaders = oldHeaders;
-            this.newHeaders = newHeaders;
+            this.mOldHeaders = oldHeaders;
+            this.mNewHeaders = newHeaders;
         }
 
         @Override
         public int getOldListSize() {
-            return oldHeaders.size();
+            return mOldHeaders.size();
         }
 
         @Override
         public int getNewListSize() {
-            return newHeaders.size();
+            return mNewHeaders.size();
         }
 
         @Override
         public boolean areItemsTheSame(int i, int i1) {
-            return oldHeaders.get(i).getView().equals(newHeaders.get(i1).getView());
+            return mOldHeaders.get(i).getView().equals(mNewHeaders.get(i1).getView());
         }
 
         @Override
         public boolean areContentsTheSame(int i, int i1) {
-            return oldHeaders.get(i).getView().equals(newHeaders.get(i1).getView());
+            return mOldHeaders.get(i).getView().equals(mNewHeaders.get(i1).getView());
         }
     }
 
     private class HeaderListUpdateCallback implements ListUpdateCallback {
-        private final List<Header> newHeaders;
+        private final List<Header> mNewHeaders;
 
         public HeaderListUpdateCallback(List<Header> newHeaders) {
-            this.newHeaders = newHeaders;
+            this.mNewHeaders = newHeaders;
         }
 
         @Override
         public void onInserted(int i, int i1) {
-            for (int index = i; index < newHeaders.size() && index < i + i1; index++) {
-                HeaderDriver headerDriver = createHeaderDriver(newHeaders.get(index));
-                headers.add(index, headerDriver);
+            for (int index = i; index < mNewHeaders.size() && index < i + i1; index++) {
+                HeaderDriver headerDriver = createHeaderDriver(mNewHeaders.get(index));
+                mHeaders.add(index, headerDriver);
             }
             notifyItemRangeInserted(i, i1);
         }
@@ -381,8 +382,8 @@
         @Override
         public void onRemoved(int i, int i1) {
             for (int index = i + i1 - 1; index >= 0 && index > i - i1; index--) {
-                headers.get(index).onDestroy();
-                headers.remove(index);
+                mHeaders.get(index).onDestroy();
+                mHeaders.remove(index);
             }
             notifyItemRangeRemoved(i, i1);
         }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/basicstream/internal/actions/StreamActionApiImpl.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/basicstream/internal/actions/StreamActionApiImpl.java
index b0de25b2..c8a94e0 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/basicstream/internal/actions/StreamActionApiImpl.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/basicstream/internal/actions/StreamActionApiImpl.java
@@ -37,18 +37,18 @@
 public class StreamActionApiImpl implements StreamActionApi {
     private static final String TAG = "StreamActionApiImpl";
 
-    private final ActionApi actionApi;
-    private final ActionParser actionParser;
-    private final ActionManager actionManager;
-    private final BasicLoggingApi basicLoggingApi;
-    private final Supplier<ContentLoggingData> contentLoggingData;
-    private final ContextMenuManager contextMenuManager;
-    private final ClusterPendingDismissHelper clusterPendingDismissHelper;
-    private final ViewElementActionHandler viewElementActionHandler;
-    private final String contentId;
-    private final TooltipApi tooltipApi;
+    private final ActionApi mActionApi;
+    private final ActionParser mActionParser;
+    private final ActionManager mActionManager;
+    private final BasicLoggingApi mBasicLoggingApi;
+    private final Supplier<ContentLoggingData> mContentLoggingData;
+    private final ContextMenuManager mContextMenuManager;
+    private final ClusterPendingDismissHelper mClusterPendingDismissHelper;
+    private final ViewElementActionHandler mViewElementActionHandler;
+    private final String mContentId;
+    private final TooltipApi mTooltipApi;
 
-    /*@Nullable*/ private final String sessionId;
+    /*@Nullable*/ private final String mSessionId;
 
     public StreamActionApiImpl(ActionApi actionApi, ActionParser actionParser,
             ActionManager actionManager, BasicLoggingApi basicLoggingApi,
@@ -56,17 +56,17 @@
             /*@Nullable*/ String sessionId, ClusterPendingDismissHelper clusterPendingDismissHelper,
             ViewElementActionHandler viewElementActionHandler, String contentId,
             TooltipApi tooltipApi) {
-        this.actionApi = actionApi;
-        this.actionParser = actionParser;
-        this.actionManager = actionManager;
-        this.basicLoggingApi = basicLoggingApi;
-        this.contentLoggingData = contentLoggingData;
-        this.contextMenuManager = contextMenuManager;
-        this.sessionId = sessionId;
-        this.clusterPendingDismissHelper = clusterPendingDismissHelper;
-        this.viewElementActionHandler = viewElementActionHandler;
-        this.contentId = contentId;
-        this.tooltipApi = tooltipApi;
+        this.mActionApi = actionApi;
+        this.mActionParser = actionParser;
+        this.mActionManager = actionManager;
+        this.mBasicLoggingApi = basicLoggingApi;
+        this.mContentLoggingData = contentLoggingData;
+        this.mContextMenuManager = contextMenuManager;
+        this.mSessionId = sessionId;
+        this.mClusterPendingDismissHelper = clusterPendingDismissHelper;
+        this.mViewElementActionHandler = viewElementActionHandler;
+        this.mContentId = contentId;
+        this.mTooltipApi = tooltipApi;
     }
 
     @Override
@@ -75,21 +75,21 @@
         List<LabelledFeedActionData> enabledActions = new ArrayList<>();
         for (LabelledFeedActionData labelledFeedActionData :
                 openContextMenuData.getContextMenuDataList()) {
-            if (actionParser.canPerformAction(
+            if (mActionParser.canPerformAction(
                         labelledFeedActionData.getFeedActionPayload(), this)) {
                 actionLabels.add(labelledFeedActionData.getLabel());
                 enabledActions.add(labelledFeedActionData);
             }
         }
 
-        boolean menuOpened = contextMenuManager.openContextMenu(anchorView, actionLabels,
+        boolean menuOpened = mContextMenuManager.openContextMenu(anchorView, actionLabels,
                 (int position)
-                        -> actionParser.parseFeedActionPayload(
+                        -> mActionParser.parseFeedActionPayload(
                                 enabledActions.get(position).getFeedActionPayload(),
                                 StreamActionApiImpl.this, anchorView, ActionSource.CONTEXT_MENU));
 
         if (menuOpened) {
-            basicLoggingApi.onContentContextMenuOpened(contentLoggingData.get());
+            mBasicLoggingApi.onContentContextMenuOpened(mContentLoggingData.get());
         }
     }
 
@@ -113,22 +113,22 @@
             UndoAction undoAction, ActionPayload payload, int interestType) {
         if (!undoAction.hasConfirmationLabel()) {
             dismiss(dataOperations);
-            basicLoggingApi.onNotInterestedIn(
-                    interestType, contentLoggingData.get(), /* wasCommitted = */ true);
+            mBasicLoggingApi.onNotInterestedIn(
+                    interestType, mContentLoggingData.get(), /* wasCommitted = */ true);
         } else {
             dismissWithSnackbar(undoAction, new PendingDismissCallback() {
                 @Override
                 public void onDismissReverted() {
-                    basicLoggingApi.onNotInterestedIn(
-                            interestType, contentLoggingData.get(), /* wasCommitted = */ false);
+                    mBasicLoggingApi.onNotInterestedIn(
+                            interestType, mContentLoggingData.get(), /* wasCommitted = */ false);
                 }
 
                 @Override
                 public void onDismissCommitted() {
                     dismiss(dataOperations);
-                    actionManager.createAndUploadAction(contentId, payload);
-                    basicLoggingApi.onNotInterestedIn(
-                            interestType, contentLoggingData.get(), /* wasCommitted = */ true);
+                    mActionManager.createAndUploadAction(mContentId, payload);
+                    mBasicLoggingApi.onNotInterestedIn(
+                            interestType, mContentLoggingData.get(), /* wasCommitted = */ true);
                 }
             });
         }
@@ -139,128 +139,130 @@
             UndoAction undoAction, ActionPayload payload) {
         if (!undoAction.hasConfirmationLabel()) {
             dismissLocal(contentId, dataOperations);
-            basicLoggingApi.onContentDismissed(contentLoggingData.get(), /* wasCommitted = */ true);
+            mBasicLoggingApi.onContentDismissed(
+                    mContentLoggingData.get(), /* wasCommitted = */ true);
         } else {
             dismissWithSnackbar(undoAction, new PendingDismissCallback() {
                 @Override
                 public void onDismissReverted() {
-                    basicLoggingApi.onContentDismissed(
-                            contentLoggingData.get(), /* wasCommitted = */ false);
+                    mBasicLoggingApi.onContentDismissed(
+                            mContentLoggingData.get(), /* wasCommitted = */ false);
                 }
 
                 @Override
                 public void onDismissCommitted() {
                     dismissLocal(contentId, dataOperations);
                     dismiss(dataOperations);
-                    actionManager.createAndUploadAction(contentId, payload);
-                    basicLoggingApi.onContentDismissed(
-                            contentLoggingData.get(), /* wasCommitted = */ true);
+                    mActionManager.createAndUploadAction(contentId, payload);
+                    mBasicLoggingApi.onContentDismissed(
+                            mContentLoggingData.get(), /* wasCommitted = */ true);
                 }
             });
         }
     }
 
     private void dismiss(List<StreamDataOperation> dataOperations) {
-        actionManager.dismiss(dataOperations, sessionId);
+        mActionManager.dismiss(dataOperations, mSessionId);
     }
 
     private void dismissLocal(String contentId, List<StreamDataOperation> dataOperations) {
-        actionManager.dismissLocal(Collections.singletonList(contentId), dataOperations, sessionId);
+        mActionManager.dismissLocal(
+                Collections.singletonList(contentId), dataOperations, mSessionId);
     }
 
     private void dismissWithSnackbar(
             UndoAction undoAction, PendingDismissCallback pendingDismissCallback) {
-        clusterPendingDismissHelper.triggerPendingDismissForCluster(
+        mClusterPendingDismissHelper.triggerPendingDismissForCluster(
                 undoAction, pendingDismissCallback);
     }
 
     @Override
     public void onClientAction(@ActionType int actionType) {
-        basicLoggingApi.onClientAction(contentLoggingData.get(), actionType);
+        mBasicLoggingApi.onClientAction(mContentLoggingData.get(), actionType);
     }
 
     @Override
     public void openUrl(String url) {
-        actionApi.openUrl(url);
+        mActionApi.openUrl(url);
     }
 
     @Override
     public void openUrl(String url, String consistencyTokenQueryParamName) {
-        actionManager.uploadAllActionsAndUpdateUrl(
-                url, consistencyTokenQueryParamName, result -> { actionApi.openUrl(result); });
+        mActionManager.uploadAllActionsAndUpdateUrl(
+                url, consistencyTokenQueryParamName, result -> { mActionApi.openUrl(result); });
     }
 
     @Override
     public boolean canOpenUrl() {
-        return actionApi.canOpenUrl();
+        return mActionApi.canOpenUrl();
     }
 
     @Override
     public void openUrlInIncognitoMode(String url) {
-        actionApi.openUrlInIncognitoMode(url);
+        mActionApi.openUrlInIncognitoMode(url);
     }
 
     @Override
     public void openUrlInIncognitoMode(String url, String consistencyTokenQueryParamName) {
-        actionManager.uploadAllActionsAndUpdateUrl(url, consistencyTokenQueryParamName,
-                result -> { actionApi.openUrlInIncognitoMode(result); });
+        mActionManager.uploadAllActionsAndUpdateUrl(url, consistencyTokenQueryParamName,
+                result -> { mActionApi.openUrlInIncognitoMode(result); });
     }
 
     @Override
     public boolean canOpenUrlInIncognitoMode() {
-        return actionApi.canOpenUrlInIncognitoMode();
+        return mActionApi.canOpenUrlInIncognitoMode();
     }
 
     @Override
     public void openUrlInNewTab(String url) {
-        actionApi.openUrlInNewTab(url);
+        mActionApi.openUrlInNewTab(url);
     }
 
     @Override
     public void openUrlInNewTab(String url, String consistencyTokenQueryParamName) {
-        actionManager.uploadAllActionsAndUpdateUrl(url, consistencyTokenQueryParamName,
-                result -> { actionApi.openUrlInNewTab(result); });
+        mActionManager.uploadAllActionsAndUpdateUrl(url, consistencyTokenQueryParamName,
+                result -> { mActionApi.openUrlInNewTab(result); });
     }
 
     @Override
     public boolean canOpenUrlInNewTab() {
-        return actionApi.canOpenUrlInNewTab();
+        return mActionApi.canOpenUrlInNewTab();
     }
 
     @Override
     public void openUrlInNewWindow(String url) {
-        actionApi.openUrlInNewWindow(url);
+        mActionApi.openUrlInNewWindow(url);
     }
 
     @Override
     public void openUrlInNewWindow(String url, String consistencyTokenQueryParamName) {
-        actionManager.uploadAllActionsAndUpdateUrl(url, consistencyTokenQueryParamName,
-                result -> { actionApi.openUrlInNewWindow(result); });
+        mActionManager.uploadAllActionsAndUpdateUrl(url, consistencyTokenQueryParamName,
+                result -> { mActionApi.openUrlInNewWindow(result); });
     }
 
     @Override
     public boolean canOpenUrlInNewWindow() {
-        return actionApi.canOpenUrlInNewWindow();
+        return mActionApi.canOpenUrlInNewWindow();
     }
 
     @Override
     public void downloadUrl(ContentMetadata contentMetadata) {
-        actionApi.downloadUrl(contentMetadata);
+        mActionApi.downloadUrl(contentMetadata);
     }
 
     @Override
     public boolean canDownloadUrl() {
-        return actionApi.canDownloadUrl();
+        return mActionApi.canDownloadUrl();
     }
 
     @Override
     public void learnMore() {
-        actionApi.learnMore();
+        mActionApi.learnMore();
     }
 
     @Override
     public boolean canLearnMore() {
-        return actionApi.canLearnMore();
+        return mActionApi.canLearnMore();
     }
 
     @Override
@@ -280,17 +282,17 @@
 
     @Override
     public void onElementView(int elementType) {
-        viewElementActionHandler.onElementView(elementType);
+        mViewElementActionHandler.onElementView(elementType);
     }
 
     @Override
     public void onElementHide(int elementType) {
-        viewElementActionHandler.onElementHide(elementType);
+        mViewElementActionHandler.onElementHide(elementType);
     }
 
     @Override
     public void onElementClick(int elementType) {
-        basicLoggingApi.onVisualElementClicked(contentLoggingData.get(), elementType);
+        mBasicLoggingApi.onVisualElementClicked(mContentLoggingData.get(), elementType);
     }
 
     @Override
@@ -300,7 +302,7 @@
 
     @Override
     public void maybeShowTooltip(TooltipInfo tooltipInfo, View view) {
-        tooltipApi.maybeShowHelpUi(tooltipInfo, view, new TooltipCallbackApi() {
+        mTooltipApi.maybeShowHelpUi(tooltipInfo, view, new TooltipCallbackApi() {
             @Override
             public void onShow() {
                 onElementView(ElementType.TOOLTIP.getNumber());
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/basicstream/internal/drivers/CardDriver.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/basicstream/internal/drivers/CardDriver.java
index f0ad215..866de308 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/basicstream/internal/drivers/CardDriver.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/basicstream/internal/drivers/CardDriver.java
@@ -34,23 +34,23 @@
 public class CardDriver implements FeatureDriver {
     private static final String TAG = "CardDriver";
 
-    private final ActionApi actionApi;
-    private final ActionManager actionManager;
-    private final ActionParserFactory actionParserFactory;
-    private final BasicLoggingApi basicLoggingApi;
-    private final ModelFeature cardModel;
-    private final ModelProvider modelProvider;
-    private final int position;
-    private final ClusterPendingDismissHelper clusterPendingDismissHelper;
-    private final StreamOfflineMonitor streamOfflineMonitor;
-    private final ContentChangedListener contentChangedListener;
-    private final ContextMenuManager contextMenuManager;
-    private final MainThreadRunner mainThreadRunner;
-    private final Configuration configuration;
-    private final ViewLoggingUpdater viewLoggingUpdater;
-    private final TooltipApi tooltipApi;
+    private final ActionApi mActionApi;
+    private final ActionManager mActionManager;
+    private final ActionParserFactory mActionParserFactory;
+    private final BasicLoggingApi mBasicLoggingApi;
+    private final ModelFeature mCardModel;
+    private final ModelProvider mModelProvider;
+    private final int mPosition;
+    private final ClusterPendingDismissHelper mClusterPendingDismissHelper;
+    private final StreamOfflineMonitor mStreamOfflineMonitor;
+    private final ContentChangedListener mContentChangedListener;
+    private final ContextMenuManager mContextMenuManager;
+    private final MainThreadRunner mMainThreadRunner;
+    private final Configuration mConfiguration;
+    private final ViewLoggingUpdater mViewLoggingUpdater;
+    private final TooltipApi mTooltipApi;
 
-    /*@Nullable*/ private ContentDriver contentDriver;
+    /*@Nullable*/ private ContentDriver mContentDriver;
 
     CardDriver(ActionApi actionApi, ActionManager actionManager,
             ActionParserFactory actionParserFactory, BasicLoggingApi basicLoggingApi,
@@ -60,39 +60,39 @@
             ContentChangedListener contentChangedListener, ContextMenuManager contextMenuManager,
             MainThreadRunner mainThreadRunner, Configuration configuration,
             ViewLoggingUpdater viewLoggingUpdater, TooltipApi tooltipApi) {
-        this.actionApi = actionApi;
-        this.actionManager = actionManager;
-        this.actionParserFactory = actionParserFactory;
-        this.basicLoggingApi = basicLoggingApi;
-        this.cardModel = cardModel;
-        this.modelProvider = modelProvider;
-        this.position = position;
-        this.clusterPendingDismissHelper = clusterPendingDismissHelper;
-        this.streamOfflineMonitor = streamOfflineMonitor;
-        this.contentChangedListener = contentChangedListener;
-        this.contextMenuManager = contextMenuManager;
-        this.mainThreadRunner = mainThreadRunner;
-        this.configuration = configuration;
-        this.viewLoggingUpdater = viewLoggingUpdater;
-        this.tooltipApi = tooltipApi;
+        this.mActionApi = actionApi;
+        this.mActionManager = actionManager;
+        this.mActionParserFactory = actionParserFactory;
+        this.mBasicLoggingApi = basicLoggingApi;
+        this.mCardModel = cardModel;
+        this.mModelProvider = modelProvider;
+        this.mPosition = position;
+        this.mClusterPendingDismissHelper = clusterPendingDismissHelper;
+        this.mStreamOfflineMonitor = streamOfflineMonitor;
+        this.mContentChangedListener = contentChangedListener;
+        this.mContextMenuManager = contextMenuManager;
+        this.mMainThreadRunner = mainThreadRunner;
+        this.mConfiguration = configuration;
+        this.mViewLoggingUpdater = viewLoggingUpdater;
+        this.mTooltipApi = tooltipApi;
     }
 
     @Override
     public void onDestroy() {
-        if (contentDriver != null) {
-            contentDriver.onDestroy();
+        if (mContentDriver != null) {
+            mContentDriver.onDestroy();
         }
     }
 
     @Override
     /*@Nullable*/
     public LeafFeatureDriver getLeafFeatureDriver() {
-        if (contentDriver == null) {
-            contentDriver = createContentChild(cardModel);
+        if (mContentDriver == null) {
+            mContentDriver = createContentChild(mCardModel);
         }
 
-        if (contentDriver != null) {
-            return contentDriver.getLeafFeatureDriver();
+        if (mContentDriver != null) {
+            return mContentDriver.getLeafFeatureDriver();
         }
 
         return null;
@@ -105,7 +105,7 @@
         ModelChild child;
         if ((child = cursor.getNextItem()) != null) {
             if (child.getType() != Type.FEATURE) {
-                basicLoggingApi.onInternalError(InternalFeedError.CARD_CHILD_MISSING_FEATURE);
+                mBasicLoggingApi.onInternalError(InternalFeedError.CARD_CHILD_MISSING_FEATURE);
                 Logger.e(TAG, "ContentChild was not bound to a Feature, found type: %s",
                         child.getType());
                 return null;
@@ -114,7 +114,7 @@
             checkState(
                     contentModel.getStreamFeature().hasContent(), "Expected content for feature");
             return createContentDriver(contentModel,
-                    cardModel.getStreamFeature()
+                    mCardModel.getStreamFeature()
                             .getCard()
                             .getExtension(SwipeActionExtension.swipeActionExtension)
                             .getSwipeAction());
@@ -125,9 +125,9 @@
 
     @VisibleForTesting
     ContentDriver createContentDriver(ModelFeature contentModel, FeedActionPayload swipeAction) {
-        return new ContentDriver(actionApi, actionManager, actionParserFactory, basicLoggingApi,
-                contentModel, modelProvider, position, swipeAction, clusterPendingDismissHelper,
-                streamOfflineMonitor, contentChangedListener, contextMenuManager, mainThreadRunner,
-                configuration, viewLoggingUpdater, tooltipApi);
+        return new ContentDriver(mActionApi, mActionManager, mActionParserFactory, mBasicLoggingApi,
+                contentModel, mModelProvider, mPosition, swipeAction, mClusterPendingDismissHelper,
+                mStreamOfflineMonitor, mContentChangedListener, mContextMenuManager,
+                mMainThreadRunner, mConfiguration, mViewLoggingUpdater, mTooltipApi);
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/basicstream/internal/drivers/ClusterDriver.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/basicstream/internal/drivers/ClusterDriver.java
index 3e160b2ba..fd30bafe 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/basicstream/internal/drivers/ClusterDriver.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/basicstream/internal/drivers/ClusterDriver.java
@@ -32,23 +32,23 @@
 /** {@link FeatureDriver} for Clusters. */
 public class ClusterDriver implements FeatureDriver, ClusterPendingDismissHelper {
     private static final String TAG = "ClusterDriver";
-    private final ActionApi actionApi;
-    private final ActionManager actionManager;
-    private final ActionParserFactory actionParserFactory;
-    private final BasicLoggingApi basicLoggingApi;
-    private final ModelFeature clusterModel;
-    private final ModelProvider modelProvider;
-    private final int position;
-    private final PendingDismissHandler pendingDismissHandler;
-    private final StreamOfflineMonitor streamOfflineMonitor;
-    private final ContentChangedListener contentChangedListener;
-    private final ContextMenuManager contextMenuManager;
-    private final MainThreadRunner mainThreadRunner;
-    private final Configuration configuration;
-    private final ViewLoggingUpdater viewLoggingUpdater;
-    private final TooltipApi tooltipApi;
+    private final ActionApi mActionApi;
+    private final ActionManager mActionManager;
+    private final ActionParserFactory mActionParserFactory;
+    private final BasicLoggingApi mBasicLoggingApi;
+    private final ModelFeature mClusterModel;
+    private final ModelProvider mModelProvider;
+    private final int mPosition;
+    private final PendingDismissHandler mPendingDismissHandler;
+    private final StreamOfflineMonitor mStreamOfflineMonitor;
+    private final ContentChangedListener mContentChangedListener;
+    private final ContextMenuManager mContextMenuManager;
+    private final MainThreadRunner mMainThreadRunner;
+    private final Configuration mConfiguration;
+    private final ViewLoggingUpdater mViewLoggingUpdater;
+    private final TooltipApi mTooltipApi;
 
-    /*@Nullable*/ private CardDriver cardDriver;
+    /*@Nullable*/ private CardDriver mCardDriver;
 
     ClusterDriver(ActionApi actionApi, ActionManager actionManager,
             ActionParserFactory actionParserFactory, BasicLoggingApi basicLoggingApi,
@@ -57,39 +57,39 @@
             ContentChangedListener contentChangedListener, ContextMenuManager contextMenuManager,
             MainThreadRunner mainThreadRunner, Configuration configuration,
             ViewLoggingUpdater viewLoggingUpdater, TooltipApi tooltipApi) {
-        this.actionApi = actionApi;
-        this.actionManager = actionManager;
-        this.actionParserFactory = actionParserFactory;
-        this.basicLoggingApi = basicLoggingApi;
-        this.clusterModel = clusterModel;
-        this.modelProvider = modelProvider;
-        this.position = position;
-        this.pendingDismissHandler = pendingDismissHandler;
-        this.streamOfflineMonitor = streamOfflineMonitor;
-        this.contentChangedListener = contentChangedListener;
-        this.contextMenuManager = contextMenuManager;
-        this.mainThreadRunner = mainThreadRunner;
-        this.configuration = configuration;
-        this.viewLoggingUpdater = viewLoggingUpdater;
-        this.tooltipApi = tooltipApi;
+        this.mActionApi = actionApi;
+        this.mActionManager = actionManager;
+        this.mActionParserFactory = actionParserFactory;
+        this.mBasicLoggingApi = basicLoggingApi;
+        this.mClusterModel = clusterModel;
+        this.mModelProvider = modelProvider;
+        this.mPosition = position;
+        this.mPendingDismissHandler = pendingDismissHandler;
+        this.mStreamOfflineMonitor = streamOfflineMonitor;
+        this.mContentChangedListener = contentChangedListener;
+        this.mContextMenuManager = contextMenuManager;
+        this.mMainThreadRunner = mainThreadRunner;
+        this.mConfiguration = configuration;
+        this.mViewLoggingUpdater = viewLoggingUpdater;
+        this.mTooltipApi = tooltipApi;
     }
 
     @Override
     public void onDestroy() {
-        if (cardDriver != null) {
-            cardDriver.onDestroy();
+        if (mCardDriver != null) {
+            mCardDriver.onDestroy();
         }
     }
 
     @Override
     /*@Nullable*/
     public LeafFeatureDriver getLeafFeatureDriver() {
-        if (cardDriver == null) {
-            cardDriver = createCardChild(clusterModel);
+        if (mCardDriver == null) {
+            mCardDriver = createCardChild(mClusterModel);
         }
 
-        if (cardDriver != null) {
-            return cardDriver.getLeafFeatureDriver();
+        if (mCardDriver != null) {
+            return mCardDriver.getLeafFeatureDriver();
         }
 
         return null;
@@ -102,7 +102,7 @@
         ModelChild child;
         while ((child = cursor.getNextItem()) != null) {
             if (child.getType() != Type.FEATURE) {
-                basicLoggingApi.onInternalError(InternalFeedError.CLUSTER_CHILD_MISSING_FEATURE);
+                mBasicLoggingApi.onInternalError(InternalFeedError.CLUSTER_CHILD_MISSING_FEATURE);
                 Logger.e(TAG, "Child of cursor is not a feature");
                 continue;
             }
@@ -110,7 +110,7 @@
             ModelFeature childModelFeature = child.getModelFeature();
 
             if (!childModelFeature.getStreamFeature().hasCard()) {
-                basicLoggingApi.onInternalError(InternalFeedError.CLUSTER_CHILD_NOT_CARD);
+                mBasicLoggingApi.onInternalError(InternalFeedError.CLUSTER_CHILD_NOT_CARD);
                 Logger.e(TAG, "Content not card.");
                 continue;
             }
@@ -123,10 +123,10 @@
 
     @VisibleForTesting
     CardDriver createCardDriver(ModelFeature content) {
-        return new CardDriver(actionApi, actionManager, actionParserFactory, basicLoggingApi,
-                content, modelProvider, position, this, streamOfflineMonitor,
-                contentChangedListener, contextMenuManager, mainThreadRunner, configuration,
-                viewLoggingUpdater, tooltipApi);
+        return new CardDriver(mActionApi, mActionManager, mActionParserFactory, mBasicLoggingApi,
+                content, mModelProvider, mPosition, this, mStreamOfflineMonitor,
+                mContentChangedListener, mContextMenuManager, mMainThreadRunner, mConfiguration,
+                mViewLoggingUpdater, mTooltipApi);
     }
 
     @Override
@@ -134,7 +134,8 @@
             UndoAction undoAction, PendingDismissCallback pendingDismissCallback) {
         // Get the content id assoc with this ClusterDriver and pass the dismiss to the
         // StreamDriver.
-        pendingDismissHandler.triggerPendingDismiss(
-                clusterModel.getStreamFeature().getContentId(), undoAction, pendingDismissCallback);
+        mPendingDismissHandler.triggerPendingDismiss(
+                mClusterModel.getStreamFeature().getContentId(), undoAction,
+                pendingDismissCallback);
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/basicstream/internal/drivers/ContentDriver.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/basicstream/internal/drivers/ContentDriver.java
index baeb9bd..69ee234 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/basicstream/internal/drivers/ContentDriver.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/basicstream/internal/drivers/ContentDriver.java
@@ -61,26 +61,26 @@
         extends LeafFeatureDriver implements LoggingListener, ViewElementActionHandler {
     private static final String TAG = "ContentDriver";
 
-    private final BasicLoggingApi basicLoggingApi;
-    private final List<PietSharedState> pietSharedStates;
-    private final Frame frame;
-    private final StreamActionApi streamActionApi;
-    private final FeedActionPayload swipeAction;
-    private final String contentId;
-    private final StreamOfflineMonitor streamOfflineMonitor;
-    private final OfflineStatusConsumer offlineStatusConsumer;
-    private final String contentUrl;
-    private final ContentChangedListener contentChangedListener;
-    private final ActionParser actionParser;
-    private final MainThreadRunner mainThreadRunner;
-    private final long viewDelayMs;
-    private final HashMap<Integer, CancelableTask> viewActionTaskMap = new HashMap<>();
-    private final ViewLoggingUpdater viewLoggingUpdater;
-    private final ResettableOneShotVisibilityLoggingListener loggingListener;
+    private final BasicLoggingApi mBasicLoggingApi;
+    private final List<PietSharedState> mPietSharedStates;
+    private final Frame mFrame;
+    private final StreamActionApi mStreamActionApi;
+    private final FeedActionPayload mSwipeAction;
+    private final String mContentId;
+    private final StreamOfflineMonitor mStreamOfflineMonitor;
+    private final OfflineStatusConsumer mOfflineStatusConsumer;
+    private final String mContentUrl;
+    private final ContentChangedListener mContentChangedListener;
+    private final ActionParser mActionParser;
+    private final MainThreadRunner mMainThreadRunner;
+    private final long mViewDelayMs;
+    private final HashMap<Integer, CancelableTask> mViewActionTaskMap = new HashMap<>();
+    private final ViewLoggingUpdater mViewLoggingUpdater;
+    private final ResettableOneShotVisibilityLoggingListener mLoggingListener;
 
-    private StreamContentLoggingData contentLoggingData;
-    private boolean availableOffline;
-    /*@Nullable*/ private PietViewHolder viewHolder;
+    private StreamContentLoggingData mContentLoggingData;
+    private boolean mAvailableOffline;
+    /*@Nullable*/ private PietViewHolder mViewHolder;
 
     // TODO: Remove these suppressions when drivers have a proper lifecycle.
     @SuppressWarnings(
@@ -93,46 +93,46 @@
             ContentChangedListener contentChangedListener, ContextMenuManager contextMenuManager,
             MainThreadRunner mainThreadRunner, Configuration configuration,
             ViewLoggingUpdater viewLoggingUpdater, TooltipApi tooltipApi) {
-        this.mainThreadRunner = mainThreadRunner;
-        viewDelayMs = configuration.getValueOrDefault(
+        this.mMainThreadRunner = mainThreadRunner;
+        mViewDelayMs = configuration.getValueOrDefault(
                 ConfigKey.VIEW_MIN_TIME_MS, Constants.VIEW_MIN_TIME_MS_DEFAULT);
         Content content = contentFeatureModel.getStreamFeature().getContent();
 
         PietContent pietContent = getPietContent(content);
-        this.basicLoggingApi = basicLoggingApi;
-        frame = pietContent.getFrame();
-        pietSharedStates = getPietSharedStates(pietContent, modelProvider, basicLoggingApi);
-        contentId = contentFeatureModel.getStreamFeature().getContentId();
+        this.mBasicLoggingApi = basicLoggingApi;
+        mFrame = pietContent.getFrame();
+        mPietSharedStates = getPietSharedStates(pietContent, modelProvider, basicLoggingApi);
+        mContentId = contentFeatureModel.getStreamFeature().getContentId();
         RepresentationData representationData = content.getRepresentationData();
-        contentUrl = representationData.getUri();
-        availableOffline = streamOfflineMonitor.isAvailableOffline(contentUrl);
-        offlineStatusConsumer = new OfflineStatusConsumer();
-        streamOfflineMonitor.addOfflineStatusConsumer(contentUrl, offlineStatusConsumer);
-        contentLoggingData = new StreamContentLoggingData(
-                position, content.getBasicLoggingMetadata(), representationData, availableOffline);
-        actionParser = actionParserFactory.build(
+        mContentUrl = representationData.getUri();
+        mAvailableOffline = streamOfflineMonitor.isAvailableOffline(mContentUrl);
+        mOfflineStatusConsumer = new OfflineStatusConsumer();
+        streamOfflineMonitor.addOfflineStatusConsumer(mContentUrl, mOfflineStatusConsumer);
+        mContentLoggingData = new StreamContentLoggingData(
+                position, content.getBasicLoggingMetadata(), representationData, mAvailableOffline);
+        mActionParser = actionParserFactory.build(
                 ()
                         -> ContentMetadata.maybeCreateContentMetadata(
                                 content.getOfflineMetadata(), representationData));
-        streamActionApi =
-                createStreamActionApi(actionApi, actionParser, actionManager, basicLoggingApi,
+        mStreamActionApi =
+                createStreamActionApi(actionApi, mActionParser, actionManager, basicLoggingApi,
                         ()
-                                -> contentLoggingData,
+                                -> mContentLoggingData,
                         modelProvider.getSessionId(), contextMenuManager,
-                        clusterPendingDismissHelper, this, contentId, tooltipApi);
-        this.swipeAction = swipeAction;
-        this.streamOfflineMonitor = streamOfflineMonitor;
-        this.contentChangedListener = contentChangedListener;
-        this.viewLoggingUpdater = viewLoggingUpdater;
-        loggingListener = new ResettableOneShotVisibilityLoggingListener(this);
-        viewLoggingUpdater.registerObserver(loggingListener);
+                        clusterPendingDismissHelper, this, mContentId, tooltipApi);
+        this.mSwipeAction = swipeAction;
+        this.mStreamOfflineMonitor = streamOfflineMonitor;
+        this.mContentChangedListener = contentChangedListener;
+        this.mViewLoggingUpdater = viewLoggingUpdater;
+        mLoggingListener = new ResettableOneShotVisibilityLoggingListener(this);
+        viewLoggingUpdater.registerObserver(mLoggingListener);
     }
 
     @Override
     public void onDestroy() {
-        streamOfflineMonitor.removeOfflineStatusConsumer(contentUrl, offlineStatusConsumer);
+        mStreamOfflineMonitor.removeOfflineStatusConsumer(mContentUrl, mOfflineStatusConsumer);
         removeAllPendingTasks();
-        viewLoggingUpdater.unregisterObserver(loggingListener);
+        mViewLoggingUpdater.unregisterObserver(mLoggingListener);
     }
 
     @Override
@@ -189,34 +189,34 @@
             throw new AssertionError();
         }
 
-        this.viewHolder = (PietViewHolder) viewHolder;
+        this.mViewHolder = (PietViewHolder) viewHolder;
 
         ((PietViewHolder) viewHolder)
-                .bind(frame, pietSharedStates, streamActionApi, swipeAction, loggingListener,
-                        actionParser);
+                .bind(mFrame, mPietSharedStates, mStreamActionApi, mSwipeAction, mLoggingListener,
+                        mActionParser);
     }
 
     @Override
     public void unbind() {
-        if (viewHolder == null) {
+        if (mViewHolder == null) {
             return;
         }
 
-        viewHolder.unbind();
-        viewHolder = null;
+        mViewHolder.unbind();
+        mViewHolder = null;
     }
 
     @Override
     public void maybeRebind() {
-        if (viewHolder == null) {
+        if (mViewHolder == null) {
             return;
         }
 
         // Unbinding clears the viewHolder, so storing to rebind.
-        PietViewHolder localViewHolder = viewHolder;
+        PietViewHolder localViewHolder = mViewHolder;
         unbind();
         bind(localViewHolder);
-        contentChangedListener.onContentChanged();
+        mContentChangedListener.onContentChanged();
     }
 
     @Override
@@ -231,27 +231,27 @@
 
     @VisibleForTesting
     boolean isBound() {
-        return viewHolder != null;
+        return mViewHolder != null;
     }
 
     @Override
     public String getContentId() {
-        return contentId;
+        return mContentId;
     }
 
     @Override
     public void onViewVisible() {
-        basicLoggingApi.onContentViewed(contentLoggingData);
+        mBasicLoggingApi.onContentViewed(mContentLoggingData);
     }
 
     @Override
     public void onContentClicked() {
-        basicLoggingApi.onContentClicked(contentLoggingData);
+        mBasicLoggingApi.onContentClicked(mContentLoggingData);
     }
 
     @Override
     public void onContentSwiped() {
-        basicLoggingApi.onContentSwiped(contentLoggingData);
+        mBasicLoggingApi.onContentSwiped(mContentLoggingData);
     }
 
     @Override
@@ -262,15 +262,15 @@
     }
 
     private void removeAllPendingTasks() {
-        for (CancelableTask cancellable : viewActionTaskMap.values()) {
+        for (CancelableTask cancellable : mViewActionTaskMap.values()) {
             cancellable.cancel();
         }
 
-        viewActionTaskMap.clear();
+        mViewActionTaskMap.clear();
     }
 
     private void removePendingViewActionTaskForElement(int elementType) {
-        CancelableTask cancelable = viewActionTaskMap.remove(elementType);
+        CancelableTask cancelable = mViewActionTaskMap.remove(elementType);
         if (cancelable != null) {
             cancelable.cancel();
         }
@@ -292,11 +292,11 @@
     @Override
     public void onElementView(int elementType) {
         removePendingViewActionTaskForElement(elementType);
-        CancelableTask cancelableTask = mainThreadRunner.executeWithDelay(TAG + elementType,
+        CancelableTask cancelableTask = mMainThreadRunner.executeWithDelay(TAG + elementType,
                 ()
-                        -> basicLoggingApi.onVisualElementViewed(contentLoggingData, elementType),
-                viewDelayMs);
-        viewActionTaskMap.put(elementType, cancelableTask);
+                        -> mBasicLoggingApi.onVisualElementViewed(mContentLoggingData, elementType),
+                mViewDelayMs);
+        mViewActionTaskMap.put(elementType, cancelableTask);
     }
 
     @Override
@@ -307,12 +307,12 @@
     private class OfflineStatusConsumer implements Consumer<Boolean> {
         @Override
         public void accept(Boolean offlineStatus) {
-            if (offlineStatus.equals(availableOffline)) {
+            if (offlineStatus.equals(mAvailableOffline)) {
                 return;
             }
 
-            availableOffline = offlineStatus;
-            contentLoggingData = contentLoggingData.createWithOfflineStatus(offlineStatus);
+            mAvailableOffline = offlineStatus;
+            mContentLoggingData = mContentLoggingData.createWithOfflineStatus(offlineStatus);
             maybeRebind();
         }
     }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/basicstream/internal/drivers/ContinuationDriver.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/basicstream/internal/drivers/ContinuationDriver.java
index d93f70e..386b7c8 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/basicstream/internal/drivers/ContinuationDriver.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/basicstream/internal/drivers/ContinuationDriver.java
@@ -43,45 +43,45 @@
 public class ContinuationDriver extends LeafFeatureDriver
         implements OnClickListener, LoggingListener, TokenCompletedObserver {
     private static final String TAG = "ContinuationDriver";
-    private final BasicLoggingApi basicLoggingApi;
-    private final Context context;
-    private final CursorChangedListener cursorChangedListener;
-    private final ModelChild modelChild;
-    private final ModelToken modelToken;
-    private final ModelProvider modelProvider;
-    private final int position;
-    private final SnackbarApi snackbarApi;
-    private final SpinnerLogger spinnerLogger;
-    private final ThreadUtils threadUtils;
-    private final boolean consumeSyntheticTokens;
+    private final BasicLoggingApi mBasicLoggingApi;
+    private final Context mContext;
+    private final CursorChangedListener mCursorChangedListener;
+    private final ModelChild mModelChild;
+    private final ModelToken mModelToken;
+    private final ModelProvider mModelProvider;
+    private final int mPosition;
+    private final SnackbarApi mSnackbarApi;
+    private final SpinnerLogger mSpinnerLogger;
+    private final ThreadUtils mThreadUtils;
+    private final boolean mConsumeSyntheticTokens;
 
-    private boolean showSpinner;
-    private boolean initialized;
-    private boolean viewLogged;
-    private boolean destroyed;
-    private boolean tokenHandled;
-    private int failureCount;
+    private boolean mShowSpinner;
+    private boolean mInitialized;
+    private boolean mViewLogged;
+    private boolean mDestroyed;
+    private boolean mTokenHandled;
+    private int mFailureCount;
     @SpinnerType
-    private int spinnerType = SpinnerType.INFINITE_FEED;
-    /*@Nullable*/ private ContinuationViewHolder continuationViewHolder;
+    private int mSpinnerType = SpinnerType.INFINITE_FEED;
+    /*@Nullable*/ private ContinuationViewHolder mContinuationViewHolder;
 
     ContinuationDriver(BasicLoggingApi basicLoggingApi, Clock clock, Configuration configuration,
             Context context, CursorChangedListener cursorChangedListener, ModelChild modelChild,
             ModelProvider modelProvider, int position, SnackbarApi snackbarApi,
             ThreadUtils threadUtils, boolean restoring) {
-        this.basicLoggingApi = basicLoggingApi;
-        this.context = context;
-        this.cursorChangedListener = cursorChangedListener;
-        this.modelChild = modelChild;
-        this.modelProvider = modelProvider;
-        this.modelToken = modelChild.getModelToken();
-        this.position = position;
-        this.snackbarApi = snackbarApi;
-        this.spinnerLogger = createSpinnerLogger(basicLoggingApi, clock);
-        this.threadUtils = threadUtils;
-        this.showSpinner =
+        this.mBasicLoggingApi = basicLoggingApi;
+        this.mContext = context;
+        this.mCursorChangedListener = cursorChangedListener;
+        this.mModelChild = modelChild;
+        this.mModelProvider = modelProvider;
+        this.mModelToken = modelChild.getModelToken();
+        this.mPosition = position;
+        this.mSnackbarApi = snackbarApi;
+        this.mSpinnerLogger = createSpinnerLogger(basicLoggingApi, clock);
+        this.mThreadUtils = threadUtils;
+        this.mShowSpinner =
                 configuration.getValueOrDefault(ConfigKey.TRIGGER_IMMEDIATE_PAGINATION, false);
-        this.consumeSyntheticTokens =
+        this.mConsumeSyntheticTokens =
                 configuration.getValueOrDefault(ConfigKey.CONSUME_SYNTHETIC_TOKENS, false)
                 || (restoring
                         && configuration.getValueOrDefault(
@@ -89,41 +89,41 @@
     }
 
     public boolean hasTokenBeenHandled() {
-        return tokenHandled;
+        return mTokenHandled;
     }
 
     public void initialize() {
-        if (initialized) {
+        if (mInitialized) {
             return;
         }
 
-        initialized = true;
-        modelToken.registerObserver(this);
-        if (modelToken.isSynthetic() && consumeSyntheticTokens) {
+        mInitialized = true;
+        mModelToken.registerObserver(this);
+        if (mModelToken.isSynthetic() && mConsumeSyntheticTokens) {
             Logger.d(TAG, "Handling synthetic token");
-            boolean tokenWillBeHandled = modelProvider.handleToken(modelToken);
+            boolean tokenWillBeHandled = mModelProvider.handleToken(mModelToken);
             if (tokenWillBeHandled) {
-                showSpinner = true;
-                spinnerType = SpinnerType.SYNTHETIC_TOKEN;
-                tokenHandled = true;
+                mShowSpinner = true;
+                mSpinnerType = SpinnerType.SYNTHETIC_TOKEN;
+                mTokenHandled = true;
             } else {
                 Logger.e(TAG, "Synthetic token was not handled");
-                basicLoggingApi.onInternalError(InternalFeedError.UNHANDLED_TOKEN);
+                mBasicLoggingApi.onInternalError(InternalFeedError.UNHANDLED_TOKEN);
             }
         }
     }
 
     @Override
     public void onDestroy() {
-        destroyed = true;
+        mDestroyed = true;
 
-        if (initialized) {
-            modelToken.unregisterObserver(this);
+        if (mInitialized) {
+            mModelToken.unregisterObserver(this);
         }
         // If the spinner was being shown, it will only be removed when the ContinuationDriver is
         // destroyed. So onSpinnerShown should be logged then.
-        if (spinnerLogger.isSpinnerActive()) {
-            spinnerLogger.spinnerDestroyedWithoutCompleting();
+        if (mSpinnerLogger.isSpinnerActive()) {
+            mSpinnerLogger.spinnerDestroyedWithoutCompleting();
         }
     }
 
@@ -135,32 +135,32 @@
             Logger.wtf(TAG, "Calling onClick before binding.");
             return;
         }
-        boolean tokenWillBeHandled = modelProvider.handleToken(modelToken);
+        boolean tokenWillBeHandled = mModelProvider.handleToken(mModelToken);
         if (tokenWillBeHandled) {
-            showSpinner = true;
-            spinnerLogger.spinnerStarted(SpinnerType.MORE_BUTTON);
-            checkNotNull(continuationViewHolder).setShowSpinner(true);
-            tokenHandled = true;
+            mShowSpinner = true;
+            mSpinnerLogger.spinnerStarted(SpinnerType.MORE_BUTTON);
+            checkNotNull(mContinuationViewHolder).setShowSpinner(true);
+            mTokenHandled = true;
         } else {
             Logger.e(TAG, "Continuation token was not handled");
-            basicLoggingApi.onInternalError(InternalFeedError.UNHANDLED_TOKEN);
+            mBasicLoggingApi.onInternalError(InternalFeedError.UNHANDLED_TOKEN);
             showErrorUi();
         }
     }
 
     @Override
     public void bind(FeedViewHolder viewHolder) {
-        checkState(initialized);
+        checkState(mInitialized);
         if (isBound()) {
             Logger.wtf(TAG, "Rebinding.");
         }
         checkState(viewHolder instanceof ContinuationViewHolder);
 
-        continuationViewHolder = (ContinuationViewHolder) viewHolder;
-        continuationViewHolder.bind(
-                /* onClickListener= */ this, /* loggingListener= */ this, showSpinner);
-        if (showSpinner && !spinnerLogger.isSpinnerActive()) {
-            spinnerLogger.spinnerStarted(spinnerType);
+        mContinuationViewHolder = (ContinuationViewHolder) viewHolder;
+        mContinuationViewHolder.bind(
+                /* onClickListener= */ this, /* loggingListener= */ this, mShowSpinner);
+        if (mShowSpinner && !mSpinnerLogger.isSpinnerActive()) {
+            mSpinnerLogger.spinnerStarted(mSpinnerType);
         }
     }
 
@@ -171,30 +171,30 @@
 
     @Override
     public void unbind() {
-        if (continuationViewHolder == null) {
+        if (mContinuationViewHolder == null) {
             return;
         }
 
-        continuationViewHolder.unbind();
-        continuationViewHolder = null;
+        mContinuationViewHolder.unbind();
+        mContinuationViewHolder = null;
     }
 
     @Override
     public void maybeRebind() {
-        if (continuationViewHolder == null) {
+        if (mContinuationViewHolder == null) {
             return;
         }
 
         // Unbinding clears the viewHolder, so storing to rebind.
-        ContinuationViewHolder localViewHolder = continuationViewHolder;
+        ContinuationViewHolder localViewHolder = mContinuationViewHolder;
         unbind();
         bind(localViewHolder);
     }
 
     @Override
     public void onTokenCompleted(TokenCompleted tokenCompleted) {
-        threadUtils.checkMainThread();
-        if (destroyed) {
+        mThreadUtils.checkMainThread();
+        if (mDestroyed) {
             // Tokens are able to send onTokenCompleted even after unregistering.  This can happen
             // due to thread switching.  This prevents tokens from being handled after the driver
             // has been destroyed and should no longer be handled.
@@ -204,8 +204,8 @@
 
         // Spinner wouldn't be active if we are automatically consuming a synthetic token on
         // restore.
-        if (spinnerLogger.isSpinnerActive()) {
-            spinnerLogger.spinnerFinished();
+        if (mSpinnerLogger.isSpinnerActive()) {
+            mSpinnerLogger.spinnerFinished();
         }
 
         ModelCursor cursor = tokenCompleted.getCursor();
@@ -214,48 +214,48 @@
         // Display snackbar if there are no more cards. The snackbar should only be shown if the
         // spinner is being shown. This ensures the snackbar is only shown in the instance of the
         // Stream that triggered the pagination.
-        if (showSpinner
+        if (mShowSpinner
                 && (modelChildren.isEmpty()
                         || (modelChildren.size() == 1
                                 && modelChildren.get(0).getType() == Type.TOKEN))) {
-            snackbarApi.show(
-                    context.getResources().getString(R.string.snackbar_fetch_no_new_suggestions));
+            mSnackbarApi.show(
+                    mContext.getResources().getString(R.string.snackbar_fetch_no_new_suggestions));
         }
 
-        cursorChangedListener.onNewChildren(modelChild, modelChildren, modelToken.isSynthetic());
+        mCursorChangedListener.onNewChildren(mModelChild, modelChildren, mModelToken.isSynthetic());
     }
 
     @Override
     public void onError(ModelError modelError) {
-        basicLoggingApi.onTokenFailedToComplete(modelToken.isSynthetic(), ++failureCount);
+        mBasicLoggingApi.onTokenFailedToComplete(mModelToken.isSynthetic(), ++mFailureCount);
         showErrorUi();
-        spinnerLogger.spinnerFinished();
+        mSpinnerLogger.spinnerFinished();
     }
 
     private void showErrorUi() {
-        showSpinner = false;
+        mShowSpinner = false;
 
-        if (continuationViewHolder != null) {
-            continuationViewHolder.setShowSpinner(false);
+        if (mContinuationViewHolder != null) {
+            mContinuationViewHolder.setShowSpinner(false);
         }
 
-        snackbarApi.show(context.getString(R.string.snackbar_fetch_failed));
+        mSnackbarApi.show(mContext.getString(R.string.snackbar_fetch_failed));
     }
 
     @Override
     public void onViewVisible() {
         // Do not log a view if the spinner is being shown.
-        if (viewLogged || showSpinner) {
+        if (mViewLogged || mShowSpinner) {
             return;
         }
 
-        basicLoggingApi.onMoreButtonViewed(position);
-        viewLogged = true;
+        mBasicLoggingApi.onMoreButtonViewed(mPosition);
+        mViewLogged = true;
     }
 
     @Override
     public void onContentClicked() {
-        basicLoggingApi.onMoreButtonClicked(position);
+        mBasicLoggingApi.onMoreButtonClicked(mPosition);
     }
 
     @Override
@@ -297,7 +297,7 @@
 
     @VisibleForTesting
     boolean isBound() {
-        return continuationViewHolder != null;
+        return mContinuationViewHolder != null;
     }
 
     @VisibleForTesting
@@ -309,6 +309,6 @@
 
     @Override
     public String getContentId() {
-        return modelToken.getStreamToken().getContentId();
+        return mModelToken.getStreamToken().getContentId();
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/basicstream/internal/drivers/HeaderDriver.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/basicstream/internal/drivers/HeaderDriver.java
index 490f4f78..9d4d39a 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/basicstream/internal/drivers/HeaderDriver.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/basicstream/internal/drivers/HeaderDriver.java
@@ -19,19 +19,19 @@
 public class HeaderDriver extends LeafFeatureDriver {
     private static final String TAG = "HeaderDriver";
 
-    private final Header header;
-    private final SwipeNotifier swipeNotifier;
-    /*@Nullable*/ private HeaderViewHolder headerViewHolder;
+    private final Header mHeader;
+    private final SwipeNotifier mSwipeNotifier;
+    /*@Nullable*/ private HeaderViewHolder mHeaderViewHolder;
 
     public HeaderDriver(Header header, SwipeNotifier swipeNotifier) {
-        this.header = header;
-        this.swipeNotifier = swipeNotifier;
+        this.mHeader = header;
+        this.mSwipeNotifier = swipeNotifier;
     }
 
     @Override
     public void bind(FeedViewHolder viewHolder) {
         if (isBound()) {
-            if (viewHolder == this.headerViewHolder) {
+            if (viewHolder == this.mHeaderViewHolder) {
                 Logger.e(TAG, "Being rebound to the previously bound viewholder");
                 return;
             }
@@ -39,28 +39,28 @@
         }
 
         checkState(viewHolder instanceof HeaderViewHolder);
-        headerViewHolder = (HeaderViewHolder) viewHolder;
-        headerViewHolder.bind(header, swipeNotifier);
+        mHeaderViewHolder = (HeaderViewHolder) viewHolder;
+        mHeaderViewHolder.bind(mHeader, mSwipeNotifier);
     }
 
     @Override
     public void unbind() {
-        if (headerViewHolder == null) {
+        if (mHeaderViewHolder == null) {
             return;
         }
 
-        headerViewHolder.unbind();
-        headerViewHolder = null;
+        mHeaderViewHolder.unbind();
+        mHeaderViewHolder = null;
     }
 
     @Override
     public void maybeRebind() {
-        if (headerViewHolder == null) {
+        if (mHeaderViewHolder == null) {
             return;
         }
 
         // Unbinding clears the viewHolder, so storing to rebind.
-        HeaderViewHolder localViewHolder = headerViewHolder;
+        HeaderViewHolder localViewHolder = mHeaderViewHolder;
         unbind();
         bind(localViewHolder);
     }
@@ -74,11 +74,11 @@
     public void onDestroy() {}
 
     public Header getHeader() {
-        return header;
+        return mHeader;
     }
 
     @VisibleForTesting
     boolean isBound() {
-        return headerViewHolder != null;
+        return mHeaderViewHolder != null;
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/basicstream/internal/drivers/NoContentDriver.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/basicstream/internal/drivers/NoContentDriver.java
index d484d6c..be0c754d 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/basicstream/internal/drivers/NoContentDriver.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/basicstream/internal/drivers/NoContentDriver.java
@@ -16,7 +16,7 @@
 /** {@link FeatureDriver} for NoContent card. */
 public class NoContentDriver extends LeafFeatureDriver {
     private static final String TAG = "NoContentDriver";
-    /*@Nullable*/ private NoContentViewHolder noContentViewHolder;
+    /*@Nullable*/ private NoContentViewHolder mNoContentViewHolder;
 
     @Override
     public void bind(FeedViewHolder viewHolder) {
@@ -25,8 +25,8 @@
         }
 
         checkState(viewHolder instanceof NoContentViewHolder);
-        noContentViewHolder = (NoContentViewHolder) viewHolder;
-        noContentViewHolder.bind();
+        mNoContentViewHolder = (NoContentViewHolder) viewHolder;
+        mNoContentViewHolder.bind();
     }
 
     @Override
@@ -36,29 +36,29 @@
 
     @Override
     public void unbind() {
-        if (noContentViewHolder == null) {
+        if (mNoContentViewHolder == null) {
             return;
         }
 
-        noContentViewHolder.unbind();
-        noContentViewHolder = null;
+        mNoContentViewHolder.unbind();
+        mNoContentViewHolder = null;
     }
 
     @Override
     public void maybeRebind() {
-        if (noContentViewHolder == null) {
+        if (mNoContentViewHolder == null) {
             return;
         }
 
         // Unbinding clears the viewHolder, so storing to rebind.
-        NoContentViewHolder localViewHolder = noContentViewHolder;
+        NoContentViewHolder localViewHolder = mNoContentViewHolder;
         unbind();
         bind(localViewHolder);
     }
 
     @VisibleForTesting
     boolean isBound() {
-        return noContentViewHolder != null;
+        return mNoContentViewHolder != null;
     }
 
     @Override
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/basicstream/internal/drivers/StreamDriver.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/basicstream/internal/drivers/StreamDriver.java
index 18c6ba9..faabf503 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/basicstream/internal/drivers/StreamDriver.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/basicstream/internal/drivers/StreamDriver.java
@@ -60,33 +60,33 @@
 public class StreamDriver
         implements CursorChangedListener, FeatureChangeObserver, PendingDismissHandler {
     private static final String TAG = "StreamDriver";
-    private final ActionApi actionApi;
-    private final ActionManager actionManager;
-    private final ActionParserFactory actionParserFactory;
-    private final ThreadUtils threadUtils;
-    private final ModelProvider modelProvider;
-    private final Map<ModelChild, FeatureDriver> modelChildFeatureDriverMap;
-    private final List<FeatureDriver> featureDrivers;
-    private final Clock clock;
-    private final Configuration configuration;
-    private final Context context;
-    private final SnackbarApi snackbarApi;
-    private final ContentChangedListener contentChangedListener;
-    private final ScrollRestorer scrollRestorer;
-    private final BasicLoggingApi basicLoggingApi;
-    private final StreamOfflineMonitor streamOfflineMonitor;
-    private final ContextMenuManager contextMenuManager;
-    private final boolean isInitialLoad;
-    private final MainThreadRunner mainThreadRunner;
-    private final ViewLoggingUpdater viewLoggingUpdater;
-    private final TooltipApi tooltipApi;
-    private final UiRefreshReason uiRefreshReason;
-    private final ScrollTracker scrollTracker;
+    private final ActionApi mActionApi;
+    private final ActionManager mActionManager;
+    private final ActionParserFactory mActionParserFactory;
+    private final ThreadUtils mThreadUtils;
+    private final ModelProvider mModelProvider;
+    private final Map<ModelChild, FeatureDriver> mModelChildFeatureDriverMap;
+    private final List<FeatureDriver> mFeatureDrivers;
+    private final Clock mClock;
+    private final Configuration mConfiguration;
+    private final Context mContext;
+    private final SnackbarApi mSnackbarApi;
+    private final ContentChangedListener mContentChangedListener;
+    private final ScrollRestorer mScrollRestorer;
+    private final BasicLoggingApi mBasicLoggingApi;
+    private final StreamOfflineMonitor mStreamOfflineMonitor;
+    private final ContextMenuManager mContextMenuManager;
+    private final boolean mIsInitialLoad;
+    private final MainThreadRunner mMainThreadRunner;
+    private final ViewLoggingUpdater mViewLoggingUpdater;
+    private final TooltipApi mTooltipApi;
+    private final UiRefreshReason mUiRefreshReason;
+    private final ScrollTracker mScrollTracker;
 
-    private boolean restoring;
-    private boolean rootFeatureConsumed;
-    private boolean modelFeatureChangeObserverRegistered;
-    /*@Nullable*/ private StreamContentListener contentListener;
+    private boolean mRestoring;
+    private boolean mRootFeatureConsumed;
+    private boolean mModelFeatureChangeObserverRegistered;
+    /*@Nullable*/ private StreamContentListener mContentListener;
 
     public StreamDriver(ActionApi actionApi, ActionManager actionManager,
             ActionParserFactory actionParserFactory, ModelProvider modelProvider,
@@ -98,29 +98,29 @@
             MainThreadRunner mainThreadRunner, ViewLoggingUpdater viewLoggingUpdater,
             TooltipApi tooltipApi, UiRefreshReason uiRefreshReason,
             BasicStreamScrollMonitor scrollMonitor) {
-        this.actionApi = actionApi;
-        this.actionManager = actionManager;
-        this.actionParserFactory = actionParserFactory;
-        this.threadUtils = threadUtils;
-        this.modelProvider = modelProvider;
-        this.clock = clock;
-        this.context = context;
-        this.snackbarApi = snackbarApi;
-        this.contextMenuManager = contextMenuManager;
-        this.modelChildFeatureDriverMap = new HashMap<>();
-        this.featureDrivers = new ArrayList<>();
-        this.configuration = configuration;
-        this.contentChangedListener = contentChangedListener;
-        this.scrollRestorer = scrollRestorer;
-        this.basicLoggingApi = basicLoggingApi;
-        this.streamOfflineMonitor = streamOfflineMonitor;
-        this.restoring = restoring;
-        this.isInitialLoad = isInitialLoad;
-        this.mainThreadRunner = mainThreadRunner;
-        this.viewLoggingUpdater = viewLoggingUpdater;
-        this.tooltipApi = tooltipApi;
-        this.uiRefreshReason = uiRefreshReason;
-        scrollTracker = new BasicStreamScrollTracker(
+        this.mActionApi = actionApi;
+        this.mActionManager = actionManager;
+        this.mActionParserFactory = actionParserFactory;
+        this.mThreadUtils = threadUtils;
+        this.mModelProvider = modelProvider;
+        this.mClock = clock;
+        this.mContext = context;
+        this.mSnackbarApi = snackbarApi;
+        this.mContextMenuManager = contextMenuManager;
+        this.mModelChildFeatureDriverMap = new HashMap<>();
+        this.mFeatureDrivers = new ArrayList<>();
+        this.mConfiguration = configuration;
+        this.mContentChangedListener = contentChangedListener;
+        this.mScrollRestorer = scrollRestorer;
+        this.mBasicLoggingApi = basicLoggingApi;
+        this.mStreamOfflineMonitor = streamOfflineMonitor;
+        this.mRestoring = restoring;
+        this.mIsInitialLoad = isInitialLoad;
+        this.mMainThreadRunner = mainThreadRunner;
+        this.mViewLoggingUpdater = viewLoggingUpdater;
+        this.mTooltipApi = tooltipApi;
+        this.mUiRefreshReason = uiRefreshReason;
+        mScrollTracker = new BasicStreamScrollTracker(
                 mainThreadRunner, new ScrollLogger(basicLoggingApi), clock, scrollMonitor);
 
         modelProvider.enableRemoveTracking(
@@ -132,52 +132,52 @@
      * given {@link ModelFeature}.
      */
     public List<LeafFeatureDriver> getLeafFeatureDrivers() {
-        if (modelProvider.getCurrentState() == State.READY && !rootFeatureConsumed) {
+        if (mModelProvider.getCurrentState() == State.READY && !mRootFeatureConsumed) {
             ChildCreationPayload childCreationPayload;
-            rootFeatureConsumed = true;
-            ModelFeature rootFeature = modelProvider.getRootFeature();
+            mRootFeatureConsumed = true;
+            ModelFeature rootFeature = mModelProvider.getRootFeature();
             if (rootFeature != null) {
-                childCreationPayload = createAndInsertChildren(rootFeature, modelProvider);
+                childCreationPayload = createAndInsertChildren(rootFeature, mModelProvider);
                 rootFeature.registerObserver(this);
-                modelFeatureChangeObserverRegistered = true;
-                if (uiRefreshReason.getReason().equals(Reason.ZERO_STATE)) {
-                    basicLoggingApi.onZeroStateRefreshCompleted(
-                            childCreationPayload.contentCount, childCreationPayload.tokenCount);
+                mModelFeatureChangeObserverRegistered = true;
+                if (mUiRefreshReason.getReason().equals(Reason.ZERO_STATE)) {
+                    mBasicLoggingApi.onZeroStateRefreshCompleted(
+                            childCreationPayload.mContentCount, childCreationPayload.mTokenCount);
                 }
             } else {
-                basicLoggingApi.onInternalError(InternalFeedError.NO_ROOT_FEATURE);
+                mBasicLoggingApi.onInternalError(InternalFeedError.NO_ROOT_FEATURE);
                 Logger.w(TAG, "found null root feature loading Leaf Feature Drivers");
-                if (uiRefreshReason.getReason().equals(Reason.ZERO_STATE)) {
-                    basicLoggingApi.onZeroStateRefreshCompleted(
+                if (mUiRefreshReason.getReason().equals(Reason.ZERO_STATE)) {
+                    mBasicLoggingApi.onZeroStateRefreshCompleted(
                             /* newContentCount= */ 0, /* newTokenCount= */ 0);
                 }
             }
         }
 
-        if (!isInitialLoad) {
+        if (!mIsInitialLoad) {
             addNoContentCardOrZeroStateIfNecessary(ZeroStateShowReason.NO_CONTENT);
         }
 
-        return buildLeafFeatureDrivers(featureDrivers);
+        return buildLeafFeatureDrivers(mFeatureDrivers);
     }
 
     public void maybeRestoreScroll() {
-        if (!restoring) {
+        if (!mRestoring) {
             return;
         }
 
         if (isLastDriverContinuationDriver()) {
             ContinuationDriver continuationDriver =
-                    (ContinuationDriver) featureDrivers.get(featureDrivers.size() - 1);
+                    (ContinuationDriver) mFeatureDrivers.get(mFeatureDrivers.size() - 1);
             // If there is a synthetic token, we should only restore if it has not been handled yet.
             if (continuationDriver.hasTokenBeenHandled()) {
                 return;
             }
         }
 
-        restoring = false;
+        mRestoring = false;
 
-        scrollRestorer.maybeRestoreScroll();
+        mScrollRestorer.maybeRestoreScroll();
     }
 
     private ChildCreationPayload createAndInsertChildren(
@@ -193,17 +193,17 @@
     private ChildCreationPayload createAndInsertChildrenAtIndex(
             ModelCursor streamCursor, ModelProvider modelProvider, int insertionIndex) {
         Iterable<ModelChild> cursorIterable = () -> new Iterator<ModelChild>() {
-            /*@Nullable*/ private ModelChild next;
+            /*@Nullable*/ private ModelChild mNext;
 
             @Override
             public boolean hasNext() {
-                next = streamCursor.getNextItem();
-                return next != null;
+                mNext = streamCursor.getNextItem();
+                return mNext != null;
             }
 
             @Override
             public ModelChild next() {
-                return checkNotNull(next);
+                return checkNotNull(mNext);
             }
         };
         return createAndInsertChildrenAtIndex(cursorIterable, modelProvider, insertionIndex);
@@ -225,8 +225,8 @@
                     tokenCount++;
                 }
                 newChildren.add(featureDriverChild);
-                featureDrivers.add(insertionIndex, featureDriverChild);
-                modelChildFeatureDriverMap.put(child, featureDriverChild);
+                mFeatureDrivers.add(insertionIndex, featureDriverChild);
+                mModelChildFeatureDriverMap.put(child, featureDriverChild);
                 insertionIndex++;
             }
         }
@@ -241,8 +241,8 @@
                 return createFeatureChild(child.getModelFeature(), position);
             case Type.TOKEN:
                 ContinuationDriver continuationDriver =
-                        createContinuationDriver(basicLoggingApi, clock, configuration, context,
-                                child, modelProvider, position, snackbarApi, restoring);
+                        createContinuationDriver(mBasicLoggingApi, mClock, mConfiguration, mContext,
+                                child, modelProvider, position, mSnackbarApi, mRestoring);
 
                 // TODO: Look into moving initialize() into a more generic location. We don't
                 // really want work to be done in the constructor so we call an initialize() method
@@ -250,7 +250,7 @@
                 continuationDriver.initialize();
                 return continuationDriver;
             case Type.UNBOUND:
-                basicLoggingApi.onInternalError(InternalFeedError.TOP_LEVEL_UNBOUND_CHILD);
+                mBasicLoggingApi.onInternalError(InternalFeedError.TOP_LEVEL_UNBOUND_CHILD);
                 Logger.e(TAG, "Found unbound child %s, ignoring it", child.getContentId());
                 return null;
             default:
@@ -267,7 +267,7 @@
             return createClusterDriver(modelFeature, position);
         }
 
-        basicLoggingApi.onInternalError(InternalFeedError.TOP_LEVEL_INVALID_FEATURE_TYPE);
+        mBasicLoggingApi.onInternalError(InternalFeedError.TOP_LEVEL_INVALID_FEATURE_TYPE);
         Logger.w(TAG, "Invalid StreamFeature Type, must be Card or Cluster but was %s",
                 modelFeature.getStreamFeature().getFeaturePayloadCase());
         return null;
@@ -281,16 +281,16 @@
             if (leafFeatureDriver != null) {
                 leafFeatureDrivers.add(leafFeatureDriver);
             } else {
-                basicLoggingApi.onInternalError(InternalFeedError.FAILED_TO_CREATE_LEAF);
+                mBasicLoggingApi.onInternalError(InternalFeedError.FAILED_TO_CREATE_LEAF);
                 removes.add(featureDriver);
             }
         }
         for (FeatureDriver driver : removes) {
-            this.featureDrivers.remove(driver);
+            this.mFeatureDrivers.remove(driver);
             driver.onDestroy();
         }
 
-        streamOfflineMonitor.requestOfflineStatusForNewContent();
+        mStreamOfflineMonitor.requestOfflineStatusForNewContent();
 
         return leafFeatureDrivers;
     }
@@ -314,12 +314,12 @@
         List<ModelChild> appendedChildren = change.getChildChanges().getAppendedChildren();
 
         if (!appendedChildren.isEmpty()) {
-            int insertionIndex = featureDrivers.size();
+            int insertionIndex = mFeatureDrivers.size();
 
             notifyContentsAdded(insertionIndex,
                     buildLeafFeatureDrivers(createAndInsertChildrenAtIndex(
-                            appendedChildren, modelProvider, insertionIndex)
-                                                    .featureDrivers));
+                            appendedChildren, mModelProvider, insertionIndex)
+                                                    .mFeatureDrivers));
         }
 
         addNoContentCardOrZeroStateIfNecessary(ZeroStateShowReason.CONTENT_DISMISSED);
@@ -334,17 +334,17 @@
             return;
         }
         ChildCreationPayload tokenPayload =
-                createAndInsertChildrenAtIndex(modelChildren, modelProvider, continuationIndex);
+                createAndInsertChildrenAtIndex(modelChildren, mModelProvider, continuationIndex);
 
-        List<FeatureDriver> newChildren = tokenPayload.featureDrivers;
+        List<FeatureDriver> newChildren = tokenPayload.mFeatureDrivers;
 
-        basicLoggingApi.onTokenCompleted(
-                wasSynthetic, tokenPayload.contentCount, tokenPayload.tokenCount);
+        mBasicLoggingApi.onTokenCompleted(
+                wasSynthetic, tokenPayload.mContentCount, tokenPayload.mTokenCount);
         notifyContentsAdded(continuationIndex, buildLeafFeatureDrivers(newChildren));
         maybeRemoveNoContentOrZeroStateCard();
         // Swap no content card with zero state if there are no more drivers.
-        if (newChildren.isEmpty() && featureDrivers.size() == 1
-                && featureDrivers.get(0) instanceof NoContentDriver) {
+        if (newChildren.isEmpty() && mFeatureDrivers.size() == 1
+                && mFeatureDrivers.get(0) instanceof NoContentDriver) {
             showZeroState(ZeroStateShowReason.NO_CONTENT_FROM_CONTINUATION_TOKEN);
         }
 
@@ -352,48 +352,48 @@
     }
 
     private void alwaysRemoveNoContentOrZeroStateCardIfPresent() {
-        if (featureDrivers.size() == 1
-                && ((featureDrivers.get(0) instanceof NoContentDriver)
-                        || (featureDrivers.get(0) instanceof ZeroStateDriver))) {
-            featureDrivers.get(0).onDestroy();
-            featureDrivers.remove(0);
+        if (mFeatureDrivers.size() == 1
+                && ((mFeatureDrivers.get(0) instanceof NoContentDriver)
+                        || (mFeatureDrivers.get(0) instanceof ZeroStateDriver))) {
+            mFeatureDrivers.get(0).onDestroy();
+            mFeatureDrivers.remove(0);
             notifyContentRemoved(0);
         }
     }
 
     private void maybeRemoveNoContentOrZeroStateCard() {
         if (shouldRemoveNoContentCardOrZeroState()) {
-            featureDrivers.get(0).onDestroy();
-            featureDrivers.remove(0);
+            mFeatureDrivers.get(0).onDestroy();
+            mFeatureDrivers.remove(0);
             notifyContentRemoved(0);
         }
     }
 
     public void onDestroy() {
-        for (FeatureDriver featureDriver : featureDrivers) {
+        for (FeatureDriver featureDriver : mFeatureDrivers) {
             featureDriver.onDestroy();
         }
-        ModelFeature modelFeature = modelProvider.getRootFeature();
-        if (modelFeature != null && modelFeatureChangeObserverRegistered) {
+        ModelFeature modelFeature = mModelProvider.getRootFeature();
+        if (modelFeature != null && mModelFeatureChangeObserverRegistered) {
             modelFeature.unregisterObserver(this);
-            modelFeatureChangeObserverRegistered = false;
+            mModelFeatureChangeObserverRegistered = false;
         }
-        featureDrivers.clear();
-        modelChildFeatureDriverMap.clear();
-        scrollTracker.onUnbind();
+        mFeatureDrivers.clear();
+        mModelChildFeatureDriverMap.clear();
+        mScrollTracker.onUnbind();
     }
 
     public boolean hasContent() {
-        if (featureDrivers.isEmpty()) {
+        if (mFeatureDrivers.isEmpty()) {
             return false;
         }
-        return !(featureDrivers.get(0) instanceof NoContentDriver)
-                && !(featureDrivers.get(0) instanceof ZeroStateDriver);
+        return !(mFeatureDrivers.get(0) instanceof NoContentDriver)
+                && !(mFeatureDrivers.get(0) instanceof ZeroStateDriver);
     }
 
     public boolean isZeroStateBeingShown() {
-        return !featureDrivers.isEmpty() && featureDrivers.get(0) instanceof ZeroStateDriver
-                && !((ZeroStateDriver) featureDrivers.get(0)).isSpinnerShowing();
+        return !mFeatureDrivers.isEmpty() && mFeatureDrivers.get(0) instanceof ZeroStateDriver
+                && !((ZeroStateDriver) mFeatureDrivers.get(0)).isSpinnerShowing();
     }
 
     public void setModelProviderForZeroState(ModelProvider modelProvider) {
@@ -402,41 +402,41 @@
                     "setModelProviderForZeroState should only be called when zero state is shown");
             return;
         }
-        ((ZeroStateDriver) featureDrivers.get(0)).setModelProvider(modelProvider);
+        ((ZeroStateDriver) mFeatureDrivers.get(0)).setModelProvider(modelProvider);
     }
 
     private void addNoContentCardOrZeroStateIfNecessary(
             @ZeroStateShowReason int zeroStateShowReason) {
         LeafFeatureDriver leafFeatureDriver = null;
-        if (!restoring && featureDrivers.isEmpty()) {
+        if (!mRestoring && mFeatureDrivers.isEmpty()) {
             leafFeatureDriver = createAndLogZeroState(zeroStateShowReason);
-        } else if (featureDrivers.size() == 1 && isLastDriverContinuationDriver()) {
+        } else if (mFeatureDrivers.size() == 1 && isLastDriverContinuationDriver()) {
             leafFeatureDriver = createNoContentDriver();
         }
 
         if (leafFeatureDriver != null) {
-            featureDrivers.add(0, leafFeatureDriver);
+            mFeatureDrivers.add(0, leafFeatureDriver);
             notifyContentsAdded(0, Collections.singletonList(leafFeatureDriver));
         }
     }
 
     private boolean shouldRemoveNoContentCardOrZeroState() {
-        if (featureDrivers.isEmpty()) {
+        if (mFeatureDrivers.isEmpty()) {
             return false;
         }
 
-        if (!(featureDrivers.get(0) instanceof NoContentDriver)
-                && !(featureDrivers.get(0) instanceof ZeroStateDriver)) {
+        if (!(mFeatureDrivers.get(0) instanceof NoContentDriver)
+                && !(mFeatureDrivers.get(0) instanceof ZeroStateDriver)) {
             return false;
         }
 
-        return featureDrivers.size() > 2
-                || (featureDrivers.size() == 2 && !isLastDriverContinuationDriver());
+        return mFeatureDrivers.size() > 2
+                || (mFeatureDrivers.size() == 2 && !isLastDriverContinuationDriver());
     }
 
     private boolean isLastDriverContinuationDriver() {
-        return !featureDrivers.isEmpty()
-                && featureDrivers.get(featureDrivers.size() - 1) instanceof ContinuationDriver;
+        return !mFeatureDrivers.isEmpty()
+                && mFeatureDrivers.get(mFeatureDrivers.size() - 1) instanceof ContinuationDriver;
     }
 
     /**
@@ -448,18 +448,18 @@
      * found.
      */
     private int removeDriver(ModelChild modelChild) {
-        FeatureDriver featureDriver = modelChildFeatureDriverMap.get(modelChild);
+        FeatureDriver featureDriver = mModelChildFeatureDriverMap.get(modelChild);
         if (featureDriver == null) {
             Logger.w(TAG, "Attempting to remove feature from ModelChild not in map, %s",
                     modelChild.getContentId());
             return -1;
         }
 
-        for (int i = 0; i < featureDrivers.size(); i++) {
-            if (featureDrivers.get(i) == featureDriver) {
-                featureDrivers.remove(i);
+        for (int i = 0; i < mFeatureDrivers.size(); i++) {
+            if (mFeatureDrivers.get(i) == featureDriver) {
+                mFeatureDrivers.remove(i);
                 featureDriver.onDestroy();
-                modelChildFeatureDriverMap.remove(modelChild);
+                mModelChildFeatureDriverMap.remove(modelChild);
                 notifyContentRemoved(i);
                 return i;
             }
@@ -471,20 +471,20 @@
     }
 
     private void notifyContentsAdded(int index, List<LeafFeatureDriver> leafFeatureDrivers) {
-        if (contentListener != null) {
-            contentListener.notifyContentsAdded(index, leafFeatureDrivers);
+        if (mContentListener != null) {
+            mContentListener.notifyContentsAdded(index, leafFeatureDrivers);
         }
     }
 
     private void notifyContentRemoved(int index) {
-        if (contentListener != null) {
-            contentListener.notifyContentRemoved(index);
+        if (mContentListener != null) {
+            mContentListener.notifyContentRemoved(index);
         }
     }
 
     private void notifyContentsCleared() {
-        if (contentListener != null) {
-            contentListener.notifyContentsCleared();
+        if (mContentListener != null) {
+            mContentListener.notifyContentsCleared();
         }
     }
 
@@ -492,7 +492,7 @@
     public void showSpinner() {
         ZeroStateDriver zeroStateDriver = createSpinner();
         clearAllContent();
-        featureDrivers.add(zeroStateDriver);
+        mFeatureDrivers.add(zeroStateDriver);
         notifyContentsAdded(0, Collections.singletonList(zeroStateDriver));
     }
 
@@ -500,43 +500,43 @@
     public void showZeroState(@ZeroStateShowReason int zeroStateShowReason) {
         ZeroStateDriver zeroStateDriver = createAndLogZeroState(zeroStateShowReason);
         clearAllContent();
-        featureDrivers.add(zeroStateDriver);
+        mFeatureDrivers.add(zeroStateDriver);
         notifyContentsAdded(0, Collections.singletonList(zeroStateDriver));
     }
 
     private void clearAllContent() {
         // TODO: Make sure to not notify listeners when driver is destroyed.
-        for (FeatureDriver featureDriver : featureDrivers) {
+        for (FeatureDriver featureDriver : mFeatureDrivers) {
             featureDriver.onDestroy();
         }
-        featureDrivers.clear();
+        mFeatureDrivers.clear();
         notifyContentsCleared();
     }
 
     private ZeroStateDriver createAndLogZeroState(@ZeroStateShowReason int zeroStateShowReason) {
-        basicLoggingApi.onZeroStateShown(zeroStateShowReason);
+        mBasicLoggingApi.onZeroStateShown(zeroStateShowReason);
 
         return createZeroStateDriver();
     }
 
     @VisibleForTesting
     FeatureDriver createClusterDriver(ModelFeature modelFeature, int position) {
-        return new ClusterDriver(actionApi, actionManager, actionParserFactory, basicLoggingApi,
-                modelFeature, modelProvider, position, this, streamOfflineMonitor,
-                contentChangedListener, contextMenuManager, mainThreadRunner, configuration,
-                viewLoggingUpdater, tooltipApi);
+        return new ClusterDriver(mActionApi, mActionManager, mActionParserFactory, mBasicLoggingApi,
+                modelFeature, mModelProvider, position, this, mStreamOfflineMonitor,
+                mContentChangedListener, mContextMenuManager, mMainThreadRunner, mConfiguration,
+                mViewLoggingUpdater, mTooltipApi);
     }
 
     @VisibleForTesting
     FeatureDriver createCardDriver(ModelFeature modelFeature, int position) {
-        return new CardDriver(actionApi, actionManager, actionParserFactory, basicLoggingApi,
-                modelFeature, modelProvider, position,
+        return new CardDriver(mActionApi, mActionManager, mActionParserFactory, mBasicLoggingApi,
+                modelFeature, mModelProvider, position,
                 (undoAction, pendingDismissCallback)
                         -> {
                     Logger.wtf(TAG, "Dismissing a card without a cluster is not supported.");
                 },
-                streamOfflineMonitor, contentChangedListener, contextMenuManager, mainThreadRunner,
-                configuration, viewLoggingUpdater, tooltipApi);
+                mStreamOfflineMonitor, mContentChangedListener, mContextMenuManager,
+                mMainThreadRunner, mConfiguration, mViewLoggingUpdater, mTooltipApi);
     }
 
     @VisibleForTesting
@@ -544,7 +544,7 @@
             Configuration configuration, Context context, ModelChild modelChild,
             ModelProvider modelProvider, int position, SnackbarApi snackbarApi, boolean restoring) {
         return new ContinuationDriver(basicLoggingApi, clock, configuration, context, this,
-                modelChild, modelProvider, position, snackbarApi, threadUtils, restoring);
+                modelChild, modelProvider, position, snackbarApi, mThreadUtils, restoring);
     }
 
     @VisibleForTesting
@@ -554,18 +554,20 @@
 
     @VisibleForTesting
     ZeroStateDriver createZeroStateDriver() {
-        return new ZeroStateDriver(basicLoggingApi, clock, modelProvider, contentChangedListener,
+        return new ZeroStateDriver(mBasicLoggingApi, mClock, mModelProvider,
+                mContentChangedListener,
                 /* spinnerShown = */ false);
     }
 
     @VisibleForTesting
     ZeroStateDriver createSpinner() {
-        return new ZeroStateDriver(basicLoggingApi, clock, modelProvider, contentChangedListener,
+        return new ZeroStateDriver(mBasicLoggingApi, mClock, mModelProvider,
+                mContentChangedListener,
                 /* spinnerShown= */ true);
     }
 
     public void setStreamContentListener(/*@Nullable*/ StreamContentListener contentListener) {
-        this.contentListener = contentListener;
+        this.mContentListener = contentListener;
     }
 
     @Override
@@ -580,14 +582,14 @@
             return;
         }
 
-        FeatureDriver featureDriver = modelChildFeatureDriverMap.get(modelChild);
+        FeatureDriver featureDriver = mModelChildFeatureDriverMap.get(modelChild);
         if (featureDriver == null) {
             Logger.wtf(TAG, "No FeatureDriver found for that model child.");
             pendingDismissCallback.onDismissCommitted();
             return;
         }
 
-        int index = featureDrivers.indexOf(featureDriver);
+        int index = mFeatureDrivers.indexOf(featureDriver);
         if (index < 0) {
             Logger.wtf(TAG, "No FeatureDriver found in the FeatureDriver list.");
             pendingDismissCallback.onDismissCommitted();
@@ -596,10 +598,10 @@
 
         removeDriver(modelChild);
         addNoContentCardOrZeroStateIfNecessary(ZeroStateShowReason.CONTENT_DISMISSED);
-        snackbarApi.show(undoAction.getConfirmationLabel(),
+        mSnackbarApi.show(undoAction.getConfirmationLabel(),
                 undoAction.hasUndoLabel()
                         ? undoAction.getUndoLabel()
-                        : context.getResources().getString(R.string.snackbar_default_action),
+                        : mContext.getResources().getString(R.string.snackbar_default_action),
                 new SnackbarCallbackApi() {
                     @Override
                     public void onDismissNoAction() {
@@ -621,22 +623,22 @@
             Logger.wtf(TAG, "Could not recreate the FeatureDriver.");
             return;
         }
-        featureDrivers.add(index, featureDriver);
+        mFeatureDrivers.add(index, featureDriver);
         if (modelChild != null) {
-            modelChildFeatureDriverMap.put(modelChild, featureDriver);
+            mModelChildFeatureDriverMap.put(modelChild, featureDriver);
         }
         LeafFeatureDriver leafFeatureDriver = featureDriver.getLeafFeatureDriver();
         if (leafFeatureDriver == null) {
             Logger.wtf(TAG, "No LeafFeatureDriver found.");
             return;
         }
-        notifyContentsAdded(featureDrivers.indexOf(featureDriver),
+        notifyContentsAdded(mFeatureDrivers.indexOf(featureDriver),
                 Collections.singletonList(leafFeatureDriver));
     }
 
     /*@Nullable*/
     private ModelChild getModelChildForContentId(String contentId) {
-        for (ModelChild model : modelChildFeatureDriverMap.keySet()) {
+        for (ModelChild model : mModelChildFeatureDriverMap.keySet()) {
             if (model.getContentId().equals(contentId)) {
                 return model;
             }
@@ -646,15 +648,15 @@
 
     /** Contains the {@link FeatureDriver} instances that were created and metadata about them. */
     private static class ChildCreationPayload {
-        private final List<FeatureDriver> featureDrivers;
-        private final int tokenCount;
-        private final int contentCount;
+        private final List<FeatureDriver> mFeatureDrivers;
+        private final int mTokenCount;
+        private final int mContentCount;
 
         private ChildCreationPayload(
                 List<FeatureDriver> featureDrivers, int tokenCount, int contentCount) {
-            this.featureDrivers = featureDrivers;
-            this.tokenCount = tokenCount;
-            this.contentCount = contentCount;
+            this.mFeatureDrivers = featureDrivers;
+            this.mTokenCount = tokenCount;
+            this.mContentCount = contentCount;
         }
     }
 
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/basicstream/internal/drivers/ZeroStateDriver.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/basicstream/internal/drivers/ZeroStateDriver.java
index 50860bd..a992b65 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/basicstream/internal/drivers/ZeroStateDriver.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/basicstream/internal/drivers/ZeroStateDriver.java
@@ -29,26 +29,26 @@
 public class ZeroStateDriver extends LeafFeatureDriver implements OnClickListener {
     private static final String TAG = "ZeroStateDriver";
 
-    private final ContentChangedListener contentChangedListener;
-    private final SpinnerLogger spinnerLogger;
+    private final ContentChangedListener mContentChangedListener;
+    private final SpinnerLogger mSpinnerLogger;
 
-    private ModelProvider modelProvider;
-    private boolean spinnerShown;
-    /*@Nullable*/ private ZeroStateViewHolder zeroStateViewHolder;
+    private ModelProvider mModelProvider;
+    private boolean mSpinnerShown;
+    /*@Nullable*/ private ZeroStateViewHolder mZeroStateViewHolder;
 
     ZeroStateDriver(BasicLoggingApi basicLoggingApi, Clock clock, ModelProvider modelProvider,
             ContentChangedListener contentChangedListener, boolean spinnerShown) {
-        this.contentChangedListener = contentChangedListener;
-        this.modelProvider = modelProvider;
-        this.spinnerLogger = createSpinnerLogger(basicLoggingApi, clock);
-        this.spinnerShown = spinnerShown;
+        this.mContentChangedListener = contentChangedListener;
+        this.mModelProvider = modelProvider;
+        this.mSpinnerLogger = createSpinnerLogger(basicLoggingApi, clock);
+        this.mSpinnerShown = spinnerShown;
     }
 
     @Override
     public void bind(FeedViewHolder viewHolder) {
         if (isBound()) {
             Logger.w(TAG, "Rebinding.");
-            if (viewHolder == zeroStateViewHolder) {
+            if (viewHolder == mZeroStateViewHolder) {
                 Logger.e(TAG, "Being rebound to the previously bound viewholder");
                 return;
             }
@@ -56,11 +56,11 @@
         }
         checkState(viewHolder instanceof ZeroStateViewHolder);
 
-        zeroStateViewHolder = (ZeroStateViewHolder) viewHolder;
-        zeroStateViewHolder.bind(this, spinnerShown);
+        mZeroStateViewHolder = (ZeroStateViewHolder) viewHolder;
+        mZeroStateViewHolder.bind(this, mSpinnerShown);
         // Only log that spinner is being shown if it has not been logged before.
-        if (spinnerShown && !spinnerLogger.isSpinnerActive()) {
-            spinnerLogger.spinnerStarted(SpinnerType.INITIAL_LOAD);
+        if (mSpinnerShown && !mSpinnerLogger.isSpinnerActive()) {
+            mSpinnerLogger.spinnerStarted(SpinnerType.INITIAL_LOAD);
         }
     }
 
@@ -71,52 +71,52 @@
 
     @Override
     public void unbind() {
-        if (zeroStateViewHolder == null) {
+        if (mZeroStateViewHolder == null) {
             return;
         }
 
-        zeroStateViewHolder.unbind();
-        zeroStateViewHolder = null;
+        mZeroStateViewHolder.unbind();
+        mZeroStateViewHolder = null;
     }
 
     @Override
     public void maybeRebind() {
-        if (zeroStateViewHolder == null) {
+        if (mZeroStateViewHolder == null) {
             return;
         }
 
         // Unbinding clears the viewHolder, so storing to rebind.
-        ZeroStateViewHolder localViewHolder = zeroStateViewHolder;
+        ZeroStateViewHolder localViewHolder = mZeroStateViewHolder;
         unbind();
         bind(localViewHolder);
     }
 
     @Override
     public void onClick(View v) {
-        if (zeroStateViewHolder == null) {
+        if (mZeroStateViewHolder == null) {
             Logger.wtf(TAG, "Calling onClick before binding.");
             return;
         }
 
-        spinnerShown = true;
-        zeroStateViewHolder.showSpinner(spinnerShown);
-        contentChangedListener.onContentChanged();
+        mSpinnerShown = true;
+        mZeroStateViewHolder.showSpinner(mSpinnerShown);
+        mContentChangedListener.onContentChanged();
         UiContext uiContext =
                 UiContext.newBuilder()
                         .setExtension(UiRefreshReason.uiRefreshReasonExtension,
                                 UiRefreshReason.newBuilder().setReason(Reason.ZERO_STATE).build())
                         .build();
-        modelProvider.triggerRefresh(RequestReason.ZERO_STATE, uiContext);
+        mModelProvider.triggerRefresh(RequestReason.ZERO_STATE, uiContext);
 
-        spinnerLogger.spinnerStarted(SpinnerType.ZERO_STATE_REFRESH);
+        mSpinnerLogger.spinnerStarted(SpinnerType.ZERO_STATE_REFRESH);
     }
 
     @Override
     public void onDestroy() {
         // If the spinner was being shown, it will only be removed when the ZeroStateDriver is
         // destroyed. So spinner should be logged then.
-        if (spinnerLogger.isSpinnerActive()) {
-            spinnerLogger.spinnerFinished();
+        if (mSpinnerLogger.isSpinnerActive()) {
+            mSpinnerLogger.spinnerFinished();
         }
     }
 
@@ -127,12 +127,12 @@
      * stream drivers would result in the zero state flashing.
      */
     void setModelProvider(ModelProvider modelProvider) {
-        this.modelProvider = modelProvider;
+        this.mModelProvider = modelProvider;
     }
 
     @VisibleForTesting
     boolean isBound() {
-        return zeroStateViewHolder != null;
+        return mZeroStateViewHolder != null;
     }
 
     @VisibleForTesting
@@ -144,6 +144,6 @@
 
     /** Returns whether the spinner is showing. */
     boolean isSpinnerShowing() {
-        return spinnerShown;
+        return mSpinnerShown;
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/basicstream/internal/drivers/testing/FakeFeatureDriver.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/basicstream/internal/drivers/testing/FakeFeatureDriver.java
index 3b507f5..67d2428 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/basicstream/internal/drivers/testing/FakeFeatureDriver.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/basicstream/internal/drivers/testing/FakeFeatureDriver.java
@@ -11,13 +11,13 @@
 
 /** Fake for {@link FeatureDriver}. */
 public class FakeFeatureDriver implements FeatureDriver {
-    /*@Nullable*/ private final LeafFeatureDriver leafFeatureDriver;
-    private final ModelFeature modelFeature;
+    /*@Nullable*/ private final LeafFeatureDriver mLeafFeatureDriver;
+    private final ModelFeature mModelFeature;
 
     private FakeFeatureDriver(
             /*@Nullable*/ LeafFeatureDriver leafFeatureDriver, ModelFeature modelFeature) {
-        this.leafFeatureDriver = leafFeatureDriver;
-        this.modelFeature = modelFeature;
+        this.mLeafFeatureDriver = leafFeatureDriver;
+        this.mModelFeature = modelFeature;
     }
 
     @Override
@@ -26,31 +26,31 @@
     @Override
     /*@Nullable*/
     public LeafFeatureDriver getLeafFeatureDriver() {
-        return leafFeatureDriver;
+        return mLeafFeatureDriver;
     }
 
     public ModelFeature getModelFeature() {
-        return modelFeature;
+        return mModelFeature;
     }
 
     public static class Builder {
         /*@Nullable*/
-        private LeafFeatureDriver leafFeatureDriver = new FakeLeafFeatureDriver.Builder().build();
+        private LeafFeatureDriver mLeafFeatureDriver = new FakeLeafFeatureDriver.Builder().build();
 
-        private ModelFeature modelFeature = FakeModelFeature.newBuilder().build();
+        private ModelFeature mModelFeature = FakeModelFeature.newBuilder().build();
 
         public Builder setLeafFeatureDriver(/*@Nullable*/ LeafFeatureDriver contentModel) {
-            this.leafFeatureDriver = contentModel;
+            this.mLeafFeatureDriver = contentModel;
             return this;
         }
 
         public Builder setModelFeature(ModelFeature modelFeature) {
-            this.modelFeature = modelFeature;
+            this.mModelFeature = modelFeature;
             return this;
         }
 
         public FakeFeatureDriver build() {
-            return new FakeFeatureDriver(leafFeatureDriver, modelFeature);
+            return new FakeFeatureDriver(mLeafFeatureDriver, mModelFeature);
         }
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/basicstream/internal/drivers/testing/FakeLeafFeatureDriver.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/basicstream/internal/drivers/testing/FakeLeafFeatureDriver.java
index 827df5f..a70b8c5 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/basicstream/internal/drivers/testing/FakeLeafFeatureDriver.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/basicstream/internal/drivers/testing/FakeLeafFeatureDriver.java
@@ -10,10 +10,10 @@
 
 /** Fake for {@link LeafFeatureDriver}. */
 public class FakeLeafFeatureDriver extends LeafFeatureDriver {
-    private final int itemViewType;
+    private final int mItemViewType;
 
     private FakeLeafFeatureDriver(int itemViewType) {
-        this.itemViewType = itemViewType;
+        this.mItemViewType = itemViewType;
     }
 
     @Override
@@ -28,7 +28,7 @@
     @Override
     @ViewHolderType
     public int getItemViewType() {
-        return itemViewType;
+        return mItemViewType;
     }
 
     @Override
@@ -46,15 +46,15 @@
 
     public static class Builder {
         @ViewHolderType
-        private int itemViewType = ViewHolderType.TYPE_CARD;
+        private int mItemViewType = ViewHolderType.TYPE_CARD;
 
         public Builder setItemViewType(@ViewHolderType int viewType) {
-            itemViewType = viewType;
+            mItemViewType = viewType;
             return this;
         }
 
         public LeafFeatureDriver build() {
-            return new FakeLeafFeatureDriver(itemViewType);
+            return new FakeLeafFeatureDriver(mItemViewType);
         }
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/basicstream/internal/scroll/BasicStreamScrollMonitor.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/basicstream/internal/scroll/BasicStreamScrollMonitor.java
index b1b307cd6..6e7ce0f 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/basicstream/internal/scroll/BasicStreamScrollMonitor.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/basicstream/internal/scroll/BasicStreamScrollMonitor.java
@@ -22,33 +22,33 @@
  */
 public class BasicStreamScrollMonitor
         extends RecyclerView.OnScrollListener implements ScrollObservable {
-    private final Set<ScrollObserver> scrollObservers;
-    private final Clock clock;
+    private final Set<ScrollObserver> mScrollObservers;
+    private final Clock mClock;
 
-    private int currentScrollState = RecyclerView.SCROLL_STATE_IDLE;
+    private int mCurrentScrollState = RecyclerView.SCROLL_STATE_IDLE;
 
     public BasicStreamScrollMonitor(Clock clock) {
-        this.clock = clock;
-        scrollObservers = Collections.newSetFromMap(new ConcurrentHashMap<>());
+        this.mClock = clock;
+        mScrollObservers = Collections.newSetFromMap(new ConcurrentHashMap<>());
     }
 
     @Override
     public void addScrollObserver(ScrollObserver scrollObserver) {
-        scrollObservers.add(scrollObserver);
+        mScrollObservers.add(scrollObserver);
     }
 
     @Override
     public void removeScrollObserver(ScrollObserver scrollObserver) {
-        scrollObservers.remove(scrollObserver);
+        mScrollObservers.remove(scrollObserver);
     }
 
     @Override
     public int getCurrentScrollState() {
-        return currentScrollState;
+        return mCurrentScrollState;
     }
 
     public int getObserverCount() {
-        return scrollObservers.size();
+        return mScrollObservers.size();
     }
 
     /**
@@ -56,16 +56,16 @@
      */
     @Override
     public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
-        currentScrollState = newState;
-        for (ScrollObserver observer : scrollObservers) {
-            observer.onScrollStateChanged(recyclerView, "", newState, clock.currentTimeMillis());
+        mCurrentScrollState = newState;
+        for (ScrollObserver observer : mScrollObservers) {
+            observer.onScrollStateChanged(recyclerView, "", newState, mClock.currentTimeMillis());
         }
     }
 
     /** Notify the monitor of a scroll event that should be dispatched to its observers. */
     @Override
     public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
-        for (ScrollObserver observer : scrollObservers) {
+        for (ScrollObserver observer : mScrollObservers) {
             observer.onScroll(recyclerView, "", dx, dy);
         }
     }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/basicstream/internal/scroll/BasicStreamScrollTracker.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/basicstream/internal/scroll/BasicStreamScrollTracker.java
index e236fff0..fa4ab8a0 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/basicstream/internal/scroll/BasicStreamScrollTracker.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/basicstream/internal/scroll/BasicStreamScrollTracker.java
@@ -16,28 +16,28 @@
 
 /** A @link{ScrollTracker} used by BasicStream */
 public class BasicStreamScrollTracker extends ScrollTracker {
-    private final ScrollLogger scrollLogger;
-    private final ScrollObserver scrollObserver;
-    private final ScrollObservable scrollObservable;
+    private final ScrollLogger mScrollLogger;
+    private final ScrollObserver mScrollObserver;
+    private final ScrollObservable mScrollObservable;
 
     public BasicStreamScrollTracker(MainThreadRunner mainThreadRunner, ScrollLogger scrollLogger,
             Clock clock, ScrollObservable scrollObservable) {
         super(mainThreadRunner, clock);
-        this.scrollLogger = scrollLogger;
-        this.scrollObservable = scrollObservable;
-        this.scrollObserver = new BasicStreamScrollObserver();
-        scrollObservable.addScrollObserver(scrollObserver);
+        this.mScrollLogger = scrollLogger;
+        this.mScrollObservable = scrollObservable;
+        this.mScrollObserver = new BasicStreamScrollObserver();
+        mScrollObservable.addScrollObserver(mScrollObserver);
     }
 
     @Override
     protected void onScrollEvent(int scrollAmount, long timestamp) {
-        scrollLogger.handleScroll(ScrollType.STREAM_SCROLL, scrollAmount);
+        mScrollLogger.handleScroll(ScrollType.STREAM_SCROLL, scrollAmount);
     }
 
     @Override
     public void onUnbind() {
         super.onUnbind();
-        scrollObservable.removeScrollObserver(scrollObserver);
+        mScrollObservable.removeScrollObserver(mScrollObserver);
     }
 
     private class BasicStreamScrollObserver implements ScrollObserver {
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/basicstream/internal/scroll/ScrollRestorer.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/basicstream/internal/scroll/ScrollRestorer.java
index 8af01d0..7e7a4967 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/basicstream/internal/scroll/ScrollRestorer.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/basicstream/internal/scroll/ScrollRestorer.java
@@ -23,39 +23,39 @@
 public class ScrollRestorer {
     private static final String TAG = "ScrollRestorer";
 
-    private final Configuration configuration;
-    private final RecyclerView recyclerView;
-    private final ScrollListenerNotifier scrollListenerNotifier;
-    private final int scrollPosition;
-    private final int scrollOffset;
+    private final Configuration mConfiguration;
+    private final RecyclerView mRecyclerView;
+    private final ScrollListenerNotifier mScrollListenerNotifier;
+    private final int mScrollPosition;
+    private final int mScrollOffset;
 
-    private boolean canRestore;
+    private boolean mCanRestore;
 
     public ScrollRestorer(Configuration configuration, RecyclerView recyclerView,
             ScrollListenerNotifier scrollListenerNotifier,
             /*@Nullable*/ ScrollState scrollState) {
-        this.configuration = configuration;
-        this.recyclerView = recyclerView;
-        this.scrollListenerNotifier = scrollListenerNotifier;
+        this.mConfiguration = configuration;
+        this.mRecyclerView = recyclerView;
+        this.mScrollListenerNotifier = scrollListenerNotifier;
 
         if (scrollState != null) {
-            canRestore = true;
-            scrollPosition = scrollState.getPosition();
-            scrollOffset = scrollState.getOffset();
+            mCanRestore = true;
+            mScrollPosition = scrollState.getPosition();
+            mScrollOffset = scrollState.getOffset();
         } else {
-            this.scrollPosition = 0;
-            this.scrollOffset = 0;
+            this.mScrollPosition = 0;
+            this.mScrollOffset = 0;
         }
     }
 
     private ScrollRestorer(Configuration configuration, RecyclerView recyclerView,
             ScrollListenerNotifier scrollListenerNotifier) {
-        canRestore = false;
-        this.configuration = configuration;
-        this.recyclerView = recyclerView;
-        this.scrollListenerNotifier = scrollListenerNotifier;
-        scrollPosition = 0;
-        scrollOffset = 0;
+        mCanRestore = false;
+        this.mConfiguration = configuration;
+        this.mRecyclerView = recyclerView;
+        this.mScrollListenerNotifier = scrollListenerNotifier;
+        mScrollPosition = 0;
+        mScrollOffset = 0;
     }
 
     /**
@@ -73,7 +73,7 @@
      * if the restoring session is no longer valid.
      */
     public void abandonRestoringScroll() {
-        canRestore = false;
+        mCanRestore = false;
     }
 
     /**
@@ -81,13 +81,13 @@
      * restored, then this method will no-op.
      */
     public void maybeRestoreScroll() {
-        if (!canRestore) {
+        if (!mCanRestore) {
             return;
         }
         Logger.d(TAG, "Restoring scroll");
-        getLayoutManager().scrollToPositionWithOffset(scrollPosition, scrollOffset);
-        scrollListenerNotifier.onProgrammaticScroll(recyclerView);
-        canRestore = false;
+        getLayoutManager().scrollToPositionWithOffset(mScrollPosition, mScrollOffset);
+        mScrollListenerNotifier.onProgrammaticScroll(mRecyclerView);
+        mCanRestore = false;
     }
 
     /**
@@ -98,12 +98,12 @@
     /*@Nullable*/
     public ScrollState getScrollStateForScrollRestore(int currentHeaderCount) {
         return ScrollRestoreHelper.getScrollStateForScrollRestore(
-                getLayoutManager(), configuration, currentHeaderCount);
+                getLayoutManager(), mConfiguration, currentHeaderCount);
     }
 
     private LinearLayoutManager getLayoutManager() {
-        checkState(recyclerView.getLayoutManager() instanceof LinearLayoutManager,
+        checkState(mRecyclerView.getLayoutManager() instanceof LinearLayoutManager,
                 "Scroll state can only be restored when using a LinearLayoutManager.");
-        return checkNotNull((LinearLayoutManager) recyclerView.getLayoutManager());
+        return checkNotNull((LinearLayoutManager) mRecyclerView.getLayoutManager());
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/basicstream/internal/viewholders/ContinuationViewHolder.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/basicstream/internal/viewholders/ContinuationViewHolder.java
index 8493c251..fb92e65 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/basicstream/internal/viewholders/ContinuationViewHolder.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/basicstream/internal/viewholders/ContinuationViewHolder.java
@@ -24,22 +24,22 @@
 
 /** {@link android.support.v7.widget.RecyclerView.ViewHolder} for the more button. */
 public class ContinuationViewHolder extends FeedViewHolder {
-    private final View actionButton;
-    private final View spinner;
-    private final VisibilityMonitor visibilityMonitor;
-    private final CardConfiguration cardConfiguration;
-    private final Context context;
+    private final View mActionButton;
+    private final View mSpinner;
+    private final VisibilityMonitor mVisibilityMonitor;
+    private final CardConfiguration mCardConfiguration;
+    private final Context mContext;
 
     public ContinuationViewHolder(Configuration configuration, Context context,
             FrameLayout frameLayout, CardConfiguration cardConfiguration) {
         super(frameLayout);
         View containerView =
                 LayoutInflater.from(context).inflate(R.layout.feed_more_button, frameLayout);
-        actionButton = checkNotNull(frameLayout.findViewById(R.id.action_button));
-        spinner = checkNotNull(frameLayout.findViewById(R.id.loading_spinner));
-        visibilityMonitor = createVisibilityMonitor(containerView, configuration);
-        this.cardConfiguration = cardConfiguration;
-        this.context = context;
+        mActionButton = checkNotNull(frameLayout.findViewById(R.id.action_button));
+        mSpinner = checkNotNull(frameLayout.findViewById(R.id.loading_spinner));
+        mVisibilityMonitor = createVisibilityMonitor(containerView, configuration);
+        this.mCardConfiguration = cardConfiguration;
+        this.mContext = context;
     }
 
     public void bind(
@@ -53,27 +53,27 @@
             itemView.setLayoutParams(layoutParams);
         }
         LayoutUtils.setMarginsRelative((MarginLayoutParams) layoutParams,
-                cardConfiguration.getCardStartMargin(),
-                (int) context.getResources().getDimension(
+                mCardConfiguration.getCardStartMargin(),
+                (int) mContext.getResources().getDimension(
                         R.dimen.feed_more_button_container_top_margins),
-                cardConfiguration.getCardEndMargin(), cardConfiguration.getCardBottomMargin());
+                mCardConfiguration.getCardEndMargin(), mCardConfiguration.getCardBottomMargin());
 
-        actionButton.setOnClickListener(v -> {
+        mActionButton.setOnClickListener(v -> {
             onClickListener.onClick(v);
             loggingListener.onContentClicked();
         });
-        visibilityMonitor.setListener(loggingListener);
+        mVisibilityMonitor.setListener(loggingListener);
         setButtonSpinnerVisibility(showSpinner);
     }
 
     @Override
     public void unbind() {
         // Clear OnClickListener to null to allow for GC.
-        actionButton.setOnClickListener(null);
-        visibilityMonitor.setListener(null);
+        mActionButton.setOnClickListener(null);
+        mVisibilityMonitor.setListener(null);
 
         // Set clickable to false as setting OnClickListener to null sets clickable to true.
-        actionButton.setClickable(false);
+        mActionButton.setClickable(false);
     }
 
     public void setShowSpinner(boolean showSpinner) {
@@ -81,8 +81,8 @@
     }
 
     private void setButtonSpinnerVisibility(boolean showSpinner) {
-        actionButton.setVisibility(showSpinner ? View.GONE : View.VISIBLE);
-        spinner.setVisibility(showSpinner ? View.VISIBLE : View.GONE);
+        mActionButton.setVisibility(showSpinner ? View.GONE : View.VISIBLE);
+        mSpinner.setVisibility(showSpinner ? View.VISIBLE : View.GONE);
     }
 
     @VisibleForTesting
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/basicstream/internal/viewholders/HeaderViewHolder.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/basicstream/internal/viewholders/HeaderViewHolder.java
index 3ce5f784..7fe169b8 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/basicstream/internal/viewholders/HeaderViewHolder.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/basicstream/internal/viewholders/HeaderViewHolder.java
@@ -14,21 +14,21 @@
 /** {@link FeedViewHolder} for headers. */
 public class HeaderViewHolder extends FeedViewHolder implements SwipeableViewHolder {
     private static final String TAG = "HeaderViewHolder";
-    private final FrameLayout frameLayout;
+    private final FrameLayout mFrameLayout;
 
-    /*@Nullable*/ private Header header;
-    /*@Nullable*/ private SwipeNotifier swipeNotifier;
+    /*@Nullable*/ private Header mHeader;
+    /*@Nullable*/ private SwipeNotifier mSwipeNotifier;
 
     public HeaderViewHolder(FrameLayout itemView) {
         super(itemView);
-        this.frameLayout = itemView;
+        this.mFrameLayout = itemView;
     }
 
     public void bind(Header header, SwipeNotifier swipeNotifier) {
-        this.header = header;
-        this.swipeNotifier = swipeNotifier;
+        this.mHeader = header;
+        this.mSwipeNotifier = swipeNotifier;
         ViewParent parent = header.getView().getParent();
-        if (parent == frameLayout) {
+        if (parent == mFrameLayout) {
             return;
         }
         // If header was bound to another HeaderViewHolder but not unbound properly, remove it from
@@ -36,36 +36,36 @@
         if (parent != null) {
             ((ViewGroup) parent).removeView(header.getView());
         }
-        frameLayout.addView(header.getView());
+        mFrameLayout.addView(header.getView());
     }
 
     @Override
     public void unbind() {
-        frameLayout.removeAllViews();
-        this.header = null;
-        this.swipeNotifier = null;
+        mFrameLayout.removeAllViews();
+        this.mHeader = null;
+        this.mSwipeNotifier = null;
     }
 
     @Override
     public boolean canSwipe() {
-        if (header == null) {
+        if (mHeader == null) {
             Logger.w(TAG, "canSwipe should not be called before viewholder is bound.");
 
             // Instead of crashing if viewholder is not bound, disable swiping behavior.
             return false;
         }
-        return header.isDismissible();
+        return mHeader.isDismissible();
     }
 
     @Override
     public void onSwiped() {
-        if (swipeNotifier == null) {
+        if (mSwipeNotifier == null) {
             Logger.w(TAG, "onSwiped should not be called before viewholder is bound.");
 
             // Instead of crashing if viewholder is not bound, disable swiping behavior.
             return;
         }
 
-        swipeNotifier.onSwiped();
+        mSwipeNotifier.onSwiped();
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/basicstream/internal/viewholders/NoContentViewHolder.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/basicstream/internal/viewholders/NoContentViewHolder.java
index 4eb3ec8..bfb5320 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/basicstream/internal/viewholders/NoContentViewHolder.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/basicstream/internal/viewholders/NoContentViewHolder.java
@@ -17,14 +17,14 @@
 
 /** {@link android.support.v7.widget.RecyclerView.ViewHolder} for no content card. */
 public class NoContentViewHolder extends FeedViewHolder {
-    private final CardConfiguration cardConfiguration;
-    private final View view;
+    private final CardConfiguration mCardConfiguration;
+    private final View mView;
 
     public NoContentViewHolder(
             CardConfiguration cardConfiguration, Context context, FrameLayout frameLayout) {
         super(frameLayout);
-        this.cardConfiguration = cardConfiguration;
-        view = LayoutInflater.from(context).inflate(R.layout.no_content, frameLayout);
+        this.mCardConfiguration = cardConfiguration;
+        mView = LayoutInflater.from(context).inflate(R.layout.no_content, frameLayout);
     }
 
     public void bind() {
@@ -37,10 +37,10 @@
             itemView.setLayoutParams(layoutParams);
         }
         LayoutUtils.setMarginsRelative((MarginLayoutParams) layoutParams,
-                cardConfiguration.getCardStartMargin(), 0, cardConfiguration.getCardEndMargin(),
-                cardConfiguration.getCardBottomMargin());
+                mCardConfiguration.getCardStartMargin(), 0, mCardConfiguration.getCardEndMargin(),
+                mCardConfiguration.getCardBottomMargin());
 
-        view.setBackground(cardConfiguration.getCardBackground());
+        mView.setBackground(mCardConfiguration.getCardBackground());
     }
 
     @Override
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/basicstream/internal/viewholders/PietViewHolder.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/basicstream/internal/viewholders/PietViewHolder.java
index 62e78fc..8923306 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/basicstream/internal/viewholders/PietViewHolder.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/basicstream/internal/viewholders/PietViewHolder.java
@@ -43,32 +43,32 @@
  */
 public class PietViewHolder extends FeedViewHolder implements SwipeableViewHolder {
     private static final String TAG = "PietViewHolder";
-    private final CardConfiguration cardConfiguration;
-    private final FrameLayout cardView;
-    private final ScrollObservable scrollObservable;
-    private final FrameAdapter frameAdapter;
-    private final VisibilityMonitor visibilityMonitor;
-    private final View viewport;
-    private boolean bound;
+    private final CardConfiguration mCardConfiguration;
+    private final FrameLayout mCardView;
+    private final ScrollObservable mScrollObservable;
+    private final FrameAdapter mFrameAdapter;
+    private final VisibilityMonitor mVisibilityMonitor;
+    private final View mViewport;
+    private boolean mBound;
 
-    /*@Nullable*/ private ActionParser actionParser;
-    /*@Nullable*/ private LoggingListener loggingListener;
-    /*@Nullable*/ private StreamActionApi streamActionApi;
-    /*@Nullable*/ private FeedActionPayload swipeAction;
-    /*@Nullable*/ private PietViewActionScrollObserver scrollObserver;
+    /*@Nullable*/ private ActionParser mActionParser;
+    /*@Nullable*/ private LoggingListener mLoggingListener;
+    /*@Nullable*/ private StreamActionApi mStreamActionApi;
+    /*@Nullable*/ private FeedActionPayload mSwipeAction;
+    /*@Nullable*/ private PietViewActionScrollObserver mScrollobserver;
 
     public PietViewHolder(CardConfiguration cardConfiguration, FrameLayout cardView,
             PietManager pietManager, ScrollObservable scrollObservable, View viewport,
             Context context, Configuration configuration, PietEventLogger eventLogger) {
         super(cardView);
-        this.cardConfiguration = cardConfiguration;
-        this.cardView = cardView;
-        this.scrollObservable = scrollObservable;
-        this.viewport = viewport;
+        this.mCardConfiguration = cardConfiguration;
+        this.mCardView = cardView;
+        this.mScrollObservable = scrollObservable;
+        this.mViewport = viewport;
         cardView.setId(R.id.feed_content_card);
-        this.frameAdapter = pietManager.createPietFrameAdapter(
+        this.mFrameAdapter = pietManager.createPietFrameAdapter(
                 () -> cardView, (action, actionType, frame, view, logData) -> {
-                    if (actionParser == null) {
+                    if (mActionParser == null) {
                         Logger.wtf(TAG, "Action being performed while unbound.");
                         return;
                     }
@@ -79,90 +79,90 @@
                     getActionParser().parseAction(action, getStreamActionApi(), view, logData,
                             ActionSourceConverter.convertPietAction(actionType));
                 }, eventLogger::logEvents, context);
-        visibilityMonitor = createVisibilityMonitor(cardView, configuration);
-        cardView.addView(frameAdapter.getFrameContainer());
+        mVisibilityMonitor = createVisibilityMonitor(cardView, configuration);
+        cardView.addView(mFrameAdapter.getFrameContainer());
     }
 
     public void bind(Frame frame, List<PietSharedState> pietSharedStates,
             StreamActionApi streamActionApi, FeedActionPayload swipeAction,
             LoggingListener loggingListener, ActionParser actionParser) {
-        if (bound) {
+        if (mBound) {
             return;
         }
-        visibilityMonitor.setListener(loggingListener);
-        this.loggingListener = loggingListener;
-        this.streamActionApi = streamActionApi;
-        this.swipeAction = swipeAction;
-        this.actionParser = actionParser;
-        scrollObserver = new PietViewActionScrollObserver(
-                frameAdapter, viewport, scrollObservable, loggingListener);
+        mVisibilityMonitor.setListener(loggingListener);
+        this.mLoggingListener = loggingListener;
+        this.mStreamActionApi = streamActionApi;
+        this.mSwipeAction = swipeAction;
+        this.mActionParser = actionParser;
+        mScrollobserver = new PietViewActionScrollObserver(
+                mFrameAdapter, mViewport, mScrollObservable, loggingListener);
         // Need to reset padding here.  Setting a background can affect padding so if we switch from
         // a background which has padding to one that does not, then the padding needs to be
         // removed.
-        cardView.setPadding(0, 0, 0, 0);
+        mCardView.setPadding(0, 0, 0, 0);
 
-        cardView.setBackground(cardConfiguration.getCardBackground());
+        mCardView.setBackground(mCardConfiguration.getCardBackground());
 
-        ViewGroup.LayoutParams layoutParams = cardView.getLayoutParams();
+        ViewGroup.LayoutParams layoutParams = mCardView.getLayoutParams();
         if (layoutParams == null) {
             layoutParams = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
-            cardView.setLayoutParams(layoutParams);
+            mCardView.setLayoutParams(layoutParams);
         } else if (!(layoutParams instanceof MarginLayoutParams)) {
             layoutParams = new LayoutParams(layoutParams);
-            cardView.setLayoutParams(layoutParams);
+            mCardView.setLayoutParams(layoutParams);
         }
         LayoutUtils.setMarginsRelative((MarginLayoutParams) layoutParams,
-                cardConfiguration.getCardStartMargin(), 0, cardConfiguration.getCardEndMargin(),
-                cardConfiguration.getCardBottomMargin());
+                mCardConfiguration.getCardStartMargin(), 0, mCardConfiguration.getCardEndMargin(),
+                mCardConfiguration.getCardBottomMargin());
 
-        frameAdapter.bindModel(frame,
+        mFrameAdapter.bindModel(frame,
                 0, // TODO: set the frame width here
                 null, pietSharedStates);
-        if (scrollObserver != null) {
-            scrollObservable.addScrollObserver(scrollObserver);
+        if (mScrollobserver != null) {
+            mScrollObservable.addScrollObserver(mScrollobserver);
         }
 
-        bound = true;
+        mBound = true;
     }
 
     @Override
     public void unbind() {
-        if (!bound) {
+        if (!mBound) {
             return;
         }
 
-        frameAdapter.unbindModel();
-        actionParser = null;
-        loggingListener = null;
-        streamActionApi = null;
-        swipeAction = null;
-        visibilityMonitor.setListener(null);
-        if (scrollObserver != null) {
-            scrollObservable.removeScrollObserver(scrollObserver);
-            scrollObserver.uninstallFirstDrawTrigger();
+        mFrameAdapter.unbindModel();
+        mActionParser = null;
+        mLoggingListener = null;
+        mStreamActionApi = null;
+        mSwipeAction = null;
+        mVisibilityMonitor.setListener(null);
+        if (mScrollobserver != null) {
+            mScrollObservable.removeScrollObserver(mScrollobserver);
+            mScrollobserver.uninstallFirstDrawTrigger();
         }
-        bound = false;
+        mBound = false;
     }
 
     @Override
     public boolean canSwipe() {
-        return swipeAction != null && !swipeAction.equals(FeedActionPayload.getDefaultInstance());
+        return mSwipeAction != null && !mSwipeAction.equals(FeedActionPayload.getDefaultInstance());
     }
 
     @Override
     public void onSwiped() {
-        if (swipeAction == null || actionParser == null) {
+        if (mSwipeAction == null || mActionParser == null) {
             Logger.wtf(TAG, "Swipe performed on unbound ViewHolder.");
             return;
         }
-        actionParser.parseFeedActionPayload(
-                swipeAction, getStreamActionApi(), itemView, ActionSource.SWIPE);
+        mActionParser.parseFeedActionPayload(
+                mSwipeAction, getStreamActionApi(), itemView, ActionSource.SWIPE);
 
-        if (loggingListener == null) {
+        if (mLoggingListener == null) {
             Logger.wtf(TAG, "Logging listener is null. Swipe perfomred on unbound ViewHolder.");
             return;
         }
-        loggingListener.onContentSwiped();
+        mLoggingListener.onContentSwiped();
     }
 
     @VisibleForTesting
@@ -172,34 +172,34 @@
     }
 
     private LoggingListener getLoggingListener(/*@UnknownInitialization*/ PietViewHolder this) {
-        return checkNotNull(loggingListener,
+        return checkNotNull(mLoggingListener,
                 "Logging listener can only be retrieved once view holder has been bound.");
     }
 
     private StreamActionApi getStreamActionApi(/*@UnknownInitialization*/ PietViewHolder this) {
-        return checkNotNull(streamActionApi,
+        return checkNotNull(mStreamActionApi,
                 "Stream action api can only be retrieved once view holder has been bound.");
     }
 
     private ActionParser getActionParser(/*@UnknownInitialization*/ PietViewHolder this) {
-        return checkNotNull(actionParser,
+        return checkNotNull(mActionParser,
                 "Action parser can only be retrieved once view holder has been bound");
     }
 
     static class PietViewActionScrollObserver extends PietScrollObserver {
-        private final LoggingListener loggingListener;
+        private final LoggingListener mLoggingListener;
 
         PietViewActionScrollObserver(FrameAdapter frameAdapter, View viewport,
                 ScrollObservable scrollObservable, LoggingListener loggingListener) {
             super(frameAdapter, viewport, scrollObservable);
-            this.loggingListener = loggingListener;
+            this.mLoggingListener = loggingListener;
         }
 
         @Override
         public void onScrollStateChanged(
                 View view, String featureId, int newState, long timestamp) {
             super.onScrollStateChanged(view, featureId, newState, timestamp);
-            loggingListener.onScrollStateChanged(
+            mLoggingListener.onScrollStateChanged(
                     ScrollListenerNotifier.convertRecyclerViewScrollStateToListenerState(newState));
         }
     }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/basicstream/internal/viewholders/ZeroStateViewHolder.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/basicstream/internal/viewholders/ZeroStateViewHolder.java
index 6175d90..608af7f8 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/basicstream/internal/viewholders/ZeroStateViewHolder.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/basicstream/internal/viewholders/ZeroStateViewHolder.java
@@ -18,42 +18,42 @@
 
 /** {@link android.support.v7.widget.RecyclerView.ViewHolder} for zero state. */
 public class ZeroStateViewHolder extends FeedViewHolder {
-    private final View zeroStateView;
-    private final View loadingSpinner;
-    private final View actionButton;
-    private final CardConfiguration cardConfiguration;
+    private final View mZeroStateView;
+    private final View mLoadingSpinner;
+    private final View mActionButton;
+    private final CardConfiguration mCardConfiguration;
 
     public ZeroStateViewHolder(
             Context context, FrameLayout frameLayout, CardConfiguration cardConfiguration) {
         super(frameLayout);
         View view = LayoutInflater.from(context).inflate(R.layout.zero_state, frameLayout);
 
-        loadingSpinner = view.findViewById(R.id.loading_spinner);
-        zeroStateView = view.findViewById(R.id.zero_state);
-        actionButton = view.findViewById(R.id.action_button);
-        this.cardConfiguration = cardConfiguration;
+        mLoadingSpinner = view.findViewById(R.id.loading_spinner);
+        mZeroStateView = view.findViewById(R.id.zero_state);
+        mActionButton = view.findViewById(R.id.action_button);
+        this.mCardConfiguration = cardConfiguration;
     }
 
     public void bind(OnClickListener onClickListener, boolean showSpinner) {
         View noContentView = itemView.findViewById(R.id.no_content_container);
-        setCardLayout(noContentView, cardConfiguration);
+        setCardLayout(noContentView, mCardConfiguration);
 
-        actionButton.setOnClickListener(onClickListener);
+        mActionButton.setOnClickListener(onClickListener);
         showSpinner(showSpinner);
     }
 
     @Override
     public void unbind() {
         // Clear OnClickListener to null to allow for GC.
-        actionButton.setOnClickListener(null);
+        mActionButton.setOnClickListener(null);
 
         // Set clickable to false as setting OnClickListener to null sets clickable to true.
-        actionButton.setClickable(false);
+        mActionButton.setClickable(false);
     }
 
     public void showSpinner(boolean showSpinner) {
-        loadingSpinner.setVisibility(showSpinner ? View.VISIBLE : View.GONE);
-        zeroStateView.setVisibility(showSpinner ? View.GONE : View.VISIBLE);
+        mLoadingSpinner.setVisibility(showSpinner ? View.VISIBLE : View.GONE);
+        mZeroStateView.setVisibility(showSpinner ? View.GONE : View.VISIBLE);
     }
 
     private void setCardLayout(View cardView, CardConfiguration cardConfiguration) {
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/basicstream/internal/viewloggingupdater/ResettableOneShotVisibilityLoggingListener.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/basicstream/internal/viewloggingupdater/ResettableOneShotVisibilityLoggingListener.java
index 9ebcb64..3846641 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/basicstream/internal/viewloggingupdater/ResettableOneShotVisibilityLoggingListener.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/basicstream/internal/viewloggingupdater/ResettableOneShotVisibilityLoggingListener.java
@@ -18,6 +18,6 @@
      * re-logged as visible once it is visible.
      */
     public void reset() {
-        viewLogged = false;
+        mViewLogged = false;
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/basicstream/internal/viewloggingupdater/ViewLoggingUpdater.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/basicstream/internal/viewloggingupdater/ViewLoggingUpdater.java
index 047a783..551dc01 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/basicstream/internal/viewloggingupdater/ViewLoggingUpdater.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/basicstream/internal/viewloggingupdater/ViewLoggingUpdater.java
@@ -10,7 +10,7 @@
 public class ViewLoggingUpdater extends FeedObservable<ResettableOneShotVisibilityLoggingListener> {
     /** Resets views logging state to allow them to be re-logged as visible. */
     public void resetViewTracking() {
-        for (ResettableOneShotVisibilityLoggingListener loggingListener : observers) {
+        for (ResettableOneShotVisibilityLoggingListener loggingListener : mObservers) {
             loggingListener.reset();
         }
     }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/Result.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/Result.java
index 5476fbc1..11d4a0bd 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/Result.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/Result.java
@@ -6,12 +6,12 @@
 
 /** Wrapper that allows callbacks to return a value as well as whether the call was successful. */
 public class Result<T> {
-    /*@Nullable*/ private final T value;
-    private final boolean isSuccessful;
+    /*@Nullable*/ private final T mValue;
+    private final boolean mIsSuccessful;
 
     private Result(/*@Nullable*/ T value, boolean isSuccessful) {
-        this.value = value;
-        this.isSuccessful = isSuccessful;
+        this.mValue = value;
+        this.mIsSuccessful = isSuccessful;
     }
 
     public static <T> Result<T> success(T value) {
@@ -24,14 +24,14 @@
 
     /** Retrieves the value for the result. */
     public T getValue() {
-        if (!isSuccessful) {
+        if (!mIsSuccessful) {
             throw new IllegalStateException("Cannot retrieve value for failed result");
         }
-        return Validators.checkNotNull(value);
+        return Validators.checkNotNull(mValue);
     }
 
     // TODO: replace isSuccessful with failed()
     public boolean isSuccessful() {
-        return isSuccessful;
+        return mIsSuccessful;
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/concurrent/CancelableRunnableTask.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/concurrent/CancelableRunnableTask.java
index 6d6d67d..c0354d6 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/concurrent/CancelableRunnableTask.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/concurrent/CancelableRunnableTask.java
@@ -7,27 +7,27 @@
 
 /** A thread safe runnable that can be canceled. */
 public class CancelableRunnableTask implements CancelableTask, Runnable {
-    private final AtomicBoolean canceled = new AtomicBoolean(false);
-    private final Runnable runnable;
+    private final AtomicBoolean mCanceled = new AtomicBoolean(false);
+    private final Runnable mRunnable;
 
     public CancelableRunnableTask(Runnable runnable) {
-        this.runnable = runnable;
+        this.mRunnable = runnable;
     }
 
     @Override
     public void run() {
-        if (!canceled.get()) {
-            runnable.run();
+        if (!mCanceled.get()) {
+            mRunnable.run();
         }
     }
 
     @Override
     public boolean canceled() {
-        return canceled.get();
+        return mCanceled.get();
     }
 
     @Override
     public void cancel() {
-        canceled.set(true);
+        mCanceled.set(true);
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/concurrent/MainThreadCaller.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/concurrent/MainThreadCaller.java
index f87ab6b..fee7474 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/concurrent/MainThreadCaller.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/concurrent/MainThreadCaller.java
@@ -12,10 +12,10 @@
 /** Abstract class which support calling Host methods on the {@link MainThreadRunner}. */
 public abstract class MainThreadCaller {
     private static final String TAG = "MainThreadCaller";
-    private final MainThreadRunner mainThreadRunner;
+    private final MainThreadRunner mMainThreadRunner;
 
     protected MainThreadCaller(MainThreadRunner mainThreadRunner) {
-        this.mainThreadRunner = mainThreadRunner;
+        this.mMainThreadRunner = mainThreadRunner;
     }
 
     /** Execute a task with a {@link Consumer}. */
@@ -26,7 +26,8 @@
      */
     protected <T> T mainThreadCaller(String location, ConsumerTask<T> task, T failure) {
         SimpleSettableFuture<T> sharedStatesFuture = new SimpleSettableFuture<>();
-        mainThreadRunner.execute(TAG + " " + location, () -> task.execute(sharedStatesFuture::put));
+        mMainThreadRunner.execute(
+                TAG + " " + location, () -> task.execute(sharedStatesFuture::put));
         try {
             return sharedStatesFuture.get();
         } catch (InterruptedException | ExecutionException e) {
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/concurrent/MainThreadRunner.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/concurrent/MainThreadRunner.java
index fe63ead..4005099 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/concurrent/MainThreadRunner.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/concurrent/MainThreadRunner.java
@@ -16,25 +16,25 @@
  * instead")*/
 public class MainThreadRunner {
     private static final String TAG = "MainThreadRunner";
-    private static final Handler handler = new Handler(Looper.getMainLooper());
+    private static final Handler sHandler = new Handler(Looper.getMainLooper());
 
-    private final Executor executor;
+    private final Executor mExecutor;
 
     public MainThreadRunner() {
-        this.executor = handler::post;
+        this.mExecutor = sHandler::post;
     }
 
     /** Executes the {@code runnable} on the {@link Executor} used to initialize this class. */
     public void execute(String name, Runnable runnable) {
         Logger.i(TAG, "Running task [%s] on the Main Thread", name);
-        executor.execute(runnable);
+        mExecutor.execute(runnable);
     }
 
     public CancelableTask executeWithDelay(String name, Runnable runnable, long delayMs) {
         CancelableRunnableTask cancelable = new CancelableRunnableTask(runnable);
         Logger.i(TAG, "Running task [%s] on the Main Thread with a delay of %d milliseconds", name,
                 delayMs);
-        handler.postDelayed(cancelable, delayMs);
+        sHandler.postDelayed(cancelable, delayMs);
         return cancelable;
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/concurrent/SimpleSettableFuture.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/concurrent/SimpleSettableFuture.java
index aa2f4193..fdd792a 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/concurrent/SimpleSettableFuture.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/concurrent/SimpleSettableFuture.java
@@ -15,10 +15,10 @@
 
 /** Simple future that allows for setting a value from another thread */
 public final class SimpleSettableFuture<V> implements Future<V> {
-    private final CountDownLatch latch = new CountDownLatch(1);
-    private boolean cancelled;
-    /*@Nullable*/ private V value;
-    /*@Nullable*/ private Exception exception;
+    private final CountDownLatch mLatch = new CountDownLatch(1);
+    private boolean mCancelled;
+    /*@Nullable*/ private V mValue;
+    /*@Nullable*/ private Exception mException;
 
     /** Note that this will not interrupt tasks as tasks aren't running within the future */
     @Override
@@ -34,60 +34,60 @@
         }
 
         // Count down latch (to free the future up)
-        latch.countDown();
-        cancelled = true;
+        mLatch.countDown();
+        mCancelled = true;
         return true;
     }
 
     @Override
     public boolean isCancelled() {
-        return cancelled;
+        return mCancelled;
     }
 
     @Override
     public boolean isDone() {
-        return latch.getCount() == 0;
+        return mLatch.getCount() == 0;
     }
 
     @Override
     public V get() throws InterruptedException, ExecutionException {
-        latch.await();
+        mLatch.await();
         if (isCancelled()) {
             throw new ExecutionException(new CancellationException());
         }
-        if (exception != null) {
-            throw new ExecutionException(exception);
+        if (mException != null) {
+            throw new ExecutionException(mException);
         }
-        return Validators.checkNotNull(value, "Unable to return null from a Future.get()");
+        return Validators.checkNotNull(mValue, "Unable to return null from a Future.get()");
     }
 
     @Override
     public V get(long timeout, TimeUnit unit)
             throws InterruptedException, ExecutionException, TimeoutException {
-        boolean timedOut = !latch.await(timeout, unit);
+        boolean timedOut = !mLatch.await(timeout, unit);
         if (timedOut) {
             throw new TimeoutException();
         }
         if (isCancelled()) {
             throw new ExecutionException(new CancellationException());
         }
-        if (exception != null) {
-            throw new ExecutionException(exception);
+        if (mException != null) {
+            throw new ExecutionException(mException);
         }
-        return Validators.checkNotNull(value, "Unable to return null from a Future.get()");
+        return Validators.checkNotNull(mValue, "Unable to return null from a Future.get()");
     }
 
     public void put(V value) {
         if (!isDone()) {
-            this.value = value;
-            latch.countDown();
+            this.mValue = value;
+            mLatch.countDown();
         }
     }
 
     public void putException(Exception e) {
         if (!isDone()) {
-            this.exception = e;
-            latch.countDown();
+            this.mException = e;
+            mLatch.countDown();
         }
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/concurrent/TaskQueue.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/concurrent/TaskQueue.java
index 8a096ab..17a7af79 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/concurrent/TaskQueue.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/concurrent/TaskQueue.java
@@ -89,22 +89,22 @@
         int BACKGROUND = 5;
     }
 
-    private final Object lock = new Object();
+    private final Object mLock = new Object();
 
     @GuardedBy("lock")
-    private final Queue<TaskWrapper> immediateTasks = new ArrayDeque<>();
+    private final Queue<TaskWrapper> mImmediateTasks = new ArrayDeque<>();
 
     @GuardedBy("lock")
-    private final Queue<TaskWrapper> userTasks = new ArrayDeque<>();
+    private final Queue<TaskWrapper> mUserTasks = new ArrayDeque<>();
 
     @GuardedBy("lock")
-    private final Queue<TaskWrapper> backgroundTasks = new ArrayDeque<>();
+    private final Queue<TaskWrapper> mBackgroundTasks = new ArrayDeque<>();
 
     @GuardedBy("lock")
-    private boolean waitingForHeadReset;
+    private boolean mWaitingForHeadReset;
 
     @GuardedBy("lock")
-    private boolean initialized;
+    private boolean mInitialized;
 
     /**
      * CancelableTask that tracks the current starvation runnable. {@liternal null} means that
@@ -112,44 +112,44 @@
      */
     @GuardedBy("lock")
     /*@Nullable*/
-    private CancelableTask starvationCheckTask;
+    private CancelableTask mStarvationCheckTask;
 
     // Tracks the current task running on the executor
-    /*@Nullable*/ private TaskWrapper currentTask;
+    /*@Nullable*/ private TaskWrapper mCurrentTask;
 
     /** Track the time the last task finished. Used for Starvation checks. */
-    private final AtomicLong lastTaskFinished = new AtomicLong();
+    private final AtomicLong mLastTaskFinished = new AtomicLong();
 
-    private final BasicLoggingApi basicLoggingApi;
-    private final Executor executor;
-    private final Clock clock;
-    private final MainThreadRunner mainThreadRunner;
+    private final BasicLoggingApi mBasicLoggingApi;
+    private final Executor mExecutor;
+    private final Clock mClock;
+    private final MainThreadRunner mMainThreadRunner;
 
     // counters used for dump
-    protected int taskCount;
-    protected int immediateRunCount;
-    protected int delayedRunCount;
-    protected int immediateTaskCount;
-    protected int headInvalidateTaskCount;
-    protected int headResetTaskCount;
-    protected int userFacingTaskCount;
-    protected int backgroundTaskCount;
-    protected int maxImmediateTasks;
-    protected int maxUserFacingTasks;
-    protected int maxBackgroundTasks;
+    protected int mTaskCount;
+    protected int mImmediateRunCount;
+    protected int mDelayedRunCount;
+    protected int mImmediateTaskCount;
+    protected int mHeadInvalidateTaskCount;
+    protected int mHeadResetTaskCount;
+    protected int mUserFacingTaskCount;
+    protected int mBackgroundTaskCount;
+    protected int mMaxImmediateTasks;
+    protected int mMaxUserFacingTasks;
+    protected int mMaxBackgroundTasks;
 
     public TaskQueue(BasicLoggingApi basicLoggingApi, Executor executor,
             MainThreadRunner mainThreadRunner, Clock clock) {
-        this.basicLoggingApi = basicLoggingApi;
-        this.executor = executor;
-        this.mainThreadRunner = mainThreadRunner;
-        this.clock = clock;
+        this.mBasicLoggingApi = basicLoggingApi;
+        this.mExecutor = executor;
+        this.mMainThreadRunner = mainThreadRunner;
+        this.mClock = clock;
     }
 
     /** Returns {@code true} if we are delaying for a request */
     public boolean isMakingRequest() {
-        synchronized (lock) {
-            return waitingForHeadReset;
+        synchronized (mLock) {
+            return mWaitingForHeadReset;
         }
     }
 
@@ -159,16 +159,16 @@
      * removed from the Queue and not run.
      */
     public void reset() {
-        synchronized (lock) {
-            waitingForHeadReset = false;
-            initialized = false;
+        synchronized (mLock) {
+            mWaitingForHeadReset = false;
+            mInitialized = false;
 
             // clear all delayed tasks
-            Logger.i(TAG, " - Reset i: %s, u: %s, b: %s", immediateTasks.size(), userTasks.size(),
-                    backgroundTasks.size());
-            immediateTasks.clear();
-            userTasks.clear();
-            backgroundTasks.clear();
+            Logger.i(TAG, " - Reset i: %s, u: %s, b: %s", mImmediateTasks.size(), mUserTasks.size(),
+                    mBackgroundTasks.size());
+            mImmediateTasks.clear();
+            mUserTasks.clear();
+            mBackgroundTasks.clear();
 
             // Since we are delaying thing, start the starvation checker
             startStarvationCheck();
@@ -178,8 +178,8 @@
     /** this is called post reset to clear the initialized flag. */
     public void completeReset() {
         Logger.i(TAG, "completeReset");
-        synchronized (lock) {
-            initialized = true;
+        synchronized (mLock) {
+            mInitialized = true;
         }
 
         maybeCancelStarvationCheck();
@@ -190,14 +190,14 @@
      * other tasks are delayed until initialization finishes.
      */
     public void initialize(Runnable runnable) {
-        synchronized (lock) {
-            if (initialized) {
+        synchronized (mLock) {
+            if (mInitialized) {
                 Logger.w(TAG, " - Calling initialize on an initialized TaskQueue");
             }
         }
 
         TaskWrapper task = new InitializationTaskWrapper(runnable);
-        countTask(task.taskType);
+        countTask(task.mTaskType);
         task.runTask();
     }
 
@@ -222,27 +222,27 @@
     }
 
     private void startStarvationCheck() {
-        synchronized (lock) {
-            if (starvationCheckTask != null) {
+        synchronized (mLock) {
+            if (mStarvationCheckTask != null) {
                 Logger.i(TAG, "Starvation Checks are already running");
                 return;
             }
 
             if (isDelayed()) {
                 Logger.i(TAG, " * Starting starvation checks");
-                starvationCheckTask = mainThreadRunner.executeWithDelay(
+                mStarvationCheckTask = mMainThreadRunner.executeWithDelay(
                         "starvationChecks", new StarvationChecker(), STARVATION_CHECK_MS);
             }
         }
     }
 
     private void maybeCancelStarvationCheck() {
-        synchronized (lock) {
-            CancelableTask localTask = starvationCheckTask;
+        synchronized (mLock) {
+            CancelableTask localTask = mStarvationCheckTask;
             if (!isDelayed() && localTask != null) {
                 Logger.i(TAG, "Cancelling starvation checks");
                 localTask.cancel();
-                starvationCheckTask = null;
+                mStarvationCheckTask = null;
             }
         }
     }
@@ -255,31 +255,31 @@
             if (!isDelayed() && !hasBacklog()) {
                 // Quick out, we are not delaying things, this stops starvation checking
                 Logger.i(TAG, " * Starvation checks being turned off");
-                synchronized (lock) {
-                    starvationCheckTask = null;
+                synchronized (mLock) {
+                    mStarvationCheckTask = null;
                 }
                 return;
             }
-            long lastTask = lastTaskFinished.get();
+            long lastTask = mLastTaskFinished.get();
             Logger.i(TAG, " * Starvation Check, last task %s",
                     StringFormattingUtils.formatLogDate(lastTask));
-            if (clock.currentTimeMillis() >= lastTask + STARVATION_TIMEOUT_MS) {
+            if (mClock.currentTimeMillis() >= lastTask + STARVATION_TIMEOUT_MS) {
                 Logger.e(TAG, " - Starvation check failed, stopping the delay and running tasks");
-                basicLoggingApi.onInternalError(InternalFeedError.TASK_QUEUE_STARVATION);
+                mBasicLoggingApi.onInternalError(InternalFeedError.TASK_QUEUE_STARVATION);
                 // Reset the delay since things aren't being run
-                synchronized (lock) {
-                    if (waitingForHeadReset) {
-                        waitingForHeadReset = false;
+                synchronized (mLock) {
+                    if (mWaitingForHeadReset) {
+                        mWaitingForHeadReset = false;
                     }
-                    if (!initialized) {
-                        initialized = true;
+                    if (!mInitialized) {
+                        mInitialized = true;
                     }
-                    starvationCheckTask = null;
+                    mStarvationCheckTask = null;
                 }
                 executeNextTask();
             } else {
-                synchronized (lock) {
-                    starvationCheckTask = mainThreadRunner.executeWithDelay(
+                synchronized (mLock) {
+                    mStarvationCheckTask = mMainThreadRunner.executeWithDelay(
                             "StarvationChecks", this, STARVATION_CHECK_MS);
                 }
             }
@@ -288,10 +288,10 @@
 
     private void scheduleTask(TaskWrapper taskWrapper, @TaskType int taskType) {
         if (isDelayed() || hasBacklog()) {
-            delayedRunCount++;
+            mDelayedRunCount++;
             queueTask(taskWrapper, taskType);
         } else {
-            immediateRunCount++;
+            mImmediateRunCount++;
             taskWrapper.runTask();
         }
     }
@@ -307,35 +307,35 @@
     }
 
     private void queueTask(TaskWrapper taskWrapper, @TaskType int taskType) {
-        synchronized (lock) {
+        synchronized (mLock) {
             if (taskType == TaskType.HEAD_INVALIDATE || taskType == TaskType.HEAD_RESET
                     || taskType == TaskType.IMMEDIATE) {
                 if (taskType == TaskType.HEAD_INVALIDATE && haveHeadInvalidate()) {
                     Logger.w(TAG, " - Duplicate HeadInvalidate Task Found, ignoring new one");
                     return;
                 }
-                immediateTasks.add(taskWrapper);
-                maxImmediateTasks = Math.max(immediateTasks.size(), maxImmediateTasks);
+                mImmediateTasks.add(taskWrapper);
+                mMaxImmediateTasks = Math.max(mImmediateTasks.size(), mMaxImmediateTasks);
                 // An immediate could be created in a delayed state (invalidate head), so we check
                 // to see if we need to run tasks
-                if (initialized && (currentTask == null)) {
+                if (mInitialized && (mCurrentTask == null)) {
                     Logger.i(TAG, " - queueTask starting immediate task");
                     executeNextTask();
                 }
             } else if (taskType == TaskType.USER_FACING) {
-                userTasks.add(taskWrapper);
-                maxUserFacingTasks = Math.max(userTasks.size(), maxUserFacingTasks);
+                mUserTasks.add(taskWrapper);
+                mMaxUserFacingTasks = Math.max(mUserTasks.size(), mMaxUserFacingTasks);
             } else {
-                backgroundTasks.add(taskWrapper);
-                maxBackgroundTasks = Math.max(backgroundTasks.size(), maxBackgroundTasks);
+                mBackgroundTasks.add(taskWrapper);
+                mMaxBackgroundTasks = Math.max(mBackgroundTasks.size(), mMaxBackgroundTasks);
             }
         }
     }
 
     private boolean haveHeadInvalidate() {
-        synchronized (lock) {
-            for (TaskWrapper taskWrapper : immediateTasks) {
-                if (taskWrapper.taskType == TaskType.HEAD_INVALIDATE) {
+        synchronized (mLock) {
+            for (TaskWrapper taskWrapper : mImmediateTasks) {
+                if (taskWrapper.mTaskType == TaskType.HEAD_INVALIDATE) {
                     return true;
                 }
             }
@@ -344,62 +344,63 @@
     }
 
     private void countTask(@TaskType int taskType) {
-        taskCount++;
+        mTaskCount++;
         if (taskType == TaskType.IMMEDIATE) {
-            immediateTaskCount++;
+            mImmediateTaskCount++;
         } else if (taskType == TaskType.HEAD_INVALIDATE) {
-            headInvalidateTaskCount++;
+            mHeadInvalidateTaskCount++;
         } else if (taskType == TaskType.HEAD_RESET) {
-            headResetTaskCount++;
+            mHeadResetTaskCount++;
         } else if (taskType == TaskType.USER_FACING) {
-            userFacingTaskCount++;
+            mUserFacingTaskCount++;
         } else if (taskType == TaskType.BACKGROUND) {
-            backgroundTaskCount++;
+            mBackgroundTaskCount++;
         }
     }
 
     /** Indicates that tasks are being delayed until a response is processed */
     public boolean isDelayed() {
-        synchronized (lock) {
-            return !initialized || waitingForHeadReset;
+        synchronized (mLock) {
+            return !mInitialized || mWaitingForHeadReset;
         }
     }
 
     /** Returns {@literal true} if no tasks are running and no tasks are enqueued. */
     public boolean isIdle() {
-        return !hasBacklog() && currentTask == null;
+        return !hasBacklog() && mCurrentTask == null;
     }
 
     /** Returns {@literal true} if there are tests enqueued to run. */
     public boolean hasBacklog() {
-        synchronized (lock) {
-            return !backgroundTasks.isEmpty() || !userTasks.isEmpty() || !immediateTasks.isEmpty();
+        synchronized (mLock) {
+            return !mBackgroundTasks.isEmpty() || !mUserTasks.isEmpty()
+                    || !mImmediateTasks.isEmpty();
         }
     }
 
     @VisibleForTesting
     boolean hasPendingStarvationCheck() {
-        synchronized (lock) {
-            return starvationCheckTask != null && !starvationCheckTask.canceled();
+        synchronized (mLock) {
+            return mStarvationCheckTask != null && !mStarvationCheckTask.canceled();
         }
     }
 
     private int backlogSize() {
-        synchronized (lock) {
-            return backgroundTasks.size() + userTasks.size() + immediateTasks.size();
+        synchronized (mLock) {
+            return mBackgroundTasks.size() + mUserTasks.size() + mImmediateTasks.size();
         }
     }
 
     private void executeNextTask() {
-        lastTaskFinished.set(clock.currentTimeMillis());
-        synchronized (lock) {
+        mLastTaskFinished.set(mClock.currentTimeMillis());
+        synchronized (mLock) {
             TaskWrapper task = null;
-            if (!immediateTasks.isEmpty()) {
-                task = immediateTasks.remove();
-            } else if (!userTasks.isEmpty() && !isDelayed()) {
-                task = userTasks.remove();
-            } else if (!backgroundTasks.isEmpty() && !isDelayed()) {
-                task = backgroundTasks.remove();
+            if (!mImmediateTasks.isEmpty()) {
+                task = mImmediateTasks.remove();
+            } else if (!mUserTasks.isEmpty() && !isDelayed()) {
+                task = mUserTasks.remove();
+            } else if (!mBackgroundTasks.isEmpty() && !isDelayed()) {
+                task = mBackgroundTasks.remove();
             }
             if (task != null) {
                 task.runTask();
@@ -413,21 +414,21 @@
      */
     private class TaskWrapper implements Runnable {
         @Task
-        protected final int task;
-        final int taskType;
-        protected final Runnable runnable;
-        private final long queueTimeMs;
+        protected final int mTask;
+        final int mTaskType;
+        protected final Runnable mRunnable;
+        private final long mQueueTimeMs;
 
         TaskWrapper(@Task int task, @TaskType int taskType, Runnable runnable) {
-            this.task = task;
-            this.taskType = taskType;
-            this.runnable = runnable;
-            this.queueTimeMs = clock.elapsedRealtime();
+            this.mTask = task;
+            this.mTaskType = taskType;
+            this.mRunnable = runnable;
+            this.mQueueTimeMs = mClock.elapsedRealtime();
         }
 
         /** This will run the task on the {@link Executor}. */
         void runTask() {
-            executor.execute(this);
+            mExecutor.execute(this);
         }
 
         /**
@@ -437,24 +438,24 @@
          */
         @Override
         public final void run() {
-            long startTimeMs = clock.elapsedRealtime();
+            long startTimeMs = mClock.elapsedRealtime();
             // TODO: Log task name instead of task number
-            Logger.i(TAG, "Execute task [%s - d: %s, b: %s]: %s", taskTypeToString(taskType),
-                    isDelayed(), backlogSize(), task);
+            Logger.i(TAG, "Execute task [%s - d: %s, b: %s]: %s", taskTypeToString(mTaskType),
+                    isDelayed(), backlogSize(), mTask);
             // maintain the currentTask on the stack encase we queue multiple tasks to the Executor
-            TaskWrapper saveTask = currentTask;
-            currentTask = this;
-            runnable.run();
+            TaskWrapper saveTask = mCurrentTask;
+            mCurrentTask = this;
+            mRunnable.run();
             postRunnableRun();
 
-            currentTask = saveTask;
+            mCurrentTask = saveTask;
 
-            int taskExecutionTime = (int) (clock.elapsedRealtime() - startTimeMs);
-            int taskDelayTime = (int) (startTimeMs - queueTimeMs);
+            int taskExecutionTime = (int) (mClock.elapsedRealtime() - startTimeMs);
+            int taskDelayTime = (int) (startTimeMs - mQueueTimeMs);
 
             // TODO: Log task name instead of task number
-            Logger.i(TAG, " - Finished %s, time %s ms", task, taskExecutionTime);
-            basicLoggingApi.onTaskFinished(task, taskDelayTime, taskExecutionTime);
+            Logger.i(TAG, " - Finished %s, time %s ms", mTask, taskExecutionTime);
+            mBasicLoggingApi.onTaskFinished(mTask, taskDelayTime, taskExecutionTime);
             executeNextTask();
         }
 
@@ -463,7 +464,7 @@
     }
 
     /**
-     * Initialization will flip the {@link #initialized} state to {@code true} when the
+     * Initialization will flip the {@link #mInitialized} state to {@code true} when the
      * initialization task completes.
      */
     private final class InitializationTaskWrapper extends TaskWrapper {
@@ -473,14 +474,14 @@
 
         @Override
         protected void postRunnableRun() {
-            synchronized (lock) {
-                initialized = true;
+            synchronized (mLock) {
+                mInitialized = true;
             }
         }
     }
 
     /**
-     * HeadReset will run a task which resets $HEAD. It clears the {@link #waitingForHeadReset}
+     * HeadReset will run a task which resets $HEAD. It clears the {@link #mWaitingForHeadReset}
      * state.
      */
     private final class HeadResetTaskWrapper extends TaskWrapper {
@@ -490,8 +491,8 @@
 
         @Override
         protected void postRunnableRun() {
-            synchronized (lock) {
-                waitingForHeadReset = false;
+            synchronized (mLock) {
+                mWaitingForHeadReset = false;
             }
             maybeCancelStarvationCheck();
         }
@@ -500,7 +501,7 @@
     /**
      * HeadInvalidate is a task which marks the current head as invalid. The TaskQueue will then be
      * delayed until {@link HeadResetTaskWrapper} has completed. This will set the {@link
-     * #waitingForHeadReset}. In addition starvation checks will be started.
+     * #mWaitingForHeadReset}. In addition starvation checks will be started.
      */
     private final class HeadInvalidateTaskWrapper extends TaskWrapper {
         HeadInvalidateTaskWrapper(@Task int task, @TaskType int taskType, Runnable runnable) {
@@ -509,8 +510,8 @@
 
         @Override
         void runTask() {
-            synchronized (lock) {
-                waitingForHeadReset = true;
+            synchronized (mLock) {
+                mWaitingForHeadReset = true;
             }
             super.runTask();
         }
@@ -526,22 +527,22 @@
      * not started before the timeout millis.
      */
     private final class TimeoutTaskWrapper extends TaskWrapper {
-        private final AtomicBoolean started = new AtomicBoolean(false);
-        private final Runnable timeoutRunnable;
-        /*@Nullable*/ private CancelableTask timeoutTask;
+        private final AtomicBoolean mStarted = new AtomicBoolean(false);
+        private final Runnable mTimeoutRunnable;
+        /*@Nullable*/ private CancelableTask mTimeoutTask;
 
         TimeoutTaskWrapper(@Task int task, @TaskType int taskType, Runnable taskRunnable,
                 Runnable timeoutRunnable) {
             super(task, taskType, taskRunnable);
-            this.timeoutRunnable = timeoutRunnable;
+            this.mTimeoutRunnable = timeoutRunnable;
         }
 
         /**
          * Start the timeout period. If we reach the timeout before the Task is run, the {@link
-         * #timeoutRunnable} will run.
+         * #mTimeoutRunnable} will run.
          */
         private TimeoutTaskWrapper startTimeout(long timeoutMillis) {
-            timeoutTask = mainThreadRunner.executeWithDelay(
+            mTimeoutTask = mMainThreadRunner.executeWithDelay(
                     "taskTimeout", this::runTimeoutCallback, timeoutMillis);
             return this;
         }
@@ -549,17 +550,17 @@
         @Override
         void runTask() {
             // If the boolean is already set then runTimeoutCallback has run.
-            if (started.getAndSet(true)) {
-                Logger.w(TAG, " - runTimeoutCallback already ran [%s]", task);
+            if (mStarted.getAndSet(true)) {
+                Logger.w(TAG, " - runTimeoutCallback already ran [%s]", mTask);
                 executeNextTask();
                 return;
             }
 
-            CancelableTask localTask = timeoutTask;
+            CancelableTask localTask = mTimeoutTask;
             if (localTask != null) {
-                Logger.i(TAG, "Cancelling timeout [%s]", task);
+                Logger.i(TAG, "Cancelling timeout [%s]", mTask);
                 localTask.cancel();
-                timeoutTask = null;
+                mTimeoutTask = null;
             }
 
             super.runTask();
@@ -567,32 +568,32 @@
 
         private void runTimeoutCallback() {
             // If the boolean is already set then runTask has run.
-            if (started.getAndSet(true)) {
-                Logger.w(TAG, " - runTask already ran [%s]", task);
+            if (mStarted.getAndSet(true)) {
+                Logger.w(TAG, " - runTask already ran [%s]", mTask);
                 return;
             }
 
-            Logger.w(TAG, "Execute Timeout [%s]: %s", taskType, task);
-            executor.execute(timeoutRunnable);
+            Logger.w(TAG, "Execute Timeout [%s]: %s", mTaskType, mTask);
+            mExecutor.execute(mTimeoutRunnable);
         }
     }
 
     @Override
     public void dump(Dumper dumper) {
         dumper.title(TAG);
-        dumper.forKey("tasks").value(taskCount);
-        dumper.forKey("immediateRun").value(immediateRunCount).compactPrevious();
-        dumper.forKey("delayedRun").value(delayedRunCount).compactPrevious();
+        dumper.forKey("tasks").value(mTaskCount);
+        dumper.forKey("immediateRun").value(mImmediateRunCount).compactPrevious();
+        dumper.forKey("delayedRun").value(mDelayedRunCount).compactPrevious();
 
-        dumper.forKey("immediateTasks").value(immediateTaskCount);
-        dumper.forKey("headInvalidateTasks").value(headInvalidateTaskCount).compactPrevious();
-        dumper.forKey("headResetTasks").value(headResetTaskCount).compactPrevious();
-        dumper.forKey("userFacingTasks").value(userFacingTaskCount).compactPrevious();
-        dumper.forKey("backgroundTasks").value(backgroundTaskCount).compactPrevious();
+        dumper.forKey("immediateTasks").value(mImmediateTaskCount);
+        dumper.forKey("headInvalidateTasks").value(mHeadInvalidateTaskCount).compactPrevious();
+        dumper.forKey("headResetTasks").value(mHeadResetTaskCount).compactPrevious();
+        dumper.forKey("userFacingTasks").value(mUserFacingTaskCount).compactPrevious();
+        dumper.forKey("backgroundTasks").value(mBackgroundTaskCount).compactPrevious();
 
-        dumper.forKey("maxImmediateQueue").value(maxImmediateTasks);
-        dumper.forKey("maxUserFacingQueue").value(maxUserFacingTasks).compactPrevious();
-        dumper.forKey("maxBackgroundQueue").value(maxBackgroundTasks).compactPrevious();
+        dumper.forKey("maxImmediateQueue").value(mMaxImmediateTasks);
+        dumper.forKey("maxUserFacingQueue").value(mMaxUserFacingTasks).compactPrevious();
+        dumper.forKey("maxBackgroundQueue").value(mMaxBackgroundTasks).compactPrevious();
     }
 
     private static String taskTypeToString(@TaskType int taskType) {
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/concurrent/testing/FakeDirectExecutor.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/concurrent/testing/FakeDirectExecutor.java
index febe9486..055120fc 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/concurrent/testing/FakeDirectExecutor.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/concurrent/testing/FakeDirectExecutor.java
@@ -11,10 +11,10 @@
 
 /** Fake {@link Executor} that enforces a background thread. */
 public final class FakeDirectExecutor implements Executor {
-    private final AtomicBoolean currentlyExecutingTasks = new AtomicBoolean();
-    private final FakeThreadUtils fakeThreadUtils;
-    private final List<Runnable> tasksToRun = new ArrayList<>();
-    private final boolean shouldQueueTasks;
+    private final AtomicBoolean mCurrentlyExecutingTasks = new AtomicBoolean();
+    private final FakeThreadUtils mFakeThreadUtils;
+    private final List<Runnable> mTasksToRun = new ArrayList<>();
+    private final boolean mShouldQueueTasks;
 
     public static FakeDirectExecutor runTasksImmediately(FakeThreadUtils fakeThreadUtils) {
         return new FakeDirectExecutor(fakeThreadUtils, /* shouldQueueTasks= */ false);
@@ -25,36 +25,36 @@
     }
 
     private FakeDirectExecutor(FakeThreadUtils fakeThreadUtils, boolean shouldQueueTasks) {
-        this.fakeThreadUtils = fakeThreadUtils;
-        this.shouldQueueTasks = shouldQueueTasks;
+        this.mFakeThreadUtils = fakeThreadUtils;
+        this.mShouldQueueTasks = shouldQueueTasks;
     }
 
     @Override
     public void execute(Runnable command) {
-        tasksToRun.add(command);
-        if (!shouldQueueTasks) {
+        mTasksToRun.add(command);
+        if (!mShouldQueueTasks) {
             runAllTasks();
         }
     }
 
     public void runAllTasks() {
-        if (currentlyExecutingTasks.getAndSet(true)) {
+        if (mCurrentlyExecutingTasks.getAndSet(true)) {
             return;
         }
 
-        boolean policy = fakeThreadUtils.enforceMainThread(false);
+        boolean policy = mFakeThreadUtils.enforceMainThread(false);
         try {
-            while (!tasksToRun.isEmpty()) {
-                Runnable task = tasksToRun.remove(0);
+            while (!mTasksToRun.isEmpty()) {
+                Runnable task = mTasksToRun.remove(0);
                 task.run();
             }
         } finally {
-            fakeThreadUtils.enforceMainThread(policy);
-            currentlyExecutingTasks.set(false);
+            mFakeThreadUtils.enforceMainThread(policy);
+            mCurrentlyExecutingTasks.set(false);
         }
     }
 
     public boolean hasTasks() {
-        return !tasksToRun.isEmpty();
+        return !mTasksToRun.isEmpty();
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/concurrent/testing/FakeMainThreadRunner.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/concurrent/testing/FakeMainThreadRunner.java
index d2c4c08..c46a714 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/concurrent/testing/FakeMainThreadRunner.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/concurrent/testing/FakeMainThreadRunner.java
@@ -22,18 +22,18 @@
  * delayed tasks. This class can optionally execute tasks immediately and enforce thread checks.
  */
 public final class FakeMainThreadRunner extends MainThreadRunner {
-    private final AtomicBoolean currentlyExecutingTasks = new AtomicBoolean();
-    private final FakeClock fakeClock;
-    private final FakeThreadUtils fakeThreadUtils;
-    private final List<Runnable> tasksToRun = new ArrayList<>();
-    private final boolean shouldQueueTasks;
+    private final AtomicBoolean mCurrentlyExecutingTasks = new AtomicBoolean();
+    private final FakeClock mFakeClock;
+    private final FakeThreadUtils mFakeThreadUtils;
+    private final List<Runnable> mTasksToRun = new ArrayList<>();
+    private final boolean mShouldQueueTasks;
 
     // Suppressing use of Comparator, which is fine because this is only used in tests.
     @SuppressWarnings("AndroidJdkLibsChecker")
-    private final PriorityQueue<TimedRunnable> delayedTasks =
+    private final PriorityQueue<TimedRunnable> mDelayedTasks =
             new PriorityQueue<>(Comparator.comparingLong(TimedRunnable::getExecutionTime));
 
-    private int completedTaskCount;
+    private int mCompletedTaskCount;
 
     public static FakeMainThreadRunner create(FakeClock fakeClock) {
         return new FakeMainThreadRunner(
@@ -57,33 +57,33 @@
 
     private FakeMainThreadRunner(
             FakeClock fakeClock, FakeThreadUtils fakeThreadUtils, boolean shouldQueueTasks) {
-        this.fakeClock = fakeClock;
-        this.fakeThreadUtils = fakeThreadUtils;
-        this.shouldQueueTasks = shouldQueueTasks;
+        this.mFakeClock = fakeClock;
+        this.mFakeThreadUtils = fakeThreadUtils;
+        this.mShouldQueueTasks = shouldQueueTasks;
         fakeClock.registerObserver(
                 (newCurrentTime, newElapsedRealtime) -> runTasksBefore(newElapsedRealtime));
     }
 
     private void runTasksBefore(long newElapsedRealtime) {
         TimedRunnable nextTask;
-        while ((nextTask = delayedTasks.peek()) != null) {
+        while ((nextTask = mDelayedTasks.peek()) != null) {
             if (nextTask.getExecutionTime() > newElapsedRealtime) {
                 break;
             }
 
-            Runnable task = checkNotNull(delayedTasks.poll());
-            tasksToRun.add(task);
+            Runnable task = checkNotNull(mDelayedTasks.poll());
+            mTasksToRun.add(task);
         }
 
-        if (!shouldQueueTasks) {
+        if (!mShouldQueueTasks) {
             runAllTasks();
         }
     }
 
     @Override
     public void execute(String name, Runnable runnable) {
-        tasksToRun.add(runnable);
-        if (!shouldQueueTasks) {
+        mTasksToRun.add(runnable);
+        if (!mShouldQueueTasks) {
             runAllTasks();
         }
     }
@@ -91,36 +91,36 @@
     @Override
     public CancelableTask executeWithDelay(String name, Runnable runnable, long delayMs) {
         CancelableRunnableTask cancelable = new CancelableRunnableTask(runnable);
-        delayedTasks.add(new TimedRunnable(cancelable, fakeClock.elapsedRealtime() + delayMs));
+        mDelayedTasks.add(new TimedRunnable(cancelable, mFakeClock.elapsedRealtime() + delayMs));
         return cancelable;
     }
 
     /** Runs all eligible tasks. */
     public void runAllTasks() {
-        if (currentlyExecutingTasks.getAndSet(true)) {
+        if (mCurrentlyExecutingTasks.getAndSet(true)) {
             return;
         }
 
-        boolean policy = fakeThreadUtils.enforceMainThread(true);
+        boolean policy = mFakeThreadUtils.enforceMainThread(true);
         try {
-            while (!tasksToRun.isEmpty()) {
-                Runnable task = tasksToRun.remove(0);
+            while (!mTasksToRun.isEmpty()) {
+                Runnable task = mTasksToRun.remove(0);
                 task.run();
-                completedTaskCount++;
+                mCompletedTaskCount++;
             }
         } finally {
-            fakeThreadUtils.enforceMainThread(policy);
-            currentlyExecutingTasks.set(false);
+            mFakeThreadUtils.enforceMainThread(policy);
+            mCurrentlyExecutingTasks.set(false);
         }
     }
 
     /** Returns {@literal true} if there are tasks to run in the future. */
     public boolean hasPendingTasks() {
-        if (!tasksToRun.isEmpty()) {
+        if (!mTasksToRun.isEmpty()) {
             return true;
         }
 
-        for (TimedRunnable runnable : delayedTasks) {
+        for (TimedRunnable runnable : mDelayedTasks) {
             if (!runnable.isCanceled()) {
                 return true;
             }
@@ -131,34 +131,34 @@
 
     /** Returns {@literal true} if there are tasks to run or tasks have run. */
     public boolean hasTasks() {
-        return !tasksToRun.isEmpty() || completedTaskCount != 0;
+        return !mTasksToRun.isEmpty() || mCompletedTaskCount != 0;
     }
 
     /** Returns the number of tasks that have run. */
     public int getCompletedTaskCount() {
-        return completedTaskCount;
+        return mCompletedTaskCount;
     }
 
     private static final class TimedRunnable implements Runnable {
-        private final CancelableRunnableTask runnable;
-        private final long executionTime;
+        private final CancelableRunnableTask mRunnable;
+        private final long mExecutionTime;
 
         private TimedRunnable(CancelableRunnableTask runnable, long executeTime) {
-            this.runnable = runnable;
-            this.executionTime = executeTime;
+            this.mRunnable = runnable;
+            this.mExecutionTime = executeTime;
         }
 
         private long getExecutionTime() {
-            return executionTime;
+            return mExecutionTime;
         }
 
         private boolean isCanceled() {
-            return runnable.canceled();
+            return mRunnable.canceled();
         }
 
         @Override
         public void run() {
-            runnable.run();
+            mRunnable.run();
         }
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/concurrent/testing/FakeTaskQueue.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/concurrent/testing/FakeTaskQueue.java
index 2e3f4026..b1c727fb 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/concurrent/testing/FakeTaskQueue.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/concurrent/testing/FakeTaskQueue.java
@@ -10,8 +10,8 @@
 
 /** A fake {@link TaskQueue} implementation. */
 public final class FakeTaskQueue extends TaskQueue {
-    private boolean resetWasCalled;
-    private boolean completeResetWasCalled;
+    private boolean mResetWasCalled;
+    private boolean mCompleteResetWasCalled;
 
     public FakeTaskQueue(FakeClock fakeClock, FakeThreadUtils fakeThreadUtils) {
         this(fakeClock, FakeDirectExecutor.runTasksImmediately(fakeThreadUtils));
@@ -25,41 +25,41 @@
     @Override
     public void reset() {
         super.reset();
-        resetWasCalled = true;
+        mResetWasCalled = true;
     }
 
     @Override
     public void completeReset() {
         super.completeReset();
-        completeResetWasCalled = true;
+        mCompleteResetWasCalled = true;
     }
 
     public void resetCounts() {
-        taskCount = 0;
-        immediateTaskCount = 0;
-        headInvalidateTaskCount = 0;
-        headResetTaskCount = 0;
-        userFacingTaskCount = 0;
-        backgroundTaskCount = 0;
+        mTaskCount = 0;
+        mImmediateTaskCount = 0;
+        mHeadInvalidateTaskCount = 0;
+        mHeadResetTaskCount = 0;
+        mUserFacingTaskCount = 0;
+        mBackgroundTaskCount = 0;
     }
 
     public int getBackgroundTaskCount() {
-        return backgroundTaskCount;
+        return mBackgroundTaskCount;
     }
 
     public int getImmediateTaskCount() {
-        return immediateTaskCount;
+        return mImmediateTaskCount;
     }
 
     public int getUserFacingTaskCount() {
-        return userFacingTaskCount;
+        return mUserFacingTaskCount;
     }
 
     public boolean resetWasCalled() {
-        return resetWasCalled;
+        return mResetWasCalled;
     }
 
     public boolean completeResetWasCalled() {
-        return completeResetWasCalled;
+        return mCompleteResetWasCalled;
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/concurrent/testing/FakeThreadUtils.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/concurrent/testing/FakeThreadUtils.java
index 4727afd..1e81f9bf 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/concurrent/testing/FakeThreadUtils.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/concurrent/testing/FakeThreadUtils.java
@@ -8,21 +8,21 @@
 
 /** Fake implements of {@link ThreadUtils} that allows callers to control the thread policy. */
 public final class FakeThreadUtils extends ThreadUtils {
-    private boolean isMainThread = true;
-    private boolean enforceThreadChecks = true;
+    private boolean mIsMainThread = true;
+    private boolean mEnforceThreadChecks = true;
 
     private FakeThreadUtils(boolean enforceThreadChecks) {
-        this.enforceThreadChecks = enforceThreadChecks;
+        this.mEnforceThreadChecks = enforceThreadChecks;
     }
 
     @Override
     public boolean isMainThread() {
-        return isMainThread;
+        return mIsMainThread;
     }
 
     @Override
     protected void check(boolean condition, String message) {
-        if (enforceThreadChecks) {
+        if (mEnforceThreadChecks) {
             super.check(condition, message);
         }
     }
@@ -32,8 +32,8 @@
      * existing thread policy.
      */
     public boolean enforceMainThread(boolean enforceMainThread) {
-        boolean result = isMainThread;
-        isMainThread = enforceMainThread;
+        boolean result = mIsMainThread;
+        mIsMainThread = enforceMainThread;
         return result;
     }
 
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/feedobservable/FeedObservable.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/feedobservable/FeedObservable.java
index 533b9e4..098e46d5 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/feedobservable/FeedObservable.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/feedobservable/FeedObservable.java
@@ -13,13 +13,13 @@
 public abstract class FeedObservable<ObserverT> implements Observable<ObserverT> {
     private static final String TAG = "FeedObservable";
 
-    protected final Set<ObserverT> observers = new HashSet<>();
+    protected final Set<ObserverT> mObservers = new HashSet<>();
 
     /** Adds given {@code observer}. No-op if the observer has already been added. */
     @Override
     public void registerObserver(ObserverT observer) {
-        synchronized (observers) {
-            if (!observers.add(observer)) {
+        synchronized (mObservers) {
+            if (!mObservers.add(observer)) {
                 Logger.w(TAG, "Registering observer: %s multiple times.", observer);
             }
         }
@@ -28,8 +28,8 @@
     /** Removes given {@code observer}. No-op if the observer is not currently added. */
     @Override
     public void unregisterObserver(ObserverT observer) {
-        synchronized (observers) {
-            if (!observers.remove(observer)) {
+        synchronized (mObservers) {
+            if (!mObservers.remove(observer)) {
                 Logger.w(TAG, "Unregistering observer: %s that isn't registered.", observer);
             }
         }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/feedobservable/ImmediatelyNotifyingObservableNotifier.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/feedobservable/ImmediatelyNotifyingObservableNotifier.java
index c4828fc..f9dfe1c 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/feedobservable/ImmediatelyNotifyingObservableNotifier.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/feedobservable/ImmediatelyNotifyingObservableNotifier.java
@@ -12,23 +12,23 @@
  */
 public final class ImmediatelyNotifyingObservableNotifier<ObserverT>
         extends FeedObservable<ObserverT> {
-    private Consumer<ObserverT> currentConsumer;
+    private Consumer<ObserverT> mCurrentConsumer;
 
     public ImmediatelyNotifyingObservableNotifier(Consumer<ObserverT> listenerMethod) {
-        currentConsumer = listenerMethod;
+        mCurrentConsumer = listenerMethod;
     }
 
     @Override
     public void registerObserver(ObserverT observerT) {
         super.registerObserver(observerT);
-        currentConsumer.accept(observerT);
+        mCurrentConsumer.accept(observerT);
     }
 
     /** Calls all the registered listeners using the given listener method. */
     public void notifyListeners(Consumer<ObserverT> listenerMethod) {
-        currentConsumer = listenerMethod;
-        synchronized (observers) {
-            for (ObserverT listener : observers) {
+        mCurrentConsumer = listenerMethod;
+        synchronized (mObservers) {
+            for (ObserverT listener : mObservers) {
                 listenerMethod.accept(listener);
             }
         }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/feedobservable/ObservableNotifier.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/feedobservable/ObservableNotifier.java
index bcd94d29..9404eac 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/feedobservable/ObservableNotifier.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/feedobservable/ObservableNotifier.java
@@ -10,8 +10,8 @@
 public class ObservableNotifier<ObserverT> extends FeedObservable<ObserverT> {
     /** Calls all the registered listeners using the given listener method. */
     public void notifyListeners(Consumer<ObserverT> listenerMethod) {
-        synchronized (observers) {
-            for (ObserverT listener : observers) {
+        synchronized (mObservers) {
+            for (ObserverT listener : mObservers) {
                 listenerMethod.accept(listener);
             }
         }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/functional/Suppliers.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/functional/Suppliers.java
index 243be6a..5d0caea 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/functional/Suppliers.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/functional/Suppliers.java
@@ -11,15 +11,15 @@
      * classes for each lambda.
      */
     private static class InstancesSupplier<T> implements Supplier<T> {
-        private final T instance;
+        private final T mInstance;
 
         InstancesSupplier(T instance) {
-            this.instance = instance;
+            this.mInstance = instance;
         }
 
         @Override
         public T get() {
-            return instance;
+            return mInstance;
         }
     }
 
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/intern/HashPoolInterner.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/intern/HashPoolInterner.java
index a6462d2d..8892f2bb 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/intern/HashPoolInterner.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/intern/HashPoolInterner.java
@@ -23,30 +23,30 @@
     }
 
     private static final class HashPool<T> implements Pool<T> {
-        private final SparseArrayCompat<WeakReference<T>> pool = new SparseArrayCompat<>();
+        private final SparseArrayCompat<WeakReference<T>> mPool = new SparseArrayCompat<>();
 
         @Override
         /*@Nullable*/
         public T get(T input) {
-            WeakReference<T> weakRef = (input != null) ? pool.get(input.hashCode()) : null;
+            WeakReference<T> weakRef = (input != null) ? mPool.get(input.hashCode()) : null;
             return weakRef != null ? weakRef.get() : null;
         }
 
         @Override
         public void put(T input) {
             if (input != null) {
-                pool.put(input.hashCode(), new WeakReference<>(input));
+                mPool.put(input.hashCode(), new WeakReference<>(input));
             }
         }
 
         @Override
         public void clear() {
-            pool.clear();
+            mPool.clear();
         }
 
         @Override
         public int size() {
-            return pool.size();
+            return mPool.size();
         }
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/intern/InternedMap.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/intern/InternedMap.java
index 385b365..f23c2d2 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/intern/InternedMap.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/intern/InternedMap.java
@@ -12,56 +12,56 @@
 
 /** Map wrapper that interns the values on put operations, using the given interner. */
 public class InternedMap<K, V> implements Map<K, V> {
-    private final Map<K, V> delegate;
-    private final Interner<V> interner;
+    private final Map<K, V> mDelegate;
+    private final Interner<V> mInterner;
 
     public InternedMap(Map<K, V> delegate, Interner<V> interner) {
-        this.delegate = Validators.checkNotNull(delegate);
-        this.interner = Validators.checkNotNull(interner);
+        this.mDelegate = Validators.checkNotNull(delegate);
+        this.mInterner = Validators.checkNotNull(interner);
     }
 
     @Override
     public int size() {
-        synchronized (delegate) {
-            return delegate.size();
+        synchronized (mDelegate) {
+            return mDelegate.size();
         }
     }
 
     @Override
     public boolean isEmpty() {
-        return delegate.isEmpty();
+        return mDelegate.isEmpty();
     }
 
     @Override
     public boolean containsKey(/*@Nullable*/ Object key) {
-        return delegate.containsKey(key);
+        return mDelegate.containsKey(key);
     }
 
     @Override
     public boolean containsValue(/*@Nullable*/ Object value) {
-        return delegate.containsValue(value);
+        return mDelegate.containsValue(value);
     }
 
     @Override
     /*@Nullable*/
     public V get(/*@Nullable*/ Object key) {
-        synchronized (delegate) {
-            return delegate.get(key);
+        synchronized (mDelegate) {
+            return mDelegate.get(key);
         }
     }
 
     @Override
     /*@Nullable*/
     public V put(K key, V value) {
-        synchronized (delegate) {
-            return delegate.put(key, interner.intern(value));
+        synchronized (mDelegate) {
+            return mDelegate.put(key, mInterner.intern(value));
         }
     }
 
     @Override
     /*@Nullable*/
     public V remove(/*@Nullable*/ Object key) {
-        return delegate.remove(key);
+        return mDelegate.remove(key);
     }
 
     @Override
@@ -75,24 +75,24 @@
 
     @Override
     public void clear() {
-        synchronized (delegate) {
-            delegate.clear();
-            interner.clear();
+        synchronized (mDelegate) {
+            mDelegate.clear();
+            mInterner.clear();
         }
     }
 
     @Override
     public Set<K> keySet() {
-        return delegate.keySet();
+        return mDelegate.keySet();
     }
 
     @Override
     public Collection<V> values() {
-        return delegate.values();
+        return mDelegate.values();
     }
 
     @Override
     public Set<Entry<K, V>> entrySet() {
-        return delegate.entrySet();
+        return mDelegate.entrySet();
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/intern/InternerWithStats.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/intern/InternerWithStats.java
index 9dd1bab..9e1cf10 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/intern/InternerWithStats.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/intern/InternerWithStats.java
@@ -13,38 +13,38 @@
 
 /** Wrapper for {@link Interner} that also tracks cache hits/misses. */
 public class InternerWithStats<T> implements Interner<T> {
-    private final Interner<T> delegate;
-    private final CacheStats stats = new CacheStats();
+    private final Interner<T> mDelegate;
+    private final CacheStats mStats = new CacheStats();
 
     public InternerWithStats(Interner<T> delegate) {
-        this.delegate = Validators.checkNotNull(delegate);
+        this.mDelegate = Validators.checkNotNull(delegate);
     }
 
     @Override
     public T intern(T arg) {
-        T internedArg = delegate.intern(arg);
+        T internedArg = mDelegate.intern(arg);
         if (internedArg != arg) {
-            stats.incrementHitCount();
+            mStats.incrementHitCount();
         } else {
-            stats.incrementMissCount();
+            mStats.incrementMissCount();
         }
         return internedArg;
     }
 
     @Override
     public void clear() {
-        delegate.clear();
-        stats.reset();
+        mDelegate.clear();
+        mStats.reset();
     }
 
     @Override
     public int size() {
-        return delegate.size();
+        return mDelegate.size();
     }
 
     public String getStats() {
-        int hits = stats.hitCount();
-        int total = hits + stats.missCount();
+        int hits = mStats.hitCount();
+        int total = hits + mStats.missCount();
         double ratio = (total == 0) ? 1.0 : (double) hits / total;
         return String.format(Locale.US, "Cache Hit Ratio: %d/%d (%.2f)", hits, total, ratio);
     }
@@ -52,30 +52,30 @@
     /** Similar to Guava CacheStats but thread safe. */
     @ThreadSafe
     private static final class CacheStats {
-        private final AtomicInteger hitCount = new AtomicInteger();
-        private final AtomicInteger missCount = new AtomicInteger();
+        private final AtomicInteger mHitCount = new AtomicInteger();
+        private final AtomicInteger mMissCount = new AtomicInteger();
 
         private CacheStats() {}
 
         private void incrementHitCount() {
-            hitCount.incrementAndGet();
+            mHitCount.incrementAndGet();
         }
 
         private void incrementMissCount() {
-            missCount.incrementAndGet();
+            mMissCount.incrementAndGet();
         }
 
         private int hitCount() {
-            return hitCount.get();
+            return mHitCount.get();
         }
 
         private int missCount() {
-            return missCount.get();
+            return mMissCount.get();
         }
 
         public void reset() {
-            hitCount.set(0);
-            missCount.set(0);
+            mHitCount.set(0);
+            mMissCount.set(0);
         }
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/intern/PoolInternerBase.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/intern/PoolInternerBase.java
index ccb795e7..83a36928 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/intern/PoolInternerBase.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/intern/PoolInternerBase.java
@@ -14,36 +14,36 @@
  */
 @ThreadSafe
 public abstract class PoolInternerBase<T> implements Interner<T> {
-    private final Pool<T> pool;
+    private final Pool<T> mPool;
 
     PoolInternerBase(Pool<T> pool) {
-        this.pool = Validators.checkNotNull(pool);
+        this.mPool = Validators.checkNotNull(pool);
     }
 
     @Override
     public T intern(T input) {
-        synchronized (pool) {
-            T output = pool.get(input);
+        synchronized (mPool) {
+            T output = mPool.get(input);
             if (output != null) {
                 return output;
             }
 
-            pool.put(input);
+            mPool.put(input);
             return input;
         }
     }
 
     @Override
     public void clear() {
-        synchronized (pool) {
-            pool.clear();
+        synchronized (mPool) {
+            mPool.clear();
         }
     }
 
     @Override
     public int size() {
-        synchronized (pool) {
-            return pool.size();
+        synchronized (mPool) {
+            return mPool.size();
         }
     }
 
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/intern/ProtoStringInternerBase.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/intern/ProtoStringInternerBase.java
index 4dc0aeb..d38f529 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/intern/ProtoStringInternerBase.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/intern/ProtoStringInternerBase.java
@@ -18,10 +18,10 @@
  */
 @ThreadSafe
 public abstract class ProtoStringInternerBase<P extends MessageLite> implements Interner<P> {
-    private final Interner<String> interner;
+    private final Interner<String> mInterner;
 
     protected ProtoStringInternerBase(Interner<String> interner) {
-        this.interner = interner;
+        this.mInterner = interner;
     }
 
     protected interface SingleStringFieldGetter<T extends GeneratedMessageLite<T, ?>> {
@@ -39,7 +39,7 @@
             /*@Nullable*/ B builder, SingleStringFieldGetter<T> singleStringFieldGetter,
             SingleStringFieldSetter<B> singleStringFieldSetter) {
         String orig = singleStringFieldGetter.getField(input);
-        String interned = interner.intern(orig);
+        String interned = mInterner.intern(orig);
         if (interned != orig) {
             builder = ensureBuilder(input, builder);
             singleStringFieldSetter.setField(builder, interned);
@@ -69,7 +69,7 @@
         boolean modified = false;
         List<String> internedValues = new ArrayList<>();
         for (String orig : repeatedStringFieldGetter.getField(input)) {
-            String interned = interner.intern(orig);
+            String interned = mInterner.intern(orig);
             internedValues.add(interned);
             if (interned != orig) {
                 modified = true;
@@ -93,11 +93,11 @@
 
     @Override
     public void clear() {
-        interner.clear();
+        mInterner.clear();
     }
 
     @Override
     public int size() {
-        return interner.size();
+        return mInterner.size();
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/intern/WeakPoolInterner.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/intern/WeakPoolInterner.java
index c3bfd1a..65b0e4d 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/intern/WeakPoolInterner.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/intern/WeakPoolInterner.java
@@ -23,28 +23,28 @@
     }
 
     private static final class WeakPool<T> implements Pool<T> {
-        private final WeakHashMap<T, WeakReference<T>> pool = new WeakHashMap<>();
+        private final WeakHashMap<T, WeakReference<T>> mPool = new WeakHashMap<>();
 
         @Override
         /*@Nullable*/
         public T get(T input) {
-            WeakReference<T> weakRef = pool.get(input);
+            WeakReference<T> weakRef = mPool.get(input);
             return weakRef != null ? weakRef.get() : null;
         }
 
         @Override
         public void put(T input) {
-            pool.put(input, new WeakReference<>(input));
+            mPool.put(input, new WeakReference<>(input));
         }
 
         @Override
         public void clear() {
-            pool.clear();
+            mPool.clear();
         }
 
         @Override
         public int size() {
-            return pool.size();
+            return mPool.size();
         }
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/logging/Dumper.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/logging/Dumper.java
index 3bebeac..61d30f2 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/logging/Dumper.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/logging/Dumper.java
@@ -22,19 +22,19 @@
     private static final String TAG = "Dumper";
     private static final String SINGLE_INDENT = "  ";
 
-    private final int indentLevel;
+    private final int mIndentLevel;
 
     // Walk up the chain of parents to
     // ensure none are currently dumping a given dumpable, to prevent cycles. The WeakReference
     // itself is always non-null, but the Dumpable may be null.
-    private final WeakReference<Dumpable> currentDumpable;
-    /*@Nullable*/ private final Dumper parent;
-    private final boolean redacted;
+    private final WeakReference<Dumpable> mCurrentDumpable;
+    /*@Nullable*/ private final Dumper mParent;
+    private final boolean mRedacted;
 
     // The root Dumper will create the values used by all children Dumper instances.  This flattens
     // the output into one list.
     @VisibleForTesting
-    final List<DumperValue> values;
+    final List<DumperValue> mValues;
 
     /** Returns the default Dumper, this will show sensitive content. */
     public static Dumper newDefaultDumper() {
@@ -50,16 +50,16 @@
     private Dumper(int indentLevel,
             /*@Nullable*/ Dumper parent, WeakReference<Dumpable> currentDumpable,
             List<DumperValue> values, boolean redacted) {
-        this.indentLevel = indentLevel;
-        this.parent = parent;
-        this.currentDumpable = currentDumpable;
-        this.values = values;
-        this.redacted = redacted;
+        this.mIndentLevel = indentLevel;
+        this.mParent = parent;
+        this.mCurrentDumpable = currentDumpable;
+        this.mValues = values;
+        this.mRedacted = redacted;
     }
 
     private boolean isDescendentOf(Dumpable dumpable) {
-        return (currentDumpable.get() == dumpable)
-                || (parent != null && parent.isDescendentOf(dumpable));
+        return (mCurrentDumpable.get() == dumpable)
+                || (mParent != null && mParent.isDescendentOf(dumpable));
     }
 
     /** Creates a new Dumper with a indent level one greater than the current indent level. */
@@ -68,12 +68,13 @@
     }
 
     private Dumper getChildDumper(/*@Nullable*/ Dumpable dumpable) {
-        return new Dumper(indentLevel + 1, this, new WeakReference<>(dumpable), values, redacted);
+        return new Dumper(
+                mIndentLevel + 1, this, new WeakReference<>(dumpable), mValues, mRedacted);
     }
 
     /** Set the title of the section. This is output at the previous indent level. */
     public void title(String title) {
-        values.add(new DumperValue(indentLevel - 1, title));
+        mValues.add(new DumperValue(mIndentLevel - 1, title));
     }
 
     /** Adds a String as an indented line to the dump */
@@ -83,12 +84,12 @@
 
     /** Create a Dumper value with the specified name. */
     public DumperValue forKey(String name) {
-        return addLine(indentLevel, name);
+        return addLine(mIndentLevel, name);
     }
 
     /** Allow the indent level to be adjusted. */
     public DumperValue forKey(String name, int indentAdjustment) {
-        return addLine(indentLevel + indentAdjustment, name);
+        return addLine(mIndentLevel + indentAdjustment, name);
     }
 
     /** Dump a Dumpable as a child of the current Dumper */
@@ -111,13 +112,13 @@
     /** Write the Dumpable to an {@link Appendable}. */
     public void write(Appendable writer) throws IOException {
         boolean newLine = true;
-        for (DumperValue value : values) {
-            String stringValue = value.toString(redacted);
+        for (DumperValue value : mValues) {
+            String stringValue = value.toString(mRedacted);
             if (!newLine) {
-                if (value.compactPrevious) {
+                if (value.mCompactPrevious) {
                     writer.append(" | ");
                 } else {
-                    String indent = getIndent(value.indentLevel);
+                    String indent = getIndent(value.mIndentLevel);
                     writer.append("\n").append(indent);
                 }
             }
@@ -129,7 +130,7 @@
 
     private DumperValue addLine(int indentLevel, String title) {
         DumperValue dumperValue = new DumperValue(indentLevel, title);
-        values.add(dumperValue);
+        mValues.add(dumperValue);
         return dumperValue;
     }
 
@@ -147,42 +148,42 @@
         @VisibleForTesting
         static final String REDACTED = "[REDACTED]";
         @VisibleForTesting
-        final String name;
+        final String mName;
         @VisibleForTesting
-        final StringBuilder content;
+        final StringBuilder mContent;
         @VisibleForTesting
-        final int indentLevel;
-        private boolean compactPrevious;
-        private boolean sensitive;
+        final int mIndentLevel;
+        private boolean mCompactPrevious;
+        private boolean mSensitive;
 
         // create a DumpValue with just a name, this is not public, it will is called by Dumper
         DumperValue(int indentLevel, String name) {
-            this.indentLevel = indentLevel;
-            this.name = name;
-            this.content = new StringBuilder();
+            this.mIndentLevel = indentLevel;
+            this.mName = name;
+            this.mContent = new StringBuilder();
         }
 
         /** Append an int to the current content of this value */
         public DumperValue value(int value) {
-            this.content.append(value);
+            this.mContent.append(value);
             return this;
         }
 
         /** Append an String to the current content of this value */
         public DumperValue value(String value) {
-            this.content.append(value);
+            this.mContent.append(value);
             return this;
         }
 
         /** Append an boolean to the current content of this value */
         public DumperValue value(boolean value) {
-            this.content.append(value);
+            this.mContent.append(value);
             return this;
         }
 
         /** Add a Date value. It will be formatted as Logcat Dates are formatted */
         public DumperValue value(Date value) {
-            this.content.append(StringFormattingUtils.formatLogDate(value));
+            this.mContent.append(StringFormattingUtils.formatLogDate(value));
             return this;
         }
 
@@ -202,13 +203,13 @@
          * value.
          */
         public DumperValue compactPrevious() {
-            compactPrevious = true;
+            mCompactPrevious = true;
             return this;
         }
 
         /** Mark the Value as containing sensitive data */
         public DumperValue sensitive() {
-            sensitive = true;
+            mSensitive = true;
             return this;
         }
 
@@ -218,13 +219,13 @@
          */
         String toString(boolean suppressSensitive) {
             String value = "";
-            if (!TextUtils.isEmpty(content)) {
-                value = (suppressSensitive && sensitive) ? REDACTED : content.toString();
+            if (!TextUtils.isEmpty(mContent)) {
+                value = (suppressSensitive && mSensitive) ? REDACTED : mContent.toString();
             }
-            if (!TextUtils.isEmpty(name) && !TextUtils.isEmpty(value)) {
-                return name + ": " + value;
-            } else if (!TextUtils.isEmpty(name)) {
-                return name + ":";
+            if (!TextUtils.isEmpty(mName) && !TextUtils.isEmpty(value)) {
+                return mName + ": " + value;
+            } else if (!TextUtils.isEmpty(mName)) {
+                return mName + ":";
             } else if (!TextUtils.isEmpty(value)) {
                 return value;
             } else {
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/logging/Logger.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/logging/Logger.java
index d4060ac..7236c663 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/logging/Logger.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/logging/Logger.java
@@ -778,11 +778,11 @@
         // Log.d truncates long lines.  This is a workaround to print long lines by chunking
         // into 2000 chars per line.  The line limit here is arbitrary but cannot be pushed past
         // 4000 chars.  Keeping it at 3500 or lower should be safe.
-        int LENGTH_MAX = 2000;
+        int lengthMax = 2000;
         int total = request.length();
-        for (int start = 0; start < total; start += LENGTH_MAX) {
+        for (int start = 0; start < total; start += lengthMax) {
             // String.substring(...) expects the end to be the string length, never more.
-            int end = Math.min(start + LENGTH_MAX, total);
+            int end = Math.min(start + lengthMax, total);
             Logger.d(tag, "%s", request.substring(start, end));
         }
         // End-tag is not a standard HTML </end> because the utility
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/logging/StringFormattingUtils.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/logging/StringFormattingUtils.java
index 7dee8fd..f9d984fd 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/logging/StringFormattingUtils.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/logging/StringFormattingUtils.java
@@ -13,15 +13,15 @@
     // Do not instantiate
     private StringFormattingUtils() {}
 
-    private static SimpleDateFormat logDateFormat;
+    private static SimpleDateFormat sLogDateFormat;
 
     /** Formats {@code date} in the same format as used by logcat. */
     static synchronized String formatLogDate(Date date) {
-        if (logDateFormat == null) {
+        if (sLogDateFormat == null) {
             // Getting the date format is mildly expensive, so don't do it unless we need it.
-            logDateFormat = new SimpleDateFormat("MM-dd HH:mm:ss.SSS", Locale.US);
+            sLogDateFormat = new SimpleDateFormat("MM-dd HH:mm:ss.SSS", Locale.US);
         }
-        return logDateFormat.format(date);
+        return sLogDateFormat.format(date);
     }
 
     /** Formats a long as a Date */
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/protoextensions/FeedExtensionRegistry.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/protoextensions/FeedExtensionRegistry.java
index 76d051bf..8e9a99d3 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/protoextensions/FeedExtensionRegistry.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/protoextensions/FeedExtensionRegistry.java
@@ -27,7 +27,7 @@
  * those provided by the host through the {@link ProtoExtensionProvider}.
  */
 public class FeedExtensionRegistry {
-    private final ExtensionRegistryLite extensionRegistry = ExtensionRegistryLite.newInstance();
+    private final ExtensionRegistryLite mExtensionRegistry = ExtensionRegistryLite.newInstance();
 
     /**
      * Creates the registry.
@@ -36,29 +36,29 @@
      */
     public FeedExtensionRegistry(ProtoExtensionProvider extensionProvider) {
         // Set up all the extensions we use inside the Feed.
-        extensionRegistry.add(Card.cardExtension);
-        extensionRegistry.add(ClientBasicLoggingMetadata.clientBasicLoggingMetadata);
-        extensionRegistry.add(Content.contentExtension);
-        extensionRegistry.add(FeedAction.feedActionExtension);
-        extensionRegistry.add(FeedRequest.feedRequest);
-        extensionRegistry.add(FeedResponse.feedResponse);
-        extensionRegistry.add(FeedActionRequest.feedActionRequest);
-        extensionRegistry.add(FeedActionResponse.feedActionResponse);
-        extensionRegistry.add(OfflineExtension.offlineExtension);
-        extensionRegistry.add(PietContent.pietContentExtension);
-        extensionRegistry.add(PietFeedActionPayload.pietFeedActionPayloadExtension);
-        extensionRegistry.add(StreamStructureProto.Stream.streamExtension);
-        extensionRegistry.add(SwipeActionExtension.swipeActionExtension);
-        extensionRegistry.add(TokenProto.Token.tokenExtension);
+        mExtensionRegistry.add(Card.cardExtension);
+        mExtensionRegistry.add(ClientBasicLoggingMetadata.clientBasicLoggingMetadata);
+        mExtensionRegistry.add(Content.contentExtension);
+        mExtensionRegistry.add(FeedAction.feedActionExtension);
+        mExtensionRegistry.add(FeedRequest.feedRequest);
+        mExtensionRegistry.add(FeedResponse.feedResponse);
+        mExtensionRegistry.add(FeedActionRequest.feedActionRequest);
+        mExtensionRegistry.add(FeedActionResponse.feedActionResponse);
+        mExtensionRegistry.add(OfflineExtension.offlineExtension);
+        mExtensionRegistry.add(PietContent.pietContentExtension);
+        mExtensionRegistry.add(PietFeedActionPayload.pietFeedActionPayloadExtension);
+        mExtensionRegistry.add(StreamStructureProto.Stream.streamExtension);
+        mExtensionRegistry.add(SwipeActionExtension.swipeActionExtension);
+        mExtensionRegistry.add(TokenProto.Token.tokenExtension);
 
         // Call the host and add all the extensions it uses.
         for (GeneratedExtension<?, ?> extension : extensionProvider.getProtoExtensions()) {
-            extensionRegistry.add(extension);
+            mExtensionRegistry.add(extension);
         }
     }
 
     /** Returns the {@link ExtensionRegistryLite}. */
     public ExtensionRegistryLite getExtensionRegistry() {
-        return extensionRegistry.getUnmodifiable();
+        return mExtensionRegistry.getUnmodifiable();
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/testing/InfraIntegrationScope.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/testing/InfraIntegrationScope.java
index ddac603b..66938c6 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/testing/InfraIntegrationScope.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/testing/InfraIntegrationScope.java
@@ -57,117 +57,118 @@
      */
     public static final long TIMEOUT_TEST_TIMEOUT = TimeUnit.SECONDS.toMillis(20);
 
-    private final Configuration configuration;
-    private final ContentStorageDirect contentStorage;
-    private final FakeClock fakeClock;
-    private final FakeDirectExecutor fakeDirectExecutor;
-    private final FakeMainThreadRunner fakeMainThreadRunner;
-    private final FakeFeedRequestManager fakeFeedRequestManager;
-    private final FakeThreadUtils fakeThreadUtils;
-    private final FeedAppLifecycleListener appLifecycleListener;
-    private final FeedModelProviderFactory modelProviderFactory;
-    private final FeedProtocolAdapter feedProtocolAdapter;
-    private final FeedSessionManagerImpl feedSessionManager;
-    private final FeedStore store;
-    private final JournalStorageDirect journalStorage;
-    private final SchedulerApi schedulerApi;
-    private final TaskQueue taskQueue;
-    private final RequestManager requestManager;
+    private final Configuration mConfiguration;
+    private final ContentStorageDirect mContentStorage;
+    private final FakeClock mFakeClock;
+    private final FakeDirectExecutor mFakeDirectExecutor;
+    private final FakeMainThreadRunner mFakeMainThreadRunner;
+    private final FakeFeedRequestManager mFakeFeedRequestManager;
+    private final FakeThreadUtils mFakeThreadUtils;
+    private final FeedAppLifecycleListener mAppLifecycleListener;
+    private final FeedModelProviderFactory mModelProviderFactory;
+    private final FeedProtocolAdapter mFeedProtocolAdapter;
+    private final FeedSessionManagerImpl mFeedSessionManager;
+    private final FeedStore mStore;
+    private final JournalStorageDirect mJournalStorage;
+    private final SchedulerApi mSchedulerApi;
+    private final TaskQueue mTaskQueue;
+    private final RequestManager mRequestManager;
 
     private InfraIntegrationScope(FakeThreadUtils fakeThreadUtils,
             FakeDirectExecutor fakeDirectExecutor, SchedulerApi schedulerApi, FakeClock fakeClock,
             Configuration configuration, ContentStorageDirect contentStorage,
             JournalStorageDirect journalStorage, FakeMainThreadRunner fakeMainThreadRunner) {
-        this.fakeClock = fakeClock;
-        this.configuration = configuration;
-        this.contentStorage = contentStorage;
-        this.journalStorage = journalStorage;
-        this.fakeDirectExecutor = fakeDirectExecutor;
-        this.fakeMainThreadRunner = fakeMainThreadRunner;
-        this.schedulerApi = schedulerApi;
-        this.fakeThreadUtils = fakeThreadUtils;
+        this.mFakeClock = fakeClock;
+        this.mConfiguration = configuration;
+        this.mContentStorage = contentStorage;
+        this.mJournalStorage = journalStorage;
+        this.mFakeDirectExecutor = fakeDirectExecutor;
+        this.mFakeMainThreadRunner = fakeMainThreadRunner;
+        this.mSchedulerApi = schedulerApi;
+        this.mFakeThreadUtils = fakeThreadUtils;
         TimingUtils timingUtils = new TimingUtils();
-        appLifecycleListener = new FeedAppLifecycleListener(fakeThreadUtils);
+        mAppLifecycleListener = new FeedAppLifecycleListener(fakeThreadUtils);
         FakeBasicLoggingApi fakeBasicLoggingApi = new FakeBasicLoggingApi();
 
         FeedExtensionRegistry extensionRegistry =
                 new FeedExtensionRegistry(new ExtensionProvider());
-        taskQueue = new TaskQueue(
+        mTaskQueue = new TaskQueue(
                 fakeBasicLoggingApi, fakeDirectExecutor, fakeMainThreadRunner, fakeClock);
-        store = new FeedStore(configuration, timingUtils, extensionRegistry, contentStorage,
-                journalStorage, fakeThreadUtils, taskQueue, fakeClock, fakeBasicLoggingApi,
+        mStore = new FeedStore(configuration, timingUtils, extensionRegistry, contentStorage,
+                journalStorage, fakeThreadUtils, mTaskQueue, fakeClock, fakeBasicLoggingApi,
                 fakeMainThreadRunner);
-        feedProtocolAdapter = new FeedProtocolAdapter(
+        mFeedProtocolAdapter = new FeedProtocolAdapter(
                 Collections.singletonList(new PietRequiredContentAdapter()), timingUtils);
-        fakeFeedRequestManager = new FakeFeedRequestManager(
-                fakeThreadUtils, fakeMainThreadRunner, feedProtocolAdapter, taskQueue);
+        mFakeFeedRequestManager = new FakeFeedRequestManager(
+                fakeThreadUtils, fakeMainThreadRunner, mFeedProtocolAdapter, mTaskQueue);
         FakeActionUploadRequestManager fakeActionUploadRequestManager =
                 new FakeActionUploadRequestManager(FakeThreadUtils.withThreadChecks());
-        feedSessionManager = new FeedSessionManagerFactory(taskQueue, store, timingUtils,
-                fakeThreadUtils, feedProtocolAdapter, fakeFeedRequestManager,
+        mFeedSessionManager = new FeedSessionManagerFactory(mTaskQueue, mStore, timingUtils,
+                fakeThreadUtils, mFeedProtocolAdapter, mFakeFeedRequestManager,
                 fakeActionUploadRequestManager, schedulerApi, configuration, fakeClock,
-                appLifecycleListener, fakeMainThreadRunner, fakeBasicLoggingApi)
-                                     .create();
+                mAppLifecycleListener, fakeMainThreadRunner, fakeBasicLoggingApi)
+                                      .create();
         new ClearAllListener(
-                taskQueue, feedSessionManager, store, fakeThreadUtils, appLifecycleListener);
-        feedSessionManager.initialize();
-        modelProviderFactory = new FeedModelProviderFactory(feedSessionManager, fakeThreadUtils,
-                timingUtils, taskQueue, fakeMainThreadRunner, configuration, fakeBasicLoggingApi);
-        requestManager = new RequestManagerImpl(fakeFeedRequestManager, feedSessionManager);
+                mTaskQueue, mFeedSessionManager, mStore, fakeThreadUtils, mAppLifecycleListener);
+        mFeedSessionManager.initialize();
+        mModelProviderFactory = new FeedModelProviderFactory(mFeedSessionManager, fakeThreadUtils,
+                timingUtils, mTaskQueue, fakeMainThreadRunner, configuration, fakeBasicLoggingApi);
+        mRequestManager = new RequestManagerImpl(mFakeFeedRequestManager, mFeedSessionManager);
     }
 
     public ProtocolAdapter getProtocolAdapter() {
-        return feedProtocolAdapter;
+        return mFeedProtocolAdapter;
     }
 
     public FeedSessionManager getFeedSessionManager() {
-        return feedSessionManager;
+        return mFeedSessionManager;
     }
 
     public ModelProviderFactory getModelProviderFactory() {
-        return modelProviderFactory;
+        return mModelProviderFactory;
     }
 
     public FakeClock getFakeClock() {
-        return fakeClock;
+        return mFakeClock;
     }
 
     public FakeDirectExecutor getFakeDirectExecutor() {
-        return fakeDirectExecutor;
+        return mFakeDirectExecutor;
     }
 
     public FakeMainThreadRunner getFakeMainThreadRunner() {
-        return fakeMainThreadRunner;
+        return mFakeMainThreadRunner;
     }
 
     public FakeThreadUtils getFakeThreadUtils() {
-        return fakeThreadUtils;
+        return mFakeThreadUtils;
     }
 
     public FeedStore getStore() {
-        return store;
+        return mStore;
     }
 
     public TaskQueue getTaskQueue() {
-        return taskQueue;
+        return mTaskQueue;
     }
 
     public FakeFeedRequestManager getFakeFeedRequestManager() {
-        return fakeFeedRequestManager;
+        return mFakeFeedRequestManager;
     }
 
     public AppLifecycleListener getAppLifecycleListener() {
-        return appLifecycleListener;
+        return mAppLifecycleListener;
     }
 
     public RequestManager getRequestManager() {
-        return requestManager;
+        return mRequestManager;
     }
 
     @Override
     public InfraIntegrationScope clone() {
-        return new InfraIntegrationScope(fakeThreadUtils, fakeDirectExecutor, schedulerApi,
-                fakeClock, configuration, contentStorage, journalStorage, fakeMainThreadRunner);
+        return new InfraIntegrationScope(mFakeThreadUtils, mFakeDirectExecutor, mSchedulerApi,
+                mFakeClock, mConfiguration, mContentStorage, mJournalStorage,
+                mFakeMainThreadRunner);
     }
 
     private static class ExtensionProvider implements ProtoExtensionProvider {
@@ -179,45 +180,45 @@
 
     /** Builder for creating the {@link InfraIntegrationScope} */
     public static class Builder {
-        private final FakeClock fakeClock = new FakeClock();
-        private final FakeMainThreadRunner fakeMainThreadRunner =
-                FakeMainThreadRunner.create(fakeClock);
-        private final FakeThreadUtils fakeThreadUtils = FakeThreadUtils.withThreadChecks();
+        private final FakeClock mFakeClock = new FakeClock();
+        private final FakeMainThreadRunner mFakeMainThreadRunner =
+                FakeMainThreadRunner.create(mFakeClock);
+        private final FakeThreadUtils mFakeThreadUtils = FakeThreadUtils.withThreadChecks();
 
-        private Configuration configuration = Configuration.getDefaultInstance();
-        private FakeDirectExecutor fakeDirectExecutor =
-                FakeDirectExecutor.runTasksImmediately(fakeThreadUtils);
-        private SchedulerApi schedulerApi = new FakeSchedulerApi(fakeThreadUtils);
+        private Configuration mConfiguration = Configuration.getDefaultInstance();
+        private FakeDirectExecutor mFakeDirectExecutor =
+                FakeDirectExecutor.runTasksImmediately(mFakeThreadUtils);
+        private SchedulerApi mSchedulerApi1 = new FakeSchedulerApi(mFakeThreadUtils);
 
         public Builder() {}
 
         public Builder setConfiguration(Configuration configuration) {
-            this.configuration = configuration;
+            this.mConfiguration = configuration;
             return this;
         }
 
         public Builder setSchedulerApi(SchedulerApi schedulerApi) {
-            this.schedulerApi = schedulerApi;
+            this.mSchedulerApi1 = schedulerApi;
             return this;
         }
 
         public Builder withQueuingTasks() {
-            fakeDirectExecutor = FakeDirectExecutor.queueAllTasks(fakeThreadUtils);
+            mFakeDirectExecutor = FakeDirectExecutor.queueAllTasks(mFakeThreadUtils);
             return this;
         }
 
         public Builder withTimeoutSessionConfiguration(long timeoutMs) {
-            configuration = configuration.toBuilder()
-                                    .put(ConfigKey.USE_TIMEOUT_SCHEDULER, USE_TIMEOUT_SCHEDULER)
-                                    .put(ConfigKey.TIMEOUT_TIMEOUT_MS, timeoutMs)
-                                    .build();
+            mConfiguration = mConfiguration.toBuilder()
+                                     .put(ConfigKey.USE_TIMEOUT_SCHEDULER, USE_TIMEOUT_SCHEDULER)
+                                     .put(ConfigKey.TIMEOUT_TIMEOUT_MS, timeoutMs)
+                                     .build();
             return this;
         }
 
         public InfraIntegrationScope build() {
-            return new InfraIntegrationScope(fakeThreadUtils, fakeDirectExecutor, schedulerApi,
-                    fakeClock, configuration, new InMemoryContentStorage(),
-                    new InMemoryJournalStorage(), fakeMainThreadRunner);
+            return new InfraIntegrationScope(mFakeThreadUtils, mFakeDirectExecutor, mSchedulerApi1,
+                    mFakeClock, mConfiguration, new InMemoryContentStorage(),
+                    new InMemoryJournalStorage(), mFakeMainThreadRunner);
         }
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/testing/ModelProviderValidator.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/testing/ModelProviderValidator.java
index a9f03f3..a061960 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/testing/ModelProviderValidator.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/testing/ModelProviderValidator.java
@@ -22,10 +22,10 @@
 
 /** Helper class providing validation method for a ModelProvider. */
 public class ModelProviderValidator {
-    private final ProtocolAdapter protocolAdapter;
+    private final ProtocolAdapter mProtocolAdapter;
 
     public ModelProviderValidator(ProtocolAdapter protocolAdapter) {
-        this.protocolAdapter = protocolAdapter;
+        this.mProtocolAdapter = protocolAdapter;
     }
 
     public void assertRoot(ModelProvider modelProvider) {
@@ -39,7 +39,7 @@
         assertThat(modelFeature).isNotNull();
         assertThat(modelFeature.getStreamFeature()).isNotNull();
         assertStreamContentId(modelFeature.getStreamFeature().getContentId(),
-                protocolAdapter.getStreamContentId(contentId));
+                mProtocolAdapter.getStreamContentId(contentId));
     }
 
     public void assertStreamContentId(String contentId, String expectedContentId) {
@@ -47,12 +47,12 @@
     }
 
     public void assertStreamContentId(String contentId, ContentId expectedContentId) {
-        assertThat(contentId).isEqualTo(protocolAdapter.getStreamContentId(expectedContentId));
+        assertThat(contentId).isEqualTo(mProtocolAdapter.getStreamContentId(expectedContentId));
     }
 
     public void verifyContent(ModelProvider modelProvider, List<ContentId> features) {
         for (ContentId contentId : features) {
-            String streamContentId = protocolAdapter.getStreamContentId(contentId);
+            String streamContentId = mProtocolAdapter.getStreamContentId(contentId);
             if (modelProvider.getModelChild(streamContentId) == null) {
                 fail("Feature was not found for " + streamContentId);
             }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/testing/RequiredConsumer.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/testing/RequiredConsumer.java
index 1bcb76b..052b561 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/testing/RequiredConsumer.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/testing/RequiredConsumer.java
@@ -8,20 +8,20 @@
 
 /** Test helper class that ensures that the asynchronous consumer is called. */
 public class RequiredConsumer<T> implements Consumer<T> {
-    private final Consumer<T> consumer;
-    private boolean isCalled;
+    private final Consumer<T> mConsumer;
+    private boolean mIsCalled;
 
     public RequiredConsumer(Consumer<T> consumer) {
-        this.consumer = consumer;
+        this.mConsumer = consumer;
     }
 
     @Override
     public void accept(T input) {
-        isCalled = true;
-        consumer.accept(input);
+        mIsCalled = true;
+        mConsumer.accept(input);
     }
 
     public boolean isCalled() {
-        return isCalled;
+        return mIsCalled;
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/testing/ResponseBuilder.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/testing/ResponseBuilder.java
index 39fbd2a0..c5ea54bf 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/testing/ResponseBuilder.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/testing/ResponseBuilder.java
@@ -47,25 +47,25 @@
                 .build();
     }
 
-    private final WireProtocolInfo wireProtocolInfo = new WireProtocolInfo();
-    private final FeedResponse.Builder feedResponseBuilder = FeedResponse.newBuilder();
-    private final List<ContentId> pietSharedStateContentIds = new ArrayList<>();
+    private final WireProtocolInfo mWireProtocolInfo = new WireProtocolInfo();
+    private final FeedResponse.Builder mFeedResponseBuilder = FeedResponse.newBuilder();
+    private final List<ContentId> mPietSharedStateContentIds = new ArrayList<>();
 
-    private int tokenId;
-    /*@Nullable*/ private ByteString token;
+    private int mTokenId;
+    /*@Nullable*/ private ByteString mToken;
 
     /** Add a CLEAR_ALL data operation to the response */
     public ResponseBuilder addClearOperation() {
-        wireProtocolInfo.hasClearOperation = true;
-        feedResponseBuilder.addDataOperation(
+        mWireProtocolInfo.hasClearOperation = true;
+        mFeedResponseBuilder.addDataOperation(
                 DataOperation.newBuilder().setOperation(Operation.CLEAR_ALL).build());
         return this;
     }
 
     public ResponseBuilder addStreamToken(int tokenId, ByteString token) {
-        this.token = token;
-        this.tokenId = tokenId;
-        wireProtocolInfo.hasToken = true;
+        this.mToken = token;
+        this.mTokenId = tokenId;
+        mWireProtocolInfo.hasToken = true;
         return this;
     }
 
@@ -74,10 +74,10 @@
     }
 
     public ResponseBuilder addPietSharedState(ContentId pietSharedStateContentId) {
-        pietSharedStateContentIds.add(pietSharedStateContentId);
+        mPietSharedStateContentIds.add(pietSharedStateContentId);
         PayloadMetadata payloadMetadata =
                 PayloadMetadata.newBuilder().setContentId(pietSharedStateContentId).build();
-        feedResponseBuilder.addDataOperation(
+        mFeedResponseBuilder.addDataOperation(
                 DataOperation.newBuilder()
                         .setOperation(Operation.UPDATE_OR_APPEND)
                         .setPietSharedState(PietSharedState.getDefaultInstance())
@@ -96,12 +96,12 @@
                 PayloadMetadata.newBuilder().setContentId(contentId).build();
         Feature feature = Feature.newBuilder().setRenderableUnit(RenderableUnit.STREAM).build();
 
-        feedResponseBuilder.addDataOperation(DataOperation.newBuilder()
-                                                     .setOperation(Operation.UPDATE_OR_APPEND)
-                                                     .setFeature(feature)
-                                                     .setMetadata(payloadMetadata)
-                                                     .build());
-        wireProtocolInfo.featuresAdded.add(contentId);
+        mFeedResponseBuilder.addDataOperation(DataOperation.newBuilder()
+                                                      .setOperation(Operation.UPDATE_OR_APPEND)
+                                                      .setFeature(feature)
+                                                      .setMetadata(payloadMetadata)
+                                                      .build());
+        mWireProtocolInfo.featuresAdded.add(contentId);
         return this;
     }
 
@@ -112,12 +112,12 @@
                                   .setRenderableUnit(RenderableUnit.CLUSTER)
                                   .setParentId(parentId)
                                   .build();
-        feedResponseBuilder.addDataOperation(DataOperation.newBuilder()
-                                                     .setOperation(Operation.UPDATE_OR_APPEND)
-                                                     .setFeature(feature)
-                                                     .setMetadata(payloadMetadata)
-                                                     .build());
-        wireProtocolInfo.featuresAdded.add(contentId);
+        mFeedResponseBuilder.addDataOperation(DataOperation.newBuilder()
+                                                      .setOperation(Operation.UPDATE_OR_APPEND)
+                                                      .setFeature(feature)
+                                                      .setMetadata(payloadMetadata)
+                                                      .build());
+        mWireProtocolInfo.featuresAdded.add(contentId);
         return this;
     }
 
@@ -129,12 +129,12 @@
                                   .setRenderableUnit(RenderableUnit.CARD)
                                   .setParentId(parentId)
                                   .build();
-        feedResponseBuilder.addDataOperation(DataOperation.newBuilder()
-                                                     .setOperation(Operation.UPDATE_OR_APPEND)
-                                                     .setFeature(feature)
-                                                     .setMetadata(payloadMetadata)
-                                                     .build());
-        wireProtocolInfo.featuresAdded.add(contentId);
+        mFeedResponseBuilder.addDataOperation(DataOperation.newBuilder()
+                                                      .setOperation(Operation.UPDATE_OR_APPEND)
+                                                      .setFeature(feature)
+                                                      .setMetadata(payloadMetadata)
+                                                      .build());
+        mWireProtocolInfo.featuresAdded.add(contentId);
 
         // Create content within the Card
         payloadMetadata =
@@ -150,16 +150,16 @@
                                           .setExtension(PietContent.pietContentExtension,
                                                   PietContent.newBuilder()
                                                           .addAllPietSharedStates(
-                                                                  pietSharedStateContentIds)
+                                                                  mPietSharedStateContentIds)
                                                           .build())
                                           .build())
                           .build();
-        feedResponseBuilder.addDataOperation(DataOperation.newBuilder()
-                                                     .setOperation(Operation.UPDATE_OR_APPEND)
-                                                     .setFeature(feature)
-                                                     .setMetadata(payloadMetadata)
-                                                     .build());
-        wireProtocolInfo.featuresAdded.add(payloadMetadata.getContentId());
+        mFeedResponseBuilder.addDataOperation(DataOperation.newBuilder()
+                                                      .setOperation(Operation.UPDATE_OR_APPEND)
+                                                      .setFeature(feature)
+                                                      .setMetadata(payloadMetadata)
+                                                      .build());
+        mWireProtocolInfo.featuresAdded.add(payloadMetadata.getContentId());
         return this;
     }
 
@@ -171,7 +171,7 @@
     }
 
     public ResponseBuilder addCardWithSemanticData(ContentId contentId, ByteString semanticData) {
-        feedResponseBuilder.addDataOperation(
+        mFeedResponseBuilder.addDataOperation(
                 DataOperation.newBuilder()
                         .setOperation(Operation.UPDATE_OR_APPEND)
                         .setFeature(Feature.newBuilder().setRenderableUnit(RenderableUnit.CARD))
@@ -181,7 +181,7 @@
                                         .setSemanticProperties(
                                                 SemanticProperties.newBuilder()
                                                         .setSemanticPropertiesData(semanticData))));
-        wireProtocolInfo.featuresAdded.add(contentId);
+        mWireProtocolInfo.featuresAdded.add(contentId);
         return this;
     }
 
@@ -192,21 +192,21 @@
                                   .setRenderableUnit(RenderableUnit.CARD)
                                   .setParentId(parentId)
                                   .build();
-        feedResponseBuilder.addDataOperation(DataOperation.newBuilder()
-                                                     .setOperation(Operation.REMOVE)
-                                                     .setFeature(feature)
-                                                     .setMetadata(payloadMetadata)
-                                                     .build());
-        wireProtocolInfo.featuresAdded.add(contentId);
+        mFeedResponseBuilder.addDataOperation(DataOperation.newBuilder()
+                                                      .setOperation(Operation.REMOVE)
+                                                      .setFeature(feature)
+                                                      .setMetadata(payloadMetadata)
+                                                      .build());
+        mWireProtocolInfo.featuresAdded.add(contentId);
         return this;
     }
 
     public Response build() {
-        if (token != null) {
-            addToken(tokenId, token);
+        if (mToken != null) {
+            addToken(mTokenId, mToken);
         }
         return Response.newBuilder()
-                .setExtension(FeedResponse.feedResponse, feedResponseBuilder.build())
+                .setExtension(FeedResponse.feedResponse, mFeedResponseBuilder.build())
                 .build();
     }
 
@@ -220,15 +220,15 @@
                                                  .setParentId(ROOT_CONTENT_ID);
         Token wireToken = Token.newBuilder().setNextPageToken(token).build();
         featureBuilder.setExtension(Token.tokenExtension, wireToken);
-        feedResponseBuilder.addDataOperation(DataOperation.newBuilder()
-                                                     .setOperation(Operation.UPDATE_OR_APPEND)
-                                                     .setFeature(featureBuilder.build())
-                                                     .setMetadata(payloadMetadata)
-                                                     .build());
+        mFeedResponseBuilder.addDataOperation(DataOperation.newBuilder()
+                                                      .setOperation(Operation.UPDATE_OR_APPEND)
+                                                      .setFeature(featureBuilder.build())
+                                                      .setMetadata(payloadMetadata)
+                                                      .build());
     }
 
     public WireProtocolInfo getWireProtocolInfo() {
-        return wireProtocolInfo;
+        return mWireProtocolInfo;
     }
 
     /** Returns a new {@link ResponseBuilder}. */
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/testing/RunnableSubject.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/testing/RunnableSubject.java
index 0b6e63c..3164f60 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/testing/RunnableSubject.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/testing/RunnableSubject.java
@@ -8,7 +8,6 @@
 import static com.google.common.truth.Fact.simpleFact;
 import static com.google.common.truth.Truth.assertAbout;
 
-import com.google.android.libraries.feed.common.testing.RunnableSubject.ThrowingRunnable;
 import com.google.common.truth.FailureMetadata;
 import com.google.common.truth.Subject;
 import com.google.common.truth.ThrowableSubject;
@@ -25,11 +24,11 @@
         return RUNNABLE_SUBJECT_FACTORY;
     }
 
-    private final ThrowingRunnable actual;
+    private final ThrowingRunnable mActual;
 
     public RunnableSubject(FailureMetadata failureMetadata, ThrowingRunnable runnable) {
         super(failureMetadata, runnable);
-        this.actual = runnable;
+        this.mActual = runnable;
     }
 
     /**
@@ -53,14 +52,14 @@
 
     @SuppressWarnings("unchecked")
     private <E extends Throwable> E runAndCaptureOrFail(Class<E> clazz) {
-        if (actual == null) {
+        if (mActual == null) {
             failWithoutActual(fact("expected to throw", clazz.getName()),
                     simpleFact("but didn't run because it's null"));
             return null;
         }
 
         try {
-            actual.run();
+            mActual.run();
         } catch (Throwable ex) {
             if (!clazz.isInstance(ex)) {
                 check("thrownException()").that(ex).isInstanceOf(clazz); // fails
@@ -70,7 +69,7 @@
         }
 
         failWithoutActual(fact("expected to throw", clazz.getName()),
-                simpleFact("but ran to completion"), fact("runnable was", actual));
+                simpleFact("but ran to completion"), fact("runnable was", mActual));
         return null;
     }
 
@@ -83,28 +82,28 @@
      * exception.
      */
     public class ThrowsThenClause<E extends Throwable> {
-        private final E throwable;
-        private final String description;
+        private final E mThrowable;
+        private final String mDescription;
 
         private ThrowsThenClause(E throwable, String description) {
-            this.throwable = throwable;
-            this.description = description;
+            this.mThrowable = throwable;
+            this.mDescription = description;
         }
 
         public ThrowableSubject that() {
-            return check(description).that(throwable);
+            return check(mDescription).that(mThrowable);
         }
 
         public <C extends Throwable> ThrowsThenClause<C> causedByAnExceptionOfType(Class<C> clazz) {
-            if (!clazz.isInstance(throwable.getCause())) {
+            if (!clazz.isInstance(mThrowable.getCause())) {
                 that().hasCauseThat().isInstanceOf(clazz); // fails
                 return null;
             }
 
             @SuppressWarnings("unchecked")
-            C cause = (C) throwable.getCause();
+            C cause = (C) mThrowable.getCause();
 
-            return new ThrowsThenClause<>(cause, description + ".getCause()");
+            return new ThrowsThenClause<>(cause, mDescription + ".getCause()");
         }
 
         public void causedBy(Throwable cause) {
@@ -112,7 +111,7 @@
         }
 
         public E getCaught() {
-            return throwable;
+            return mThrowable;
         }
     }
 
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/testing/SessionTestUtils.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/testing/SessionTestUtils.java
index 9a6e8a5..bdb5c76 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/testing/SessionTestUtils.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/testing/SessionTestUtils.java
@@ -31,75 +31,76 @@
     private static final long DELAY_MS = 100L;
     private static final long SHORT_DELAY_MS = 25L;
 
-    private final InfraIntegrationScope scope;
-    private long currentDelay;
+    private final InfraIntegrationScope mScope;
+    private long mCurrentDelay;
 
     public SessionTestUtils(@RequestBehavior int requestBehavior) {
-        scope = new InfraIntegrationScope.Builder()
+        mScope =
+                new InfraIntegrationScope.Builder()
                         .setSchedulerApi(new FakeSchedulerApi(FakeThreadUtils.withoutThreadChecks())
                                                  .setRequestBehavior(requestBehavior))
                         .withTimeoutSessionConfiguration(TIMEOUT_MS)
                         .build();
-        currentDelay = DELAY_MS;
+        mCurrentDelay = DELAY_MS;
     }
 
     /** Shortens the delay on requests so that they complete before timeout. */
     public SessionTestUtils requestBeforeTimeout() {
-        currentDelay = SHORT_DELAY_MS;
+        mCurrentDelay = SHORT_DELAY_MS;
         return this;
     }
 
     /** Returns the {@link InfraIntegrationScope}. */
     public InfraIntegrationScope getScope() {
-        return scope;
+        return mScope;
     }
 
     private ViewDepthProvider createViewDepthProvider() {
         return new FakeViewDepthProvider().setChildViewDepth(
-                scope.getProtocolAdapter().getStreamContentId(REQUEST_1[1]));
+                mScope.getProtocolAdapter().getStreamContentId(REQUEST_1[1]));
     }
 
     /** Creates a new session and returns the {@link ModelProvider}. */
     public ModelProvider createNewSession() {
-        return scope.getModelProviderFactory().createNew(
+        return mScope.getModelProviderFactory().createNew(
                 createViewDepthProvider(), UiContext.getDefaultInstance());
     }
 
     /** Populates HEAD with data. */
     public void populateHead() {
-        scope.getFakeFeedRequestManager()
+        mScope.getFakeFeedRequestManager()
                 .queueResponse(ResponseBuilder.forClearAllWithCards(REQUEST_1).build())
                 .triggerRefresh(RequestReason.OPEN_WITHOUT_CONTENT,
-                        scope.getFeedSessionManager().getUpdateConsumer(
+                        mScope.getFeedSessionManager().getUpdateConsumer(
                                 MutationContext.EMPTY_CONTEXT));
     }
 
     /** Enqueues an error response and returns the delay in milliseconds. */
     public long queueError() {
-        scope.getFakeFeedRequestManager().queueError(currentDelay);
-        return currentDelay;
+        mScope.getFakeFeedRequestManager().queueError(mCurrentDelay);
+        return mCurrentDelay;
     }
 
     /** Enqueues a response and returns the delay in milliseconds. */
     public long queueRequest() {
-        scope.getFakeFeedRequestManager().queueResponse(
-                ResponseBuilder.forClearAllWithCards(REQUEST_2).build(), currentDelay);
-        return currentDelay;
+        mScope.getFakeFeedRequestManager().queueResponse(
+                ResponseBuilder.forClearAllWithCards(REQUEST_2).build(), mCurrentDelay);
+        return mCurrentDelay;
     }
 
     /** Enqueues an error response, triggers the refresh, and returns the delay in milliseconds. */
     public long startOutstandingRequestWithError() {
         long delayMs = queueError();
-        scope.getFakeFeedRequestManager().triggerRefresh(RequestReason.OPEN_WITHOUT_CONTENT,
-                scope.getFeedSessionManager().getUpdateConsumer(MutationContext.EMPTY_CONTEXT));
+        mScope.getFakeFeedRequestManager().triggerRefresh(RequestReason.OPEN_WITHOUT_CONTENT,
+                mScope.getFeedSessionManager().getUpdateConsumer(MutationContext.EMPTY_CONTEXT));
         return delayMs;
     }
 
     /** Enqueues a response, triggers the refresh, and returns the delay in milliseconds. */
     public long startOutstandingRequest() {
         long delayMs = queueRequest();
-        scope.getFakeFeedRequestManager().triggerRefresh(RequestReason.OPEN_WITHOUT_CONTENT,
-                scope.getFeedSessionManager().getUpdateConsumer(MutationContext.EMPTY_CONTEXT));
+        mScope.getFakeFeedRequestManager().triggerRefresh(RequestReason.OPEN_WITHOUT_CONTENT,
+                mScope.getFeedSessionManager().getUpdateConsumer(MutationContext.EMPTY_CONTEXT));
         return delayMs;
     }
 
@@ -108,7 +109,7 @@
         assertThat(rootChildren).hasSize(REQUEST_1.length);
         for (int i = 0; i < rootChildren.size(); i++) {
             assertThat(rootChildren.get(i).getContentId())
-                    .isEqualTo(scope.getProtocolAdapter().getStreamContentId(REQUEST_1[i]));
+                    .isEqualTo(mScope.getProtocolAdapter().getStreamContentId(REQUEST_1[i]));
         }
     }
 
@@ -117,7 +118,7 @@
         assertThat(rootChildren).hasSize(REQUEST_2.length);
         for (int i = 0; i < rootChildren.size(); i++) {
             assertThat(rootChildren.get(i).getContentId())
-                    .isEqualTo(scope.getProtocolAdapter().getStreamContentId(REQUEST_2[i]));
+                    .isEqualTo(mScope.getProtocolAdapter().getStreamContentId(REQUEST_2[i]));
         }
     }
 
@@ -133,7 +134,7 @@
      * Asserts that no runnables are pending in the {@link TaskQueue} or {@link MainThreadRunner}.
      */
     public void assertWorkComplete() {
-        assertThat(scope.getTaskQueue().hasBacklog()).isFalse();
-        assertThat(scope.getFakeMainThreadRunner().hasPendingTasks()).isFalse();
+        assertThat(mScope.getTaskQueue().hasBacklog()).isFalse();
+        assertThat(mScope.getFakeMainThreadRunner().hasPendingTasks()).isFalse();
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/time/TimingUtils.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/time/TimingUtils.java
index 5977358..032e3736 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/time/TimingUtils.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/time/TimingUtils.java
@@ -32,16 +32,16 @@
     private static final String UI_THREAD = "ui";
     private static final int MAX_TO_DUMP = 10;
 
-    private static int bgThreadId = 1;
+    private static int sBgThreadId = 1;
 
-    private final ThreadUtils threadUtils = new ThreadUtils();
-    private final Object lock = new Object();
+    private final ThreadUtils mThreadUtils = new ThreadUtils();
+    private final Object mLock = new Object();
 
     @GuardedBy("lock")
-    private final Queue<ThreadState> threadDumps = new ArrayDeque<>(MAX_TO_DUMP);
+    private final Queue<ThreadState> mThreadDumps = new ArrayDeque<>(MAX_TO_DUMP);
 
     @GuardedBy("lock")
-    private final LongSparseArray<ThreadStack> threadStacks = new LongSparseArray<>();
+    private final LongSparseArray<ThreadStack> mThreadStacks = new LongSparseArray<>();
 
     /**
      * ElapsedTimeTracker works similar to Stopwatch. This is used to track elapsed time for some
@@ -56,16 +56,16 @@
      * thrown if the class isn't used correctly.
      */
     public static class ElapsedTimeTracker {
-        private final ThreadStack threadStack;
-        private final String source;
+        private final ThreadStack mThreadStack;
+        private final String mSource;
 
-        private final long startTime;
-        private long endTime;
+        private final long mStartTime;
+        private long mEndTime;
 
         private ElapsedTimeTracker(ThreadStack threadStack, String source) {
-            this.threadStack = threadStack;
-            this.source = source;
-            startTime = System.nanoTime();
+            this.mThreadStack = threadStack;
+            this.mSource = source;
+            mStartTime = System.nanoTime();
         }
 
         /**
@@ -75,14 +75,14 @@
          * <p>For example: dumper.forKey(arg[0]).value(arg[1])
          */
         public void stop(Object... args) {
-            if (endTime > 0) {
+            if (mEndTime > 0) {
                 throw new IllegalStateException("ElapsedTimeTracker has already been stopped.");
             }
-            endTime = System.nanoTime();
-            TrackerState trackerState =
-                    new TrackerState(endTime - startTime, source, args, threadStack.stack.size());
-            threadStack.addTrackerState(trackerState);
-            threadStack.popElapsedTimeTracker(this);
+            mEndTime = System.nanoTime();
+            TrackerState trackerState = new TrackerState(
+                    mEndTime - mStartTime, mSource, args, mThreadStack.mStack.size());
+            mThreadStack.addTrackerState(trackerState);
+            mThreadStack.popElapsedTimeTracker(this);
         }
     }
 
@@ -92,16 +92,16 @@
      */
     public ElapsedTimeTracker getElapsedTimeTracker(String source) {
         long threadId = Thread.currentThread().getId();
-        synchronized (lock) {
-            ThreadStack timerStack = threadStacks.get(threadId);
+        synchronized (mLock) {
+            ThreadStack timerStack = mThreadStacks.get(threadId);
             if (timerStack == null) {
                 timerStack = new ThreadStack(
-                        threadUtils.isMainThread() ? UI_THREAD : BACKGROUND_THREAD + bgThreadId++,
+                        mThreadUtils.isMainThread() ? UI_THREAD : BACKGROUND_THREAD + sBgThreadId++,
                         false);
-                threadStacks.put(threadId, timerStack);
+                mThreadStacks.put(threadId, timerStack);
             }
             ElapsedTimeTracker timeTracker = new ElapsedTimeTracker(timerStack, source);
-            timerStack.stack.push(timeTracker);
+            timerStack.mStack.push(timeTracker);
             return timeTracker;
         }
     }
@@ -113,39 +113,41 @@
      */
     public void pinThread(Thread thread, String name) {
         ThreadStack timerStack = new ThreadStack(name, true);
-        synchronized (lock) {
-            threadStacks.put(thread.getId(), timerStack);
+        synchronized (mLock) {
+            mThreadStacks.put(thread.getId(), timerStack);
         }
     }
 
     @Override
     public void dump(Dumper dumper) {
         dumper.title(TAG);
-        synchronized (lock) {
-            for (ThreadState threadState : threadDumps) {
+        synchronized (mLock) {
+            for (ThreadState threadState : mThreadDumps) {
                 dumpThreadState(dumper, threadState);
             }
         }
     }
 
     private void dumpThreadState(Dumper dumper, ThreadState threadState) {
-        if (threadState.trackerStates.isEmpty()) {
+        if (threadState.mTrackerStates.isEmpty()) {
             Logger.w(TAG, "Found Empty TrackerState List");
             return;
         }
-        dumper.forKey("thread").value(threadState.threadName);
-        dumper.forKey("timeStamp").value(threadState.date).compactPrevious();
-        for (int i = threadState.trackerStates.size() - 1; i >= 0; i--) {
-            TrackerState trackerState = threadState.trackerStates.get(i);
+        dumper.forKey("thread").value(threadState.mThreadName);
+        dumper.forKey("timeStamp").value(threadState.mDate).compactPrevious();
+        for (int i = threadState.mTrackerStates.size() - 1; i >= 0; i--) {
+            TrackerState trackerState = threadState.mTrackerStates.get(i);
             Dumper child = dumper.getChildDumper();
-            child.forKey("time", trackerState.indent - 1)
-                    .value(trackerState.duration / 1000000 + "ms");
-            child.forKey("source").value(trackerState.source).compactPrevious();
-            if (trackerState.args != null && trackerState.args.length > 0) {
-                for (int j = 0; j < trackerState.args.length; j++) {
-                    String key = trackerState.args[j++].toString();
-                    Object value = (j < trackerState.args.length) ? trackerState.args[j] : "";
-                    child.forKey(key, trackerState.indent - 1).valueObject(value).compactPrevious();
+            child.forKey("time", trackerState.mIndent - 1)
+                    .value(trackerState.mDuration / 1000000 + "ms");
+            child.forKey("source").value(trackerState.mSource).compactPrevious();
+            if (trackerState.mArgs != null && trackerState.mArgs.length > 0) {
+                for (int j = 0; j < trackerState.mArgs.length; j++) {
+                    String key = trackerState.mArgs[j++].toString();
+                    Object value = (j < trackerState.mArgs.length) ? trackerState.mArgs[j] : "";
+                    child.forKey(key, trackerState.mIndent - 1)
+                            .valueObject(value)
+                            .compactPrevious();
                 }
             }
         }
@@ -153,65 +155,65 @@
 
     /** Definition of a Stack of {@link ElapsedTimeTracker} instances. */
     private class ThreadStack {
-        final String name;
-        final Stack<ElapsedTimeTracker> stack = new Stack<>();
-        private List<TrackerState> trackerStates = new ArrayList<>();
-        final boolean pin;
+        final String mName;
+        final Stack<ElapsedTimeTracker> mStack = new Stack<>();
+        private List<TrackerState> mTrackerStates = new ArrayList<>();
+        final boolean mPin;
 
         ThreadStack(String name, boolean pin) {
-            this.name = name;
-            this.pin = pin;
+            this.mName = name;
+            this.mPin = pin;
         }
 
         void addTrackerState(TrackerState trackerState) {
-            trackerStates.add(trackerState);
+            mTrackerStates.add(trackerState);
         }
 
         void popElapsedTimeTracker(ElapsedTimeTracker tracker) {
-            ElapsedTimeTracker top = stack.peek();
+            ElapsedTimeTracker top = mStack.peek();
             if (top != tracker) {
-                int pos = stack.search(tracker);
+                int pos = mStack.search(tracker);
                 if (pos == -1) {
                     Logger.w(TAG, "Trying to Pop non-top of stack timer, ignoring");
                     return;
                 } else {
                     int c = 0;
-                    while (stack.peek() != tracker) {
+                    while (mStack.peek() != tracker) {
                         c++;
-                        stack.pop();
+                        mStack.pop();
                     }
                     Logger.w(TAG, "Pop TimingTracker which was not the current top, popped % items",
                             c);
                 }
             }
-            stack.pop();
-            if (stack.isEmpty()) {
+            mStack.pop();
+            if (mStack.isEmpty()) {
                 StringBuilder sb = new StringBuilder();
-                TrackerState ts = trackerStates.get(trackerStates.size() - 1);
-                for (int i = 0; i < ts.args.length; i++) {
-                    String key = ts.args[i++].toString();
-                    Object value = (i < ts.args.length) ? ts.args[i] : "";
+                TrackerState ts = mTrackerStates.get(mTrackerStates.size() - 1);
+                for (int i = 0; i < ts.mArgs.length; i++) {
+                    String key = ts.mArgs[i++].toString();
+                    Object value = (i < ts.mArgs.length) ? ts.mArgs[i] : "";
                     if (!TextUtils.isEmpty(key)) {
                         sb.append(key).append(" : ").append(value);
                     } else {
                         sb.append(value);
                     }
-                    if ((i + 1) < ts.args.length) {
+                    if ((i + 1) < ts.mArgs.length) {
                         sb.append(" | ");
                     }
                 }
                 Logger.i(TAG, "Task Timing %3sms, thread %s | %s",
-                        ((tracker.endTime - tracker.startTime) / 1000000), tracker.threadStack.name,
-                        sb);
-                synchronized (lock) {
-                    if (threadDumps.size() == MAX_TO_DUMP) {
+                        ((tracker.mEndTime - tracker.mStartTime) / 1000000),
+                        tracker.mThreadStack.mName, sb);
+                synchronized (mLock) {
+                    if (mThreadDumps.size() == MAX_TO_DUMP) {
                         // Before adding a new tracker state, remove the oldest one.
-                        threadDumps.remove();
+                        mThreadDumps.remove();
                     }
-                    threadDumps.add(new ThreadState(trackerStates, name));
-                    trackerStates = new ArrayList<>();
-                    if (!pin) {
-                        threadStacks.remove(Thread.currentThread().getId());
+                    mThreadDumps.add(new ThreadState(mTrackerStates, mName));
+                    mTrackerStates = new ArrayList<>();
+                    if (!mPin) {
+                        mThreadStacks.remove(Thread.currentThread().getId());
                     }
                 }
             }
@@ -220,29 +222,29 @@
 
     /** State associated with a thread */
     private static class ThreadState {
-        final List<TrackerState> trackerStates;
-        final String threadName;
-        final Date date;
+        final List<TrackerState> mTrackerStates;
+        final String mThreadName;
+        final Date mDate;
 
         ThreadState(List<TrackerState> trackerStates, String threadName) {
-            this.trackerStates = trackerStates;
-            this.threadName = threadName;
-            date = new Date();
+            this.mTrackerStates = trackerStates;
+            this.mThreadName = threadName;
+            mDate = new Date();
         }
     }
 
     /** State associated with a completed ElapsedTimeTracker */
     private static class TrackerState {
-        final long duration;
-        final String source;
-        final Object[] args;
-        final int indent;
+        final long mDuration;
+        final String mSource;
+        final Object[] mArgs;
+        final int mIndent;
 
         TrackerState(long duration, String source, Object[] args, int indent) {
-            this.duration = duration;
-            this.source = source;
-            this.args = args;
-            this.indent = indent;
+            this.mDuration = duration;
+            this.mSource = source;
+            this.mArgs = args;
+            this.mIndent = indent;
         }
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/time/testing/FakeClock.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/time/testing/FakeClock.java
index 038a92ab..413bf14 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/time/testing/FakeClock.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/common/time/testing/FakeClock.java
@@ -15,16 +15,16 @@
 public class FakeClock extends ObservableNotifier<ClockUpdateListener> implements Clock {
     private static final String TAG = "FakeClock";
 
-    private long currentTime;
-    private long elapsedRealtimeMs;
+    private long mCurrentTime;
+    private long mElapsedRealtimeMs;
 
     public FakeClock() {
         this(0, 0);
     }
 
     public FakeClock(long currentTime, long elapsedRealtime) {
-        this.currentTime = currentTime;
-        elapsedRealtimeMs = elapsedRealtime;
+        this.mCurrentTime = currentTime;
+        mElapsedRealtimeMs = elapsedRealtime;
     }
 
     /**
@@ -40,8 +40,8 @@
      * convenience.
      */
     public FakeClock set(long currentTime, long elapsedRealtime) {
-        this.currentTime = currentTime;
-        elapsedRealtimeMs = elapsedRealtime;
+        this.mCurrentTime = currentTime;
+        mElapsedRealtimeMs = elapsedRealtime;
         onClockUpdated(currentTime, elapsedRealtime);
         return this;
     }
@@ -52,11 +52,11 @@
 
     public void advance(long millis) {
         assertThat(millis).isAtLeast(0L);
-        currentTime += millis;
-        elapsedRealtimeMs += millis;
+        mCurrentTime += millis;
+        mElapsedRealtimeMs += millis;
 
-        Logger.i(TAG, "Advancing clock to %d", currentTime);
-        onClockUpdated(currentTime, elapsedRealtimeMs);
+        Logger.i(TAG, "Advancing clock to %d", mCurrentTime);
+        onClockUpdated(mCurrentTime, mElapsedRealtimeMs);
     }
 
     /**
@@ -69,17 +69,17 @@
 
     @Override
     public long currentTimeMillis() {
-        return currentTime;
+        return mCurrentTime;
     }
 
     @Override
     public long elapsedRealtime() {
-        return elapsedRealtimeMs;
+        return mElapsedRealtimeMs;
     }
 
     @Override
     public long uptimeMillis() {
-        return elapsedRealtimeMs;
+        return mElapsedRealtimeMs;
     }
 
     private void onClockUpdated(long currentTime, long elapsedRealtime) {
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedactionmanager/FeedActionManagerImpl.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedactionmanager/FeedActionManagerImpl.java
index ff88659b..5cbf6375 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedactionmanager/FeedActionManagerImpl.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedactionmanager/FeedActionManagerImpl.java
@@ -32,22 +32,22 @@
 
 /** Default implementation of {@link ActionManager} */
 public class FeedActionManagerImpl implements ActionManager {
-    private final FeedSessionManager feedSessionManager;
-    private final Store store;
-    private final ThreadUtils threadUtils;
-    private final TaskQueue taskQueue;
-    private final MainThreadRunner mainThreadRunner;
-    private final Clock clock;
+    private final FeedSessionManager mFeedSessionManager;
+    private final Store mStore;
+    private final ThreadUtils mThreadUtils;
+    private final TaskQueue mTaskQueue;
+    private final MainThreadRunner mMainThreadRunner;
+    private final Clock mClock;
 
     public FeedActionManagerImpl(FeedSessionManager feedSessionManager, Store store,
             ThreadUtils threadUtils, TaskQueue taskQueue, MainThreadRunner mainThreadRunner,
             Clock clock) {
-        this.feedSessionManager = feedSessionManager;
-        this.store = store;
-        this.threadUtils = threadUtils;
-        this.taskQueue = taskQueue;
-        this.mainThreadRunner = mainThreadRunner;
-        this.clock = clock;
+        this.mFeedSessionManager = feedSessionManager;
+        this.mStore = store;
+        this.mThreadUtils = threadUtils;
+        this.mTaskQueue = taskQueue;
+        this.mMainThreadRunner = mainThreadRunner;
+        this.mClock = clock;
     }
 
     @Override
@@ -56,8 +56,8 @@
             /*@Nullable*/ String sessionId) {
         executeStreamDataOperations(streamDataOperations, sessionId);
         // Store the dismissLocal actions
-        taskQueue.execute(Task.DISMISS_LOCAL, TaskType.BACKGROUND, () -> {
-            LocalActionMutation localActionMutation = store.editLocalActions();
+        mTaskQueue.execute(Task.DISMISS_LOCAL, TaskType.BACKGROUND, () -> {
+            LocalActionMutation localActionMutation = mStore.editLocalActions();
             for (String contentId : contentIds) {
                 localActionMutation.add(ActionType.DISMISS, contentId);
             }
@@ -73,25 +73,25 @@
 
     @Override
     public void createAndUploadAction(String contentId, ActionPayload payload) {
-        taskQueue.execute(Task.CREATE_AND_UPLOAD, TaskType.BACKGROUND, () -> {
+        mTaskQueue.execute(Task.CREATE_AND_UPLOAD, TaskType.BACKGROUND, () -> {
             HashSet<StreamUploadableAction> actionSet = new HashSet<>();
-            long currentTime = TimeUnit.MILLISECONDS.toSeconds(clock.currentTimeMillis());
+            long currentTime = TimeUnit.MILLISECONDS.toSeconds(mClock.currentTimeMillis());
             actionSet.add(StreamUploadableAction.newBuilder()
                                   .setFeatureContentId(contentId)
                                   .setPayload(payload)
                                   .setTimestampSeconds(currentTime)
                                   .build());
-            feedSessionManager.triggerUploadActions(actionSet);
+            mFeedSessionManager.triggerUploadActions(actionSet);
         });
     }
 
     @Override
     public void uploadAllActionsAndUpdateUrl(
             String url, String consistencyTokenQueryParamName, Consumer<String> consumer) {
-        taskQueue.execute(Task.UPLOAD_ALL_ACTIONS_FOR_URL, TaskType.BACKGROUND, () -> {
+        mTaskQueue.execute(Task.UPLOAD_ALL_ACTIONS_FOR_URL, TaskType.BACKGROUND, () -> {
             // TODO: figure out spinner and/or timeout conditions
-            feedSessionManager.fetchActionsAndUpload(result -> {
-                mainThreadRunner.execute("Open url", () -> {
+            mFeedSessionManager.fetchActionsAndUpload(result -> {
+                mMainThreadRunner.execute("Open url", () -> {
                     if (result.isSuccessful()) {
                         consumer.accept(updateParam(url, consistencyTokenQueryParamName,
                                 result.getValue().toByteArray()));
@@ -112,14 +112,14 @@
 
     private void executeStreamDataOperations(
             List<StreamDataOperation> streamDataOperations, /*@Nullable*/ String sessionId) {
-        threadUtils.checkMainThread();
+        mThreadUtils.checkMainThread();
 
         MutationContext.Builder mutationContextBuilder =
                 new MutationContext.Builder().setUserInitiated(true);
         if (sessionId != null) {
             mutationContextBuilder.setRequestingSessionId(sessionId);
         }
-        feedSessionManager.getUpdateConsumer(mutationContextBuilder.build())
+        mFeedSessionManager.getUpdateConsumer(mutationContextBuilder.build())
                 .accept(Result.success(Model.of(streamDataOperations)));
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedactionparser/FeedActionParser.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedactionparser/FeedActionParser.java
index 66454cc..871c94d0 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedactionparser/FeedActionParser.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedactionparser/FeedActionParser.java
@@ -45,26 +45,26 @@
 public final class FeedActionParser implements ActionParser {
     private static final String TAG = "FeedActionParser";
 
-    private final PietFeedActionPayloadRetriever pietFeedActionPayloadRetriever;
-    private final ProtocolAdapter protocolAdapter;
-    private final Supplier</*@Nullable*/ ContentMetadata> contentMetadata;
-    private final BasicLoggingApi basicLoggingApi;
+    private final PietFeedActionPayloadRetriever mPietFeedActionPayloadRetriever;
+    private final ProtocolAdapter mProtocolAdapter;
+    private final Supplier</*@Nullable*/ ContentMetadata> mContentMetadata;
+    private final BasicLoggingApi mBasicLoggingApi;
 
     FeedActionParser(ProtocolAdapter protocolAdapter,
             PietFeedActionPayloadRetriever pietFeedActionPayloadRetriever,
             Supplier</*@Nullable*/ ContentMetadata> contentMetadata,
             BasicLoggingApi basicLoggingApi) {
-        this.protocolAdapter = protocolAdapter;
-        this.pietFeedActionPayloadRetriever = pietFeedActionPayloadRetriever;
-        this.contentMetadata = contentMetadata;
-        this.basicLoggingApi = basicLoggingApi;
+        this.mProtocolAdapter = protocolAdapter;
+        this.mPietFeedActionPayloadRetriever = pietFeedActionPayloadRetriever;
+        this.mContentMetadata = contentMetadata;
+        this.mBasicLoggingApi = basicLoggingApi;
     }
 
     @Override
     public void parseAction(Action action, StreamActionApi streamActionApi, View view,
             LogData logData, @ActionSource int actionSource) {
         FeedActionPayload feedActionPayload =
-                pietFeedActionPayloadRetriever.getFeedActionPayload(action);
+                mPietFeedActionPayloadRetriever.getFeedActionPayload(action);
         if (feedActionPayload == null) {
             Logger.w(TAG, "Unable to get FeedActionPayload from PietFeedActionPayloadRetriever");
             return;
@@ -106,7 +106,7 @@
                 }
 
                 Result<List<StreamDataOperation>> streamDataOperationsResult =
-                        protocolAdapter.createOperations(
+                        mProtocolAdapter.createOperations(
                                 feedActionMetadata.getDismissData().getDataOperationsList());
 
                 if (!streamDataOperationsResult.isSuccessful()) {
@@ -119,7 +119,7 @@
                 }
                 // TODO: Once we start logging DISMISS via the feed action end point, DISMISS
                 // and DISMISS_LOCAL should not be handled in the exact same way.
-                streamActionApi.dismiss(protocolAdapter.getStreamContentId(
+                streamActionApi.dismiss(mProtocolAdapter.getStreamContentId(
                                                 feedActionMetadata.getDismissData().getContentId()),
                         streamDataOperationsResult.getValue(),
                         feedActionMetadata.getDismissData().getUndoAction(),
@@ -135,8 +135,9 @@
                 }
 
                 Result<List<StreamDataOperation>> streamDataOperationResult =
-                        protocolAdapter.createOperations(feedActionMetadata.getNotInterestedInData()
-                                                                 .getDataOperationsList());
+                        mProtocolAdapter.createOperations(
+                                feedActionMetadata.getNotInterestedInData()
+                                        .getDataOperationsList());
 
                 if (!streamDataOperationResult.isSuccessful()) {
                     Logger.e(TAG,
@@ -156,7 +157,7 @@
                     Logger.e(TAG, "Cannot download: StreamActionApi does not support it");
                     break;
                 }
-                ContentMetadata contentMetadata = this.contentMetadata.get();
+                ContentMetadata contentMetadata = this.mContentMetadata.get();
                 if (contentMetadata == null) {
                     Logger.e(TAG, " Cannot download: no ContentMetadata");
                     break;
@@ -229,7 +230,7 @@
         }
 
         if (!openUrlData.hasUrl()) {
-            basicLoggingApi.onInternalError(InternalFeedError.NO_URL_FOR_OPEN);
+            mBasicLoggingApi.onInternalError(InternalFeedError.NO_URL_FOR_OPEN);
             Logger.e(TAG, "Cannot open URL action: %s, no URL available.", urlType);
             return;
         }
@@ -300,7 +301,7 @@
                 // and DISMISS_LOCAL should not be handled in the exact same way.
                 return streamActionApi.canDismiss();
             case DOWNLOAD:
-                return contentMetadata.get() != null && streamActionApi.canDownloadUrl();
+                return mContentMetadata.get() != null && streamActionApi.canDownloadUrl();
             case LEARN_MORE:
                 return streamActionApi.canLearnMore();
             case NOT_INTERESTED_IN:
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedactionparser/FeedActionParserFactory.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedactionparser/FeedActionParserFactory.java
index a2c5dd0..96c3e3e 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedactionparser/FeedActionParserFactory.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedactionparser/FeedActionParserFactory.java
@@ -14,20 +14,20 @@
 
 /** Default factory for the default {@link ActionParser} implementation. */
 public final class FeedActionParserFactory implements ActionParserFactory {
-    private final ProtocolAdapter protocolAdapter;
-    private final PietFeedActionPayloadRetriever pietFeedActionPayloadRetriever;
-    private final BasicLoggingApi basicLoggingApi;
+    private final ProtocolAdapter mProtocolAdapter;
+    private final PietFeedActionPayloadRetriever mPietFeedActionPayloadRetriever;
+    private final BasicLoggingApi mBasicLoggingApi;
 
     public FeedActionParserFactory(
             ProtocolAdapter protocolAdapter, BasicLoggingApi basicLoggingApi) {
-        this.protocolAdapter = protocolAdapter;
-        this.pietFeedActionPayloadRetriever = new PietFeedActionPayloadRetriever();
-        this.basicLoggingApi = basicLoggingApi;
+        this.mProtocolAdapter = protocolAdapter;
+        this.mPietFeedActionPayloadRetriever = new PietFeedActionPayloadRetriever();
+        this.mBasicLoggingApi = basicLoggingApi;
     }
 
     @Override
     public ActionParser build(Supplier</*@Nullable*/ ContentMetadata> contentMetadataSupplier) {
-        return new FeedActionParser(protocolAdapter, pietFeedActionPayloadRetriever,
-                contentMetadataSupplier, basicLoggingApi);
+        return new FeedActionParser(mProtocolAdapter, mPietFeedActionPayloadRetriever,
+                contentMetadataSupplier, mBasicLoggingApi);
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedactionparser/internal/TooltipInfoImpl.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedactionparser/internal/TooltipInfoImpl.java
index 9f2e7f97..6f541d0 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedactionparser/internal/TooltipInfoImpl.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedactionparser/internal/TooltipInfoImpl.java
@@ -12,19 +12,19 @@
  * TooltipInfo}.
  */
 public class TooltipInfoImpl implements TooltipInfo {
-    private final String label;
-    private final String accessibilityLabel;
+    private final String mLabel;
+    private final String mAccessibilityLabel;
     @FeatureName
-    private final String featureName;
-    private final int topInset;
-    private final int bottomInset;
+    private final String mFeatureName;
+    private final int mTopInset;
+    private final int mBottomInset;
 
     public TooltipInfoImpl(TooltipData tooltipData) {
-        this.label = tooltipData.getLabel();
-        this.accessibilityLabel = tooltipData.getAccessibilityLabel();
-        this.featureName = convert(tooltipData.getFeatureName());
-        this.topInset = tooltipData.getInsets().getTop();
-        this.bottomInset = tooltipData.getInsets().getBottom();
+        this.mLabel = tooltipData.getLabel();
+        this.mAccessibilityLabel = tooltipData.getAccessibilityLabel();
+        this.mFeatureName = convert(tooltipData.getFeatureName());
+        this.mTopInset = tooltipData.getInsets().getTop();
+        this.mBottomInset = tooltipData.getInsets().getBottom();
     }
 
     /** Converts the type in {@link TooltipData#FeatureName} to {@link TooltipInfo#FeatureName}. */
@@ -36,27 +36,27 @@
 
     @Override
     public String getLabel() {
-        return label;
+        return mLabel;
     }
 
     @Override
     public String getAccessibilityLabel() {
-        return accessibilityLabel;
+        return mAccessibilityLabel;
     }
 
     @Override
     @FeatureName
     public String getFeatureName() {
-        return featureName;
+        return mFeatureName;
     }
 
     @Override
     public int getTopInset() {
-        return topInset;
+        return mTopInset;
     }
 
     @Override
     public int getBottomInset() {
-        return bottomInset;
+        return mBottomInset;
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedactionreader/FeedActionReader.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedactionreader/FeedActionReader.java
index 14b3816..b022cf6f 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedactionreader/FeedActionReader.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedactionreader/FeedActionReader.java
@@ -30,37 +30,37 @@
 public final class FeedActionReader implements ActionReader {
     private static final String TAG = "FeedActionReader";
 
-    private final Store store;
-    private final Clock clock;
-    private final ProtocolAdapter protocolAdapter;
-    private final TaskQueue taskQueue;
-    private final long dismissActionTTLSeconds;
-    private final double minValidActionRatio;
+    private final Store mStore;
+    private final Clock mClock;
+    private final ProtocolAdapter mProtocolAdapter;
+    private final TaskQueue mTaskQueue;
+    private final long mDismissActionTTLSeconds;
+    private final double mMinValidActionRatio;
 
     public FeedActionReader(Store store, Clock clock, ProtocolAdapter protocolAdapter,
             TaskQueue taskQueue, Configuration configuration) {
-        this.store = store;
-        this.clock = clock;
-        this.protocolAdapter = protocolAdapter;
-        this.taskQueue = taskQueue;
-        this.dismissActionTTLSeconds = configuration.getValueOrDefault(
+        this.mStore = store;
+        this.mClock = clock;
+        this.mProtocolAdapter = protocolAdapter;
+        this.mTaskQueue = taskQueue;
+        this.mDismissActionTTLSeconds = configuration.getValueOrDefault(
                 ConfigKey.DEFAULT_ACTION_TTL_SECONDS, TimeUnit.DAYS.toSeconds(3L));
-        minValidActionRatio =
+        mMinValidActionRatio =
                 configuration.getValueOrDefault(ConfigKey.MINIMUM_VALID_ACTION_RATIO, 0.3);
     }
 
     @Override
     public Result<List<DismissActionWithSemanticProperties>>
     getDismissActionsWithSemanticProperties() {
-        Result<List<StreamLocalAction>> dismissActionsResult = store.getAllDismissLocalActions();
+        Result<List<StreamLocalAction>> dismissActionsResult = mStore.getAllDismissLocalActions();
         if (!dismissActionsResult.isSuccessful()) {
             Logger.e(TAG, "Error fetching dismiss actions from store");
             return Result.failure();
         }
         List<StreamLocalAction> dismissActions = dismissActionsResult.getValue();
         Set<String> contentIds = new HashSet<>(dismissActions.size());
-        long minValidTime = TimeUnit.MILLISECONDS.toSeconds(clock.currentTimeMillis())
-                - dismissActionTTLSeconds;
+        long minValidTime = TimeUnit.MILLISECONDS.toSeconds(mClock.currentTimeMillis())
+                - mDismissActionTTLSeconds;
         for (StreamLocalAction dismissAction : dismissActions) {
             if (dismissAction.getTimestampSeconds() > minValidTime) {
                 contentIds.add(dismissAction.getFeatureContentId());
@@ -70,13 +70,13 @@
         // Clean up if necessary
         // Note that since we're using a Set, it's possible this will trigger prematurely due to
         // duplicates not being counted as valid.
-        if ((double) contentIds.size() / dismissActions.size() < minValidActionRatio) {
-            taskQueue.execute(Task.LOCAL_ACTION_GC, TaskType.BACKGROUND,
-                    store.triggerLocalActionGc(dismissActions, new ArrayList<>(contentIds)));
+        if ((double) contentIds.size() / dismissActions.size() < mMinValidActionRatio) {
+            mTaskQueue.execute(Task.LOCAL_ACTION_GC, TaskType.BACKGROUND,
+                    mStore.triggerLocalActionGc(dismissActions, new ArrayList<>(contentIds)));
         }
 
         Result<List<SemanticPropertiesWithId>> semanticPropertiesResult =
-                store.getSemanticProperties(new ArrayList<>(contentIds));
+                mStore.getSemanticProperties(new ArrayList<>(contentIds));
         if (!semanticPropertiesResult.isSuccessful()) {
             return Result.failure();
         }
@@ -86,7 +86,7 @@
         for (SemanticPropertiesWithId semanticPropertiesWithId :
                 semanticPropertiesResult.getValue()) {
             Result<ContentId> wireContentIdResult =
-                    protocolAdapter.getWireContentId(semanticPropertiesWithId.contentId);
+                    mProtocolAdapter.getWireContentId(semanticPropertiesWithId.contentId);
             if (!wireContentIdResult.isSuccessful()) {
                 Logger.e(TAG, "Error converting to wire result for contentId: %s",
                         semanticPropertiesWithId.contentId);
@@ -99,7 +99,7 @@
             contentIds.remove(semanticPropertiesWithId.contentId);
         }
         for (String contentId : contentIds) {
-            Result<ContentId> wireContentIdResult = protocolAdapter.getWireContentId(contentId);
+            Result<ContentId> wireContentIdResult = mProtocolAdapter.getWireContentId(contentId);
             if (!wireContentIdResult.isSuccessful()) {
                 Logger.e(TAG, "Error converting to wire result for contentId: %s", contentId);
                 continue;
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedapplifecyclelistener/FeedAppLifecycleListener.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedapplifecyclelistener/FeedAppLifecycleListener.java
index f1afb8a..c2eb545 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedapplifecyclelistener/FeedAppLifecycleListener.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedapplifecyclelistener/FeedAppLifecycleListener.java
@@ -15,22 +15,22 @@
         extends FeedObservable<FeedLifecycleListener> implements AppLifecycleListener {
     private static final String TAG = "FeedAppLifecycleLstnr";
 
-    private final ThreadUtils threadUtils;
+    private final ThreadUtils mThreadUtils;
 
     public FeedAppLifecycleListener(ThreadUtils threadUtils) {
-        this.threadUtils = threadUtils;
+        this.mThreadUtils = threadUtils;
     }
 
     @Override
     public void onEnterForeground() {
-        threadUtils.checkMainThread();
+        mThreadUtils.checkMainThread();
         Logger.i(TAG, "onEnterForeground called");
         dispatchLifecycleEvent(LifecycleEvent.ENTER_FOREGROUND);
     }
 
     @Override
     public void onEnterBackground() {
-        threadUtils.checkMainThread();
+        mThreadUtils.checkMainThread();
         Logger.i(TAG, "onEnterBackground called");
         dispatchLifecycleEvent(LifecycleEvent.ENTER_BACKGROUND);
     }
@@ -38,27 +38,27 @@
     @Override
     public void onClearAll() {
         Logger.i(TAG, "onClearAll called");
-        threadUtils.checkMainThread();
+        mThreadUtils.checkMainThread();
         dispatchLifecycleEvent(LifecycleEvent.CLEAR_ALL);
     }
 
     @Override
     public void onClearAllWithRefresh() {
-        threadUtils.checkMainThread();
+        mThreadUtils.checkMainThread();
         Logger.i(TAG, "onClearAllWithRefresh called");
         dispatchLifecycleEvent(LifecycleEvent.CLEAR_ALL_WITH_REFRESH);
     }
 
     @Override
     public void initialize() {
-        threadUtils.checkMainThread();
+        mThreadUtils.checkMainThread();
         Logger.i(TAG, "initialize called");
         dispatchLifecycleEvent(LifecycleEvent.INITIALIZE);
     }
 
     private void dispatchLifecycleEvent(@LifecycleEvent String event) {
-        synchronized (observers) {
-            for (FeedLifecycleListener listener : observers) {
+        synchronized (mObservers) {
+            for (FeedLifecycleListener listener : mObservers) {
                 listener.onLifecycleEvent(event);
             }
         }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedknowncontent/FeedKnownContentImpl.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedknowncontent/FeedKnownContentImpl.java
index d26449a..498377b 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedknowncontent/FeedKnownContentImpl.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedknowncontent/FeedKnownContentImpl.java
@@ -23,24 +23,24 @@
 /** Default implementation of the {@link KnownContent}. */
 public final class FeedKnownContentImpl implements FeedKnownContent {
     private static final String TAG = "FeedKnownContentImpl";
-    private final FeedSessionManager feedSessionManager;
-    private final Set<KnownContent.Listener> listeners = new HashSet<>();
-    private final MainThreadRunner mainThreadRunner;
-    private final ThreadUtils threadUtils;
-    private final KnownContent.Listener listener;
+    private final FeedSessionManager mFeedSessionManager;
+    private final Set<KnownContent.Listener> mListeners = new HashSet<>();
+    private final MainThreadRunner mMainThreadRunner;
+    private final ThreadUtils mThreadUtils;
+    private final KnownContent.Listener mListener;
 
     @SuppressWarnings("nullness:method.invocation.invalid")
     public FeedKnownContentImpl(FeedSessionManager feedSessionManager,
             MainThreadRunner mainThreadRunner, ThreadUtils threadUtils) {
-        this.feedSessionManager = feedSessionManager;
-        this.mainThreadRunner = mainThreadRunner;
-        this.threadUtils = threadUtils;
+        this.mFeedSessionManager = feedSessionManager;
+        this.mMainThreadRunner = mainThreadRunner;
+        this.mThreadUtils = threadUtils;
 
-        this.listener = new KnownContent.Listener() {
+        this.mListener = new KnownContent.Listener() {
             @Override
             public void onContentRemoved(List<ContentRemoval> contentRemoved) {
                 runOnMainThread(TAG + " onContentRemoved", () -> {
-                    for (KnownContent.Listener knownContentListener : listeners) {
+                    for (KnownContent.Listener knownContentListener : mListeners) {
                         knownContentListener.onContentRemoved(contentRemoved);
                     }
                 });
@@ -49,7 +49,7 @@
             @Override
             public void onNewContentReceived(boolean isNewRefresh, long contentCreationDateTimeMs) {
                 runOnMainThread(TAG + " onNewContentReceived", () -> {
-                    for (KnownContent.Listener knownContentListener : listeners) {
+                    for (KnownContent.Listener knownContentListener : mListeners) {
                         knownContentListener.onNewContentReceived(
                                 isNewRefresh, contentCreationDateTimeMs);
                     }
@@ -57,12 +57,12 @@
             }
         };
 
-        feedSessionManager.setKnownContentListener(this.listener);
+        feedSessionManager.setKnownContentListener(this.mListener);
     }
 
     @Override
     public void getKnownContent(Consumer<List<ContentMetadata>> knownContentConsumer) {
-        feedSessionManager.getStreamFeaturesFromHead(
+        mFeedSessionManager.getStreamFeaturesFromHead(
                 streamPayload
                 -> {
                     if (!streamPayload.getStreamFeature().hasContent()) {
@@ -89,25 +89,25 @@
 
     @Override
     public void addListener(KnownContent.Listener listener) {
-        listeners.add(listener);
+        mListeners.add(listener);
     }
 
     @Override
     public void removeListener(KnownContent.Listener listener) {
-        listeners.remove(listener);
+        mListeners.remove(listener);
     }
 
     @Override
     public KnownContent.Listener getKnownContentHostNotifier() {
-        return listener;
+        return mListener;
     }
 
     private void runOnMainThread(String name, Runnable runnable) {
-        if (threadUtils.isMainThread()) {
+        if (mThreadUtils.isMainThread()) {
             runnable.run();
             return;
         }
 
-        mainThreadRunner.execute(name, runnable);
+        mMainThreadRunner.execute(name, runnable);
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedmodelprovider/FeedModelProvider.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedmodelprovider/FeedModelProvider.java
index 4bdb9f1..ce58870 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedmodelprovider/FeedModelProvider.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedmodelprovider/FeedModelProvider.java
@@ -80,96 +80,96 @@
             Collections.unmodifiableList(new ArrayList<>());
     private static final String SYNTHETIC_TOKEN_PREFIX = "_token:";
 
-    private final Object lock = new Object();
+    private final Object mLock = new Object();
 
     @GuardedBy("lock")
     /*@Nullable*/
-    private UpdatableModelChild root;
+    private UpdatableModelChild mRoot;
 
     // The tree is model as a parent with an list of children.  A container is created for every
     // ModelChild with a child.
     @GuardedBy("lock")
-    private final Map<String, ArrayList<UpdatableModelChild>> containers = new HashMap<>();
+    private final Map<String, ArrayList<UpdatableModelChild>> mContainers = new HashMap<>();
 
     @GuardedBy("lock")
-    private final Map<String, UpdatableModelChild> contents = new HashMap<>();
+    private final Map<String, UpdatableModelChild> mContents = new HashMap<>();
 
     @GuardedBy("lock")
-    private final Map<ByteString, TokenTracking> tokens = new HashMap<>();
+    private final Map<ByteString, TokenTracking> mTokens = new HashMap<>();
 
     @GuardedBy("lock")
-    private final Map<String, SyntheticTokenTracker> syntheticTokens = new HashMap<>();
+    private final Map<String, SyntheticTokenTracker> mSyntheticTokens = new HashMap<>();
 
     // TODO: Tiktok doesn't like WeakReference and will report uses as conformance errors
     @GuardedBy("lock")
-    private final List<WeakReference<ModelCursorImpl>> cursors = new ArrayList<>();
+    private final List<WeakReference<ModelCursorImpl>> mCursors = new ArrayList<>();
 
     @GuardedBy("lock")
-    private ModelState currentState = ModelState.initializing();
+    private ModelState mCurrentState = ModelState.initializing();
 
     // #dump() operation counts
-    private int removedChildrenCount;
-    private int removeScanCount;
-    private int commitCount;
-    private int commitTokenCount;
-    private int commitUpdateCount;
-    private int cursorsRemoved;
+    private int mRemovedChildrenCount;
+    private int mRemoveScanCount;
+    private int mCommitCount;
+    private int mCommitTokenCount;
+    private int mCommitUpdateCount;
+    private int mCursorsRemoved;
 
-    private final FeedSessionManager feedSessionManager;
-    private final ThreadUtils threadUtils;
-    private final TaskQueue taskQueue;
-    private final MainThreadRunner mainThreadRunner;
-    private final ModelChildBinder modelChildBinder;
-    private final TimingUtils timingUtils;
-    private final BasicLoggingApi basicLoggingApi;
+    private final FeedSessionManager mFeedSessionManager;
+    private final ThreadUtils mThreadUtils;
+    private final TaskQueue mTaskQueue;
+    private final MainThreadRunner mMainThreadRunner;
+    private final ModelChildBinder mModelChildBinder;
+    private final TimingUtils mTimingUtils;
+    private final BasicLoggingApi mBasicLoggingApi;
 
-    /*@Nullable*/ private final Predicate<StreamStructure> filterPredicate;
-    /*@Nullable*/ private RemoveTrackingFactory<?> removeTrackingFactory;
+    /*@Nullable*/ private final Predicate<StreamStructure> mFilterPredicate;
+    /*@Nullable*/ private RemoveTrackingFactory<?> mRemoveTrackingFactory;
 
-    private final int initialPageSize;
-    private final int pageSize;
-    private final int minPageSize;
+    private final int mInitialPageSize;
+    private final int mPageSize;
+    private final int mMinPageSize;
 
-    @VisibleForTesting /*@Nullable*/ String sessionId;
+    @VisibleForTesting /*@Nullable*/ String mSessionId;
 
     @GuardedBy("lock")
-    private boolean delayedTriggerRefresh;
+    private boolean mDelayedTriggerRefresh;
 
     @GuardedBy("lock")
     @RequestReason
-    private int requestReason = RequestReason.UNKNOWN;
+    private int mRequestReason = RequestReason.UNKNOWN;
 
     FeedModelProvider(FeedSessionManager feedSessionManager, ThreadUtils threadUtils,
             TimingUtils timingUtils, TaskQueue taskQueue, MainThreadRunner mainThreadRunner,
             /*@Nullable*/ Predicate<StreamStructure> filterPredicate, Configuration config,
             BasicLoggingApi basicLoggingApi) {
-        this.feedSessionManager = feedSessionManager;
-        this.threadUtils = threadUtils;
-        this.timingUtils = timingUtils;
-        this.taskQueue = taskQueue;
-        this.mainThreadRunner = mainThreadRunner;
-        this.initialPageSize =
+        this.mFeedSessionManager = feedSessionManager;
+        this.mThreadUtils = threadUtils;
+        this.mTimingUtils = timingUtils;
+        this.mTaskQueue = taskQueue;
+        this.mMainThreadRunner = mainThreadRunner;
+        this.mInitialPageSize =
                 (int) config.getValueOrDefault(ConfigKey.INITIAL_NON_CACHED_PAGE_SIZE, 0L);
-        this.pageSize = (int) config.getValueOrDefault(ConfigKey.NON_CACHED_PAGE_SIZE, 0L);
-        this.minPageSize = (int) config.getValueOrDefault(ConfigKey.NON_CACHED_MIN_PAGE_SIZE, 0L);
-        this.filterPredicate = filterPredicate;
-        this.basicLoggingApi = basicLoggingApi;
+        this.mPageSize = (int) config.getValueOrDefault(ConfigKey.NON_CACHED_PAGE_SIZE, 0L);
+        this.mMinPageSize = (int) config.getValueOrDefault(ConfigKey.NON_CACHED_MIN_PAGE_SIZE, 0L);
+        this.mFilterPredicate = filterPredicate;
+        this.mBasicLoggingApi = basicLoggingApi;
 
         CursorProvider cursorProvider = parentId -> provideCursor(parentId);
-        modelChildBinder = new ModelChildBinder(feedSessionManager, cursorProvider, timingUtils);
+        mModelChildBinder = new ModelChildBinder(feedSessionManager, cursorProvider, timingUtils);
     }
 
     private ModelCursorImpl provideCursor(String parentId) {
-        synchronized (lock) {
-            ArrayList<UpdatableModelChild> children = containers.get(parentId);
+        synchronized (mLock) {
+            ArrayList<UpdatableModelChild> children = mContainers.get(parentId);
             if (children == null) {
                 Logger.i(TAG, "No children found for Cursor");
                 ModelCursorImpl cursor = new ModelCursorImpl(parentId, EMPTY_LIST);
-                cursors.add(new WeakReference<>(cursor));
+                mCursors.add(new WeakReference<>(cursor));
                 return cursor;
             }
             ModelCursorImpl cursor = new ModelCursorImpl(parentId, new ArrayList<>(children));
-            cursors.add(new WeakReference<>(cursor));
+            mCursors.add(new WeakReference<>(cursor));
             return cursor;
         }
     }
@@ -177,14 +177,14 @@
     @Override
     /*@Nullable*/
     public ModelFeature getRootFeature() {
-        synchronized (lock) {
-            UpdatableModelChild localRoot = root;
+        synchronized (mLock) {
+            UpdatableModelChild localRoot = mRoot;
             if (localRoot == null) {
                 Logger.i(TAG, "Found Empty Stream");
                 return null;
             }
             if (localRoot.getType() != Type.FEATURE) {
-                basicLoggingApi.onInternalError(InternalFeedError.ROOT_NOT_BOUND_TO_FEATURE);
+                mBasicLoggingApi.onInternalError(InternalFeedError.ROOT_NOT_BOUND_TO_FEATURE);
                 Logger.e(TAG, "Root is bound to the wrong type %s", localRoot.getType());
                 return null;
             }
@@ -195,15 +195,15 @@
     @Override
     /*@Nullable*/
     public ModelChild getModelChild(String contentId) {
-        synchronized (lock) {
-            return contents.get(contentId);
+        synchronized (mLock) {
+            return mContents.get(contentId);
         }
     }
 
     @Override
     /*@Nullable*/
     public StreamSharedState getSharedState(ContentId contentId) {
-        return feedSessionManager.getSharedState(contentId);
+        return mFeedSessionManager.getSharedState(contentId);
     }
 
     @Override
@@ -212,8 +212,8 @@
             UpdatableModelToken token = (UpdatableModelToken) modelToken;
             if (token.isSynthetic()) {
                 SyntheticTokenTracker tokenTracker;
-                synchronized (lock) {
-                    tokenTracker = syntheticTokens.get(token.getStreamToken().getContentId());
+                synchronized (mLock) {
+                    tokenTracker = mSyntheticTokens.get(token.getStreamToken().getContentId());
                 }
                 if (tokenTracker == null) {
                     Logger.e(TAG, "Unable to find the SyntheticTokenTracker");
@@ -222,13 +222,13 @@
                 // The nullness checker fails to understand tokenTracker can't be null in the Lambda
                 // usage
                 SyntheticTokenTracker tt = Validators.checkNotNull(tokenTracker);
-                taskQueue.execute(Task.HANDLE_SYNTHETIC_TOKEN, TaskType.USER_FACING,
+                mTaskQueue.execute(Task.HANDLE_SYNTHETIC_TOKEN, TaskType.USER_FACING,
                         () -> tt.handleSyntheticToken(token));
                 return true;
             }
         }
-        String sessionId = Validators.checkNotNull(this.sessionId);
-        feedSessionManager.handleToken(sessionId, modelToken.getStreamToken());
+        String sessionId = Validators.checkNotNull(this.mSessionId);
+        mFeedSessionManager.handleToken(sessionId, modelToken.getStreamToken());
         return true;
     }
 
@@ -239,65 +239,65 @@
 
     @Override
     public void triggerRefresh(@RequestReason int requestReason, UiContext uiContext) {
-        threadUtils.checkMainThread();
-        if (sessionId == null) {
-            synchronized (lock) {
-                delayedTriggerRefresh = true;
-                this.requestReason = requestReason;
+        mThreadUtils.checkMainThread();
+        if (mSessionId == null) {
+            synchronized (mLock) {
+                mDelayedTriggerRefresh = true;
+                this.mRequestReason = requestReason;
             }
             return;
         }
-        feedSessionManager.triggerRefresh(sessionId, requestReason, uiContext);
+        mFeedSessionManager.triggerRefresh(mSessionId, requestReason, uiContext);
     }
 
     @Override
     public void registerObserver(ModelProviderObserver observer) {
         super.registerObserver(observer);
-        synchronized (lock) {
+        synchronized (mLock) {
             // If we are in the ready state, then call the Observer to inform it things are ready.
-            if (currentState.isReady()) {
-                observer.onSessionStart(currentState.uiContext);
-            } else if (currentState.isInvalidated()) {
-                observer.onSessionFinished(currentState.uiContext);
+            if (mCurrentState.isReady()) {
+                observer.onSessionStart(mCurrentState.mUiContext);
+            } else if (mCurrentState.isInvalidated()) {
+                observer.onSessionFinished(mCurrentState.mUiContext);
             }
         }
     }
 
     @Override
     public @State int getCurrentState() {
-        synchronized (lock) {
-            return currentState.getState();
+        synchronized (mLock) {
+            return mCurrentState.getState();
         }
     }
 
     @Override
     /*@Nullable*/
     public String getSessionId() {
-        if (sessionId == null) {
+        if (mSessionId == null) {
             Logger.w(TAG, "sessionId is null, this should have been set during population");
         }
-        return sessionId;
+        return mSessionId;
     }
 
     @Override
     public List<ModelChild> getAllRootChildren() {
-        synchronized (lock) {
-            if (root == null) {
+        synchronized (mLock) {
+            if (mRoot == null) {
                 return Collections.emptyList();
             }
-            List<UpdatableModelChild> rootChildren = containers.get(root.getContentId());
+            List<UpdatableModelChild> rootChildren = mContainers.get(mRoot.getContentId());
             return (rootChildren != null) ? new ArrayList<>(rootChildren) : Collections.emptyList();
         }
     }
 
     @Override
     public void enableRemoveTracking(RemoveTrackingFactory<?> removeTrackingFactory) {
-        this.removeTrackingFactory = removeTrackingFactory;
+        this.mRemoveTrackingFactory = removeTrackingFactory;
     }
 
     @Override
     public ModelMutation edit() {
-        return new ModelMutationImpl(committer);
+        return new ModelMutationImpl(mCommitter);
     }
 
     @Override
@@ -309,7 +309,7 @@
         String sessionId = getSessionId();
         if (sessionId != null) {
             Logger.i(TAG, "Detach the current ModelProvider: session %s", sessionId);
-            feedSessionManager.detachSession(sessionId);
+            mFeedSessionManager.detachSession(sessionId);
         }
     }
 
@@ -327,11 +327,11 @@
         String sessionId = getSessionId();
         if (sessionId != null) {
             Logger.i(TAG, "Invalidating the current ModelProvider: session %s", sessionId);
-            feedSessionManager.invalidateSession(sessionId);
+            mFeedSessionManager.invalidateSession(sessionId);
         }
 
         // Always run the observers on the UI Thread
-        mainThreadRunner.execute(TAG + " onSessionFinished", () -> {
+        mMainThreadRunner.execute(TAG + " onSessionFinished", () -> {
             List<ModelProviderObserver> observerList = getObserversToNotify();
             for (ModelProviderObserver observer : observerList) {
                 observer.onSessionFinished(uiContext);
@@ -340,25 +340,25 @@
     }
 
     private boolean moveToInvalidateState(UiContext uiContext) {
-        synchronized (lock) {
-            if (currentState.isInvalidated()) {
+        synchronized (mLock) {
+            if (mCurrentState.isInvalidated()) {
                 Logger.i(TAG, "Invalidated an already invalid ModelProvider");
                 return false;
             }
             Logger.i(TAG, "Moving %s to INVALIDATED",
-                    sessionId != null ? sessionId : "No sessionId");
-            currentState = ModelState.invalidated(uiContext);
-            for (WeakReference<ModelCursorImpl> cursorRef : cursors) {
+                    mSessionId != null ? mSessionId : "No sessionId");
+            mCurrentState = ModelState.invalidated(uiContext);
+            for (WeakReference<ModelCursorImpl> cursorRef : mCursors) {
                 ModelCursorImpl cursor = cursorRef.get();
                 if (cursor != null) {
                     cursor.release();
                     cursorRef.clear();
                 }
             }
-            cursors.clear();
-            tokens.clear();
-            syntheticTokens.clear();
-            containers.clear();
+            mCursors.clear();
+            mTokens.clear();
+            mSyntheticTokens.clear();
+            mContainers.clear();
         }
         return true;
     }
@@ -366,7 +366,7 @@
     @Override
     public void raiseError(ModelError error) {
         if (error.getErrorType() == ErrorType.NO_CARDS_ERROR) {
-            mainThreadRunner.execute(TAG + " onError", () -> {
+            mMainThreadRunner.execute(TAG + " onError", () -> {
                 List<ModelProviderObserver> observerList = getObserversToNotify();
                 for (ModelProviderObserver observer : observerList) {
                     observer.onError(error);
@@ -375,11 +375,11 @@
         } else if (error.getErrorType() == ErrorType.PAGINATION_ERROR) {
             Logger.i(TAG, "handling Pagination error");
             TokenTracking token;
-            synchronized (lock) {
-                token = tokens.get(error.getContinuationToken());
+            synchronized (mLock) {
+                token = mTokens.get(error.getContinuationToken());
             }
             if (token != null) {
-                raiseErrorOnToken(error, token.tokenChild);
+                raiseErrorOnToken(error, token.mTokenChild);
             } else {
                 Logger.e(TAG, "The Token Observer was not found during pagination error");
             }
@@ -387,7 +387,7 @@
     }
 
     private void raiseErrorOnToken(ModelError error, UpdatableModelToken token) {
-        mainThreadRunner.execute(TAG + " onTokenChange", () -> {
+        mMainThreadRunner.execute(TAG + " onTokenChange", () -> {
             List<TokenCompletedObserver> observerList = token.getObserversToNotify();
             for (TokenCompletedObserver observer : observerList) {
                 observer.onError(error);
@@ -408,12 +408,12 @@
             @Override
             public /*@Nullable*/ String getChildViewDepth() {
                 String cid = Validators.checkNotNull(delegate).getChildViewDepth();
-                synchronized (lock) {
-                    if (cid == null || root == null) {
+                synchronized (mLock) {
+                    if (cid == null || mRoot == null) {
                         return null;
                     }
-                    String rootId = root.getContentId();
-                    UpdatableModelChild child = contents.get(cid);
+                    String rootId = mRoot.getContentId();
+                    UpdatableModelChild child = mContents.get(cid);
                     while (child != null) {
                         if (child.getParentId() == null) {
                             return null;
@@ -421,7 +421,7 @@
                         if (rootId.equals(child.getParentId())) {
                             return child.getContentId();
                         }
-                        child = contents.get(child.getParentId());
+                        child = mContents.get(child.getParentId());
                     }
                 }
                 return null;
@@ -431,22 +431,22 @@
 
     @Override
     public void dump(Dumper dumper) {
-        synchronized (lock) {
+        synchronized (mLock) {
             dumper.title(TAG);
-            dumper.forKey("currentState").value(currentState.getState());
-            dumper.forKey("contentCount").value(contents.size()).compactPrevious();
-            dumper.forKey("containers").value(containers.size()).compactPrevious();
-            dumper.forKey("tokens").value(tokens.size()).compactPrevious();
-            dumper.forKey("syntheticTokens").value(syntheticTokens.size()).compactPrevious();
-            dumper.forKey("observers").value(observers.size()).compactPrevious();
-            dumper.forKey("commitCount").value(commitCount);
-            dumper.forKey("commitTokenCount").value(commitTokenCount).compactPrevious();
-            dumper.forKey("commitUpdateCount").value(commitUpdateCount).compactPrevious();
-            dumper.forKey("removeCount").value(removedChildrenCount);
-            dumper.forKey("removeScanCount").value(removeScanCount).compactPrevious();
-            if (root != null) {
+            dumper.forKey("currentState").value(mCurrentState.getState());
+            dumper.forKey("contentCount").value(mContents.size()).compactPrevious();
+            dumper.forKey("containers").value(mContainers.size()).compactPrevious();
+            dumper.forKey("tokens").value(mTokens.size()).compactPrevious();
+            dumper.forKey("syntheticTokens").value(mSyntheticTokens.size()).compactPrevious();
+            dumper.forKey("observers").value(mObservers.size()).compactPrevious();
+            dumper.forKey("commitCount").value(mCommitCount);
+            dumper.forKey("commitTokenCount").value(mCommitTokenCount).compactPrevious();
+            dumper.forKey("commitUpdateCount").value(mCommitUpdateCount).compactPrevious();
+            dumper.forKey("removeCount").value(mRemovedChildrenCount);
+            dumper.forKey("removeScanCount").value(mRemoveScanCount).compactPrevious();
+            if (mRoot != null) {
                 // This is here to satisfy the nullness checker.
-                UpdatableModelChild nonNullRoot = Validators.checkNotNull(root);
+                UpdatableModelChild nonNullRoot = Validators.checkNotNull(mRoot);
                 if (nonNullRoot.getType() != Type.FEATURE) {
                     dumper.forKey("root").value("[ROOT NOT A FEATURE]");
                     dumper.forKey("type").value(nonNullRoot.getType()).compactPrevious();
@@ -463,7 +463,7 @@
             int singleChild = 0;
             Dumper childDumper = dumper.getChildDumper();
             childDumper.title("Containers With Multiple Children");
-            for (Entry<String, ArrayList<UpdatableModelChild>> entry : containers.entrySet()) {
+            for (Entry<String, ArrayList<UpdatableModelChild>> entry : mContainers.entrySet()) {
                 if (entry.getValue().size() > 1) {
                     childDumper.forKey("Container").value(entry.getKey());
                     childDumper.forKey("childrenCount")
@@ -474,10 +474,10 @@
                 }
             }
             dumper.forKey("singleChildContainers").value(singleChild);
-            dumper.forKey("cursors").value(cursors.size());
+            dumper.forKey("cursors").value(mCursors.size());
             int atEnd = 0;
             int cursorEmptyRefs = 0;
-            for (WeakReference<ModelCursorImpl> cursorRef : cursors) {
+            for (WeakReference<ModelCursorImpl> cursorRef : mCursors) {
                 ModelCursorImpl cursor = cursorRef.get();
                 if (cursor == null) {
                     cursorEmptyRefs++;
@@ -485,11 +485,11 @@
                     atEnd++;
                 }
             }
-            dumper.forKey("cursorsRemoved").value(cursorsRemoved).compactPrevious();
+            dumper.forKey("cursorsRemoved").value(mCursorsRemoved).compactPrevious();
             dumper.forKey("reclaimedWeakReferences").value(cursorEmptyRefs).compactPrevious();
             dumper.forKey("cursorsAtEnd").value(atEnd).compactPrevious();
 
-            for (WeakReference<ModelCursorImpl> cursorRef : cursors) {
+            for (WeakReference<ModelCursorImpl> cursorRef : mCursors) {
                 ModelCursorImpl cursor = cursorRef.get();
                 if (cursor != null && !cursor.isAtEnd()) {
                     dumper.dump(cursor);
@@ -503,8 +503,8 @@
         // Make a copy of the observers, so the observers are not mutated while invoking callbacks.
         // mObservers is locked when adding or removing observers. Also, release the lock before
         // invoking callbacks to avoid deadlocks. ([INTERNAL LINK])
-        synchronized (observers) {
-            return new ArrayList<>(observers);
+        synchronized (mObservers) {
+            return new ArrayList<>(mObservers);
         }
     }
 
@@ -537,24 +537,24 @@
     }
 
     /** This is the {@code ModelMutatorCommitter} which updates the model. */
-    private final Committer<Void, Change> committer = new Committer<Void, Change>() {
+    private final Committer<Void, Change> mCommitter = new Committer<Void, Change>() {
         @Override
         public Void commit(Change change) {
             Logger.i(TAG, "FeedModelProvider - committer, structure changes %s, update changes %s",
-                    change.structureChanges.size(), change.updateChanges.size());
-            threadUtils.checkNotMainThread();
-            ElapsedTimeTracker timeTracker = timingUtils.getElapsedTimeTracker(TAG);
-            commitCount++;
+                    change.mStructureChanges.size(), change.mUpdateChanges.size());
+            mThreadUtils.checkNotMainThread();
+            ElapsedTimeTracker timeTracker = mTimingUtils.getElapsedTimeTracker(TAG);
+            mCommitCount++;
 
-            if (change.sessionId != null) {
-                sessionId = change.sessionId;
-                synchronized (lock) {
-                    if (delayedTriggerRefresh) {
-                        delayedTriggerRefresh = false;
-                        final @RequestReason int requestReasonForTrigger = requestReason;
-                        mainThreadRunner.execute(TAG + " TriggerRefresh",
+            if (change.mSessionId != null) {
+                mSessionId = change.mSessionId;
+                synchronized (mLock) {
+                    if (mDelayedTriggerRefresh) {
+                        mDelayedTriggerRefresh = false;
+                        final @RequestReason int requestReasonForTrigger = mRequestReason;
+                        mMainThreadRunner.execute(TAG + " TriggerRefresh",
                                 () -> triggerRefresh(requestReasonForTrigger));
-                        requestReason = RequestReason.UNKNOWN;
+                        mRequestReason = RequestReason.UNKNOWN;
                     }
                 }
             }
@@ -564,8 +564,8 @@
             Map<String, UpdatableModelChild> appendedChildren = new HashMap<>();
             List<UpdatableModelChild> childrenToBind = new ArrayList<>();
             boolean removedChildren = false;
-            for (StreamStructure structureChange : change.structureChanges) {
-                if (filterPredicate != null && !filterPredicate.test(structureChange)) {
+            for (StreamStructure structureChange : change.mStructureChanges) {
+                if (mFilterPredicate != null && !mFilterPredicate.test(structureChange)) {
                     continue;
                 }
                 if (structureChange.getOperation() == Operation.UPDATE_OR_APPEND) {
@@ -580,15 +580,15 @@
             }
 
             RemoveTracking<?> removeTracking = null;
-            if (removeTrackingFactory != null && change.mutationContext != null
+            if (mRemoveTrackingFactory != null && change.mMutationContext != null
                     && removedChildren) {
-                removeTracking = removeTrackingFactory.create(change.mutationContext);
+                removeTracking = mRemoveTrackingFactory.create(change.mMutationContext);
             }
 
-            synchronized (lock) {
+            synchronized (mLock) {
                 // Add the updates to the childrenToBind
-                for (StreamStructure updatedChild : change.updateChanges) {
-                    UpdatableModelChild child = contents.get(updatedChild.getContentId());
+                for (StreamStructure updatedChild : change.mUpdateChanges) {
+                    UpdatableModelChild child = mContents.get(updatedChild.getContentId());
                     if (child != null) {
                         childrenToBind.add(child);
                     } else {
@@ -600,29 +600,29 @@
 
             // Mutate the Model
             MutationHandler mutationHandler =
-                    getMutationHandler(change.updateChanges, change.mutationContext);
-            processMutation(mutationHandler, change.structureChanges, appendedChildren,
-                    removeTracking, change.mutationContext);
+                    getMutationHandler(change.mUpdateChanges, change.mMutationContext);
+            processMutation(mutationHandler, change.mStructureChanges, appendedChildren,
+                    removeTracking, change.mMutationContext);
 
             if (removeTracking != null) {
                 // Update the UI on the main thread.
-                mainThreadRunner.execute(
+                mMainThreadRunner.execute(
                         TAG + " removeTracking", removeTracking::triggerConsumerUpdate);
             }
 
             // Determine where to start binding children.
             int tokenStart = 0;
-            synchronized (lock) {
-                if (root != null) {
-                    tokenStart = findFirstUnboundChild(containers.get(root.getContentId()));
+            synchronized (mLock) {
+                if (mRoot != null) {
+                    tokenStart = findFirstUnboundChild(mContainers.get(mRoot.getContentId()));
                 }
             }
-            int tokenPageSize = tokenStart < initialPageSize ? initialPageSize : pageSize;
+            int tokenPageSize = tokenStart < mInitialPageSize ? mInitialPageSize : mPageSize;
 
-            synchronized (lock) {
+            synchronized (mLock) {
                 if (shouldInsertSyntheticToken()) {
                     SyntheticTokenTracker tokenTracker = new SyntheticTokenTracker(
-                            Validators.checkNotNull(root), tokenStart, tokenPageSize);
+                            Validators.checkNotNull(mRoot), tokenStart, tokenPageSize);
                     childrenToBind = tokenTracker.insertToken();
                 }
             }
@@ -635,13 +635,13 @@
                 invalidate();
             }
             timeTracker.stop("", "modelProviderCommit");
-            StreamToken token = (change.mutationContext != null)
-                    ? change.mutationContext.getContinuationToken()
+            StreamToken token = (change.mMutationContext != null)
+                    ? change.mMutationContext.getContinuationToken()
                     : null;
             Logger.i(TAG,
                     "ModelProvider Mutation committed - structure changes %s, childrenToBind %s, "
                             + "removedChildren %s, Token %s",
-                    change.structureChanges.size(), childrenToBind.size(), removedChildren,
+                    change.mStructureChanges.size(), childrenToBind.size(), removedChildren,
                     token != null);
             return null;
         }
@@ -663,11 +663,11 @@
         /** Returns a MutationHandler for processing the mutation */
         private MutationHandler getMutationHandler(List<StreamStructure> updatedChildren,
                 /*@Nullable*/ MutationContext mutationContext) {
-            synchronized (lock) {
+            synchronized (mLock) {
                 StreamToken mutationSourceToken =
                         mutationContext != null ? mutationContext.getContinuationToken() : null;
                 MutationHandler mutationHandler;
-                if (currentState.isInitializing()) {
+                if (mCurrentState.isInitializing()) {
                     Validators.checkState(mutationSourceToken == null,
                             "Initializing the Model Provider from a Continuation Token");
 
@@ -676,10 +676,10 @@
                     mutationHandler = new InitializeModel(uiContext);
                 } else if (mutationSourceToken != null) {
                     mutationHandler = new TokenMutation(mutationSourceToken);
-                    commitTokenCount++;
+                    mCommitTokenCount++;
                 } else {
                     mutationHandler = new UpdateMutation(updatedChildren);
-                    commitUpdateCount++;
+                    mCommitUpdateCount++;
                 }
                 return mutationHandler;
             }
@@ -691,10 +691,10 @@
                 Map<String, UpdatableModelChild> appendedChildren,
                 /*@Nullable*/ RemoveTracking<?> removeTracking,
                 /*@Nullable*/ MutationContext mutationContext) {
-            ElapsedTimeTracker timeTracker = timingUtils.getElapsedTimeTracker(TAG);
+            ElapsedTimeTracker timeTracker = mTimingUtils.getElapsedTimeTracker(TAG);
             int appends = 0;
             int removes = 0;
-            synchronized (lock) {
+            synchronized (mLock) {
                 // Processing before the structural mutation
                 mutationHandler.preMutation();
 
@@ -714,13 +714,13 @@
                             if (!createRoot(modelChild)) {
                                 Logger.e(TAG, "Root update failed, invalidating model");
                                 Logger.i(TAG, "Moving %s to INVALIDATED",
-                                        sessionId != null ? sessionId : "No sessionId");
+                                        mSessionId != null ? mSessionId : "No sessionId");
 
                                 UiContext uiContext = mutationContext == null
                                         ? UiContext.getDefaultInstance()
                                         : mutationContext.getUiContext();
-                                currentState = ModelState.invalidated(uiContext);
-                                mainThreadRunner.execute(TAG + " multipleRootInvalidation", () -> {
+                                mCurrentState = ModelState.invalidated(uiContext);
+                                mMainThreadRunner.execute(TAG + " multipleRootInvalidation", () -> {
                                     List<ModelProviderObserver> observerList =
                                             getObserversToNotify();
                                     for (ModelProviderObserver observer : observerList) {
@@ -729,7 +729,7 @@
                                 });
                                 return;
                             }
-                            contents.put(modelChild.getContentId(), modelChild);
+                            mContents.put(modelChild.getContentId(), modelChild);
                             appends++;
                             continue;
                         }
@@ -744,14 +744,14 @@
                             continue;
                         }
                         childrenList.add(modelChild);
-                        contents.put(modelChild.getContentId(), modelChild);
+                        mContents.put(modelChild.getContentId(), modelChild);
                         appends++;
 
                         mutationHandler.appendChild(parentKey, modelChild);
                     } else if (structure.getOperation() == Operation.REMOVE) {
                         handleRemoveOperation(mutationHandler, structure, removeTracking);
                         removes++;
-                        contents.remove(structure.getContentId());
+                        mContents.remove(structure.getContentId());
                     }
                 }
             }
@@ -761,9 +761,9 @@
 
     private boolean bindChildrenAndTokens(List<UpdatableModelChild> childrenToBind) {
         // Bind the unbound children
-        boolean success = modelChildBinder.bindChildren(childrenToBind);
+        boolean success = mModelChildBinder.bindChildren(childrenToBind);
 
-        synchronized (lock) {
+        synchronized (mLock) {
             // Track any tokens we added to the tree
             for (UpdatableModelChild child : childrenToBind) {
                 if (child.getType() == Type.TOKEN) {
@@ -776,7 +776,7 @@
                     ArrayList<UpdatableModelChild> childrenList = getChildList(parent);
                     TokenTracking tokenTracking =
                             new TokenTracking(child.getUpdatableModelToken(), parent, childrenList);
-                    tokens.put(child.getModelToken().getStreamToken().getNextPageToken(),
+                    mTokens.put(child.getModelToken().getStreamToken().getNextPageToken(),
                             tokenTracking);
                 }
             }
@@ -786,34 +786,34 @@
     }
 
     private boolean shouldInsertSyntheticToken() {
-        synchronized (lock) {
-            return (root != null && initialPageSize > 0);
+        synchronized (mLock) {
+            return (mRoot != null && mInitialPageSize > 0);
         }
     }
 
     /** Class which handles Synthetic tokens within the root children list. */
     @VisibleForTesting
     final class SyntheticTokenTracker {
-        private final List<UpdatableModelChild> childrenToBind = new ArrayList<>();
-        private final UpdatableModelChild pagingChild;
-        private final int startingPosition;
-        private final int endPosition;
-        private final boolean insertToken;
+        private final List<UpdatableModelChild> mChildrenToBind = new ArrayList<>();
+        private final UpdatableModelChild mPagingChild;
+        private final int mStartingPosition;
+        private final int mEndPosition;
+        private final boolean mInsertToken;
 
-        private UpdatableModelChild tokenChild;
+        private UpdatableModelChild mTokenChild;
 
         SyntheticTokenTracker(UpdatableModelChild pagingChild, int startingPosition, int pageSize) {
-            this.pagingChild = pagingChild;
+            this.mPagingChild = pagingChild;
 
             if (startingPosition < 0) {
                 startingPosition = 0;
             }
-            List<UpdatableModelChild> children = containers.get(pagingChild.getContentId());
+            List<UpdatableModelChild> children = mContainers.get(pagingChild.getContentId());
             if (children == null) {
                 Logger.e(TAG, "Paging child doesn't not have children");
-                this.startingPosition = 0;
-                this.endPosition = 0;
-                this.insertToken = false;
+                this.mStartingPosition = 0;
+                this.mEndPosition = 0;
+                this.mInsertToken = false;
                 return;
             }
             int start = startingPosition;
@@ -827,44 +827,44 @@
                 start = 0;
                 end = children.size();
             } else if (start + pageSize > children.size()
-                    || start + pageSize + minPageSize > children.size()) {
+                    || start + pageSize + mMinPageSize > children.size()) {
                 end = children.size();
             }
-            this.startingPosition = start;
-            this.endPosition = end;
-            this.insertToken = end < children.size();
-            Logger.i(TAG, "SyntheticTokenTracker: %d, %d, %d, %b", this.startingPosition,
-                    this.endPosition, children.size(), this.insertToken);
+            this.mStartingPosition = start;
+            this.mEndPosition = end;
+            this.mInsertToken = end < children.size();
+            Logger.i(TAG, "SyntheticTokenTracker: %d, %d, %d, %b", this.mStartingPosition,
+                    this.mEndPosition, children.size(), this.mInsertToken);
         }
 
         /**
          * Returns the UpdatableModelChild which represents the synthetic token added to the model.
          */
         UpdatableModelChild getTokenChild() {
-            return tokenChild;
+            return mTokenChild;
         }
 
         /** Insert a synthetic token into the tree. */
         List<UpdatableModelChild> insertToken() {
-            ElapsedTimeTracker tt = timingUtils.getElapsedTimeTracker(TAG);
-            traverse(pagingChild, startingPosition, endPosition);
-            if (insertToken) {
-                synchronized (lock) {
+            ElapsedTimeTracker tt = mTimingUtils.getElapsedTimeTracker(TAG);
+            traverse(mPagingChild, mStartingPosition, mEndPosition);
+            if (mInsertToken) {
+                synchronized (mLock) {
                     ArrayList<UpdatableModelChild> rootChildren =
-                            containers.get(pagingChild.getContentId());
+                            mContainers.get(mPagingChild.getContentId());
                     if (rootChildren != null) {
-                        tokenChild = getSyntheticToken();
-                        rootChildren.add(endPosition, tokenChild);
-                        syntheticTokens.put(tokenChild.getContentId(), this);
+                        mTokenChild = getSyntheticToken();
+                        rootChildren.add(mEndPosition, mTokenChild);
+                        mSyntheticTokens.put(mTokenChild.getContentId(), this);
                         Logger.i(TAG, "Inserting a Synthetic Token %s at %s",
-                                tokenChild.getContentId(), endPosition);
+                                mTokenChild.getContentId(), mEndPosition);
                     } else {
                         Logger.e(TAG, "Unable to find paging node's children");
                     }
                 }
             }
             tt.stop("", "syntheticTokens");
-            return childrenToBind;
+            return mChildrenToBind;
         }
 
         /** Handle the synthetic token */
@@ -875,14 +875,14 @@
             UpdatableModelChild currentRoot = null;
             List<UpdatableModelChild> rootChildren = null;
             int pos = -1;
-            synchronized (lock) {
-                tracker = syntheticTokens.get(streamToken.getContentId());
+            synchronized (mLock) {
+                tracker = mSyntheticTokens.get(streamToken.getContentId());
                 if (tracker != null) {
                     tokenChild = tracker.getTokenChild();
                 }
-                currentRoot = root;
+                currentRoot = mRoot;
                 if (tokenChild != null && currentRoot != null) {
-                    rootChildren = containers.get(currentRoot.getContentId());
+                    rootChildren = mContainers.get(currentRoot.getContentId());
                 }
                 if (rootChildren != null) {
                     pos = rootChildren.indexOf(tokenChild);
@@ -900,12 +900,12 @@
             }
 
             // Process the synthetic token.
-            synchronized (lock) {
-                syntheticTokens.remove(streamToken.getContentId());
+            synchronized (mLock) {
+                mSyntheticTokens.remove(streamToken.getContentId());
             }
             rootChildren.remove(pos);
             SyntheticTokenTracker tokenTracker =
-                    new SyntheticTokenTracker(currentRoot, pos, pageSize);
+                    new SyntheticTokenTracker(currentRoot, pos, mPageSize);
             List<UpdatableModelChild> childrenToBind = tokenTracker.insertToken();
             List<UpdatableModelChild> cursorSublist =
                     rootChildren.subList(pos, rootChildren.size());
@@ -917,7 +917,7 @@
 
             ModelCursorImpl cursor = new ModelCursorImpl(streamToken.getParentId(), cursorSublist);
             TokenCompleted tokenCompleted = new TokenCompleted(cursor);
-            mainThreadRunner.execute(TAG + " onTokenChange", () -> {
+            mMainThreadRunner.execute(TAG + " onTokenChange", () -> {
                 List<TokenCompletedObserver> observerList = token.getObserversToNotify();
                 for (TokenCompletedObserver observer : observerList) {
                     observer.onTokenCompleted(tokenCompleted);
@@ -926,12 +926,12 @@
         }
 
         private void traverse(UpdatableModelChild node, int start, int end) {
-            synchronized (lock) {
+            synchronized (mLock) {
                 if (node.getType() == Type.UNBOUND) {
-                    childrenToBind.add(node);
+                    mChildrenToBind.add(node);
                 }
                 String nodeId = node.getContentId();
-                List<UpdatableModelChild> children = containers.get(nodeId);
+                List<UpdatableModelChild> children = mContainers.get(nodeId);
                 if (children != null && !children.isEmpty()) {
                     int maxChildren = Math.min(end, children.size());
                     for (int i = start; i < maxChildren; i++) {
@@ -943,8 +943,8 @@
         }
 
         private UpdatableModelChild getSyntheticToken() {
-            synchronized (lock) {
-                UpdatableModelChild r = Validators.checkNotNull(root);
+            synchronized (mLock) {
+                UpdatableModelChild r = Validators.checkNotNull(mRoot);
                 String contentId = SYNTHETIC_TOKEN_PREFIX + UUID.randomUUID();
                 StreamToken streamToken = StreamToken.newBuilder().setContentId(contentId).build();
                 UpdatableModelChild modelChild =
@@ -964,8 +964,8 @@
         }
 
         if (removeTracking != null) {
-            synchronized (lock) {
-                UpdatableModelChild child = contents.get(removeChild.getContentId());
+            synchronized (mLock) {
+                UpdatableModelChild child = mContents.get(removeChild.getContentId());
                 if (child != null) {
                     traverseNode(child, removeTracking);
                 } else {
@@ -974,9 +974,9 @@
                 }
             }
         }
-        synchronized (lock) {
+        synchronized (mLock) {
             String parentKey = removeChild.getParentContentId();
-            List<UpdatableModelChild> childList = containers.get(parentKey);
+            List<UpdatableModelChild> childList = mContainers.get(parentKey);
             if (childList == null) {
                 if (!removeChild.hasParentContentId()) {
                     Logger.w(TAG, "Remove of root is not yet supported");
@@ -989,15 +989,15 @@
             // For FEATURE children, add the remove to the mutation handler to create the
             // StreamFeatureChange.  We skip this for TOKENS.
             String childKey = removeChild.getContentId();
-            UpdatableModelChild targetChild = contents.get(childKey);
+            UpdatableModelChild targetChild = mContents.get(childKey);
             if (targetChild == null) {
                 if (childKey.startsWith(SYNTHETIC_TOKEN_PREFIX)) {
                     Logger.i(TAG, "Remove Synthetic Token");
-                    SyntheticTokenTracker token = syntheticTokens.get(childKey);
+                    SyntheticTokenTracker token = mSyntheticTokens.get(childKey);
                     if (token != null) {
                         targetChild = token.getTokenChild();
                         mutationHandler.removeChild(parentKey, targetChild);
-                        syntheticTokens.remove(childKey);
+                        mSyntheticTokens.remove(childKey);
                     } else {
                         Logger.e(TAG, "Unable to find synthetic token %s", childKey);
                         return;
@@ -1019,7 +1019,7 @@
             ListIterator<UpdatableModelChild> li = childList.listIterator(childList.size());
             UpdatableModelChild removed = null;
             while (li.hasPrevious()) {
-                removeScanCount++;
+                mRemoveScanCount++;
                 UpdatableModelChild child = li.previous();
                 if (child.getContentId().equals(childKey)) {
                     removed = child;
@@ -1029,7 +1029,7 @@
 
             if (removed != null) {
                 childList.remove(removed);
-                removedChildrenCount++;
+                mRemovedChildrenCount++;
             } else {
                 Logger.w(TAG, "Child to be removed was not found");
             }
@@ -1042,22 +1042,22 @@
      */
     @VisibleForTesting
     final class InitializeModel extends MutationHandler {
-        private final UiContext uiContext;
+        private final UiContext mUiContext;
 
         InitializeModel(UiContext uiContext) {
-            this.uiContext = uiContext;
+            this.mUiContext = uiContext;
         }
 
         @Override
         public void postMutation() {
-            Logger.i(TAG, "Moving %s to READY", sessionId != null ? sessionId : "No sessionId");
-            synchronized (lock) {
-                currentState = ModelState.ready(uiContext);
+            Logger.i(TAG, "Moving %s to READY", mSessionId != null ? mSessionId : "No sessionId");
+            synchronized (mLock) {
+                mCurrentState = ModelState.ready(mUiContext);
             }
-            mainThreadRunner.execute(TAG + " onSessionStart", () -> {
+            mMainThreadRunner.execute(TAG + " onSessionStart", () -> {
                 List<ModelProviderObserver> observerList = getObserversToNotify();
                 for (ModelProviderObserver observer : observerList) {
-                    observer.onSessionStart(uiContext);
+                    observer.onSessionStart(mUiContext);
                 }
             });
         }
@@ -1070,47 +1070,48 @@
      */
     @VisibleForTesting
     final class TokenMutation extends MutationHandler {
-        private final StreamToken mutationSourceToken;
-        /*@Nullable*/ TokenTracking token = null;
-        int newCursorStart = -1;
+        private final StreamToken mMutationSourceToken;
+        /*@Nullable*/ TokenTracking mToken = null;
+        int mNewCursorStart = -1;
 
         TokenMutation(StreamToken mutationSourceToken) {
-            this.mutationSourceToken = mutationSourceToken;
+            this.mMutationSourceToken = mutationSourceToken;
         }
 
         @VisibleForTesting
         TokenTracking getTokenTrackingForTest() {
-            synchronized (lock) {
-                return Validators.checkNotNull(tokens.get(mutationSourceToken.getNextPageToken()));
+            synchronized (mLock) {
+                return Validators.checkNotNull(
+                        mTokens.get(mMutationSourceToken.getNextPageToken()));
             }
         }
 
         @Override
         public void preMutation() {
-            synchronized (lock) {
-                token = tokens.remove(mutationSourceToken.getNextPageToken());
-                if (token == null) {
+            synchronized (mLock) {
+                mToken = mTokens.remove(mMutationSourceToken.getNextPageToken());
+                if (mToken == null) {
                     Logger.e(TAG, "Token was not found, positioning to end of list");
                     return;
                 }
                 // adjust the location because we will remove the token
-                newCursorStart = token.location.size() - 1;
+                mNewCursorStart = mToken.mLocation.size() - 1;
             }
         }
 
         @Override
         public void postMutation() {
-            if (token == null) {
+            if (mToken == null) {
                 Logger.e(TAG, "Token was not found, mutation is being ignored");
                 return;
             }
-            ModelCursorImpl cursor = new ModelCursorImpl(token.parentContentId,
-                    token.location.subList(newCursorStart, token.location.size()));
+            ModelCursorImpl cursor = new ModelCursorImpl(mToken.mParentContentId,
+                    mToken.mLocation.subList(mNewCursorStart, mToken.mLocation.size()));
             TokenCompleted tokenCompleted = new TokenCompleted(cursor);
-            mainThreadRunner.execute(TAG + " onTokenChange", () -> {
-                if (token != null) {
+            mMainThreadRunner.execute(TAG + " onTokenChange", () -> {
+                if (mToken != null) {
                     List<TokenCompletedObserver> observerList =
-                            token.tokenChild.getObserversToNotify();
+                            mToken.mTokenChild.getObserversToNotify();
                     for (TokenCompletedObserver observer : observerList) {
                         observer.onTokenCompleted(tokenCompleted);
                     }
@@ -1126,19 +1127,19 @@
      */
     @VisibleForTesting
     final class UpdateMutation extends MutationHandler {
-        private final List<StreamStructure> updates;
-        private final Map<String, FeatureChangeImpl> changes = new HashMap<>();
-        private final Set<String> newParents = new HashSet<>();
+        private final List<StreamStructure> mUpdates;
+        private final Map<String, FeatureChangeImpl> mChanges = new HashMap<>();
+        private final Set<String> mNewParents = new HashSet<>();
 
         UpdateMutation(List<StreamStructure> updates) {
-            this.updates = updates;
+            this.mUpdates = updates;
         }
 
         @Override
         public void preMutation() {
-            Logger.i(TAG, "Updating %s items", updates.size());
+            Logger.i(TAG, "Updating %s items", mUpdates.size());
             // Walk all the updates and update the values, creating changes to track these
-            for (StreamStructure update : updates) {
+            for (StreamStructure update : mUpdates) {
                 FeatureChangeImpl change = getChange(update.getContentId());
                 if (change != null) {
                     change.setFeatureChanged(true);
@@ -1159,14 +1160,14 @@
             // Is this a child of a node that is new to the model?  We only report changes
             // to existing ModelFeatures.
             String childKey = child.getContentId();
-            if (newParents.contains(parentKey)) {
+            if (mNewParents.contains(parentKey)) {
                 // Don't create a change the child of a new child
-                newParents.add(childKey);
+                mNewParents.add(childKey);
                 return;
             }
 
             // TODO: this logic assumes that parents are passed before children.
-            newParents.add(childKey);
+            mNewParents.add(childKey);
             FeatureChangeImpl change = getChange(parentKey);
             if (change != null) {
                 change.getChildChangesImpl().addAppendChild(child);
@@ -1175,13 +1176,13 @@
 
         @Override
         public void postMutation() {
-            synchronized (lock) {
+            synchronized (mLock) {
                 // Update the cursors before we notify the UI
                 List<WeakReference<ModelCursorImpl>> removeList = new ArrayList<>();
-                for (WeakReference<ModelCursorImpl> cursorRef : cursors) {
+                for (WeakReference<ModelCursorImpl> cursorRef : mCursors) {
                     ModelCursorImpl cursor = cursorRef.get();
                     if (cursor != null) {
-                        FeatureChange change = changes.get(cursor.getParentContentId());
+                        FeatureChange change = mChanges.get(cursor.getParentContentId());
                         if (change != null) {
                             cursor.updateIterator(change);
                         }
@@ -1189,13 +1190,13 @@
                         removeList.add(cursorRef);
                     }
                 }
-                cursorsRemoved += removeList.size();
-                cursors.removeAll(removeList);
+                mCursorsRemoved += removeList.size();
+                mCursors.removeAll(removeList);
             }
 
             // Update the Observers on the UI Thread
-            mainThreadRunner.execute(TAG + " onFeatureChange", () -> {
-                for (FeatureChangeImpl change : changes.values()) {
+            mMainThreadRunner.execute(TAG + " onFeatureChange", () -> {
+                for (FeatureChangeImpl change : mChanges.values()) {
                     List<FeatureChangeObserver> observerList =
                             ((UpdatableModelFeature) change.getModelFeature())
                                     .getObserversToNotify();
@@ -1208,11 +1209,11 @@
 
         /*@Nullable*/
         private FeatureChangeImpl getChange(String contentIdKey) {
-            FeatureChangeImpl change = changes.get(contentIdKey);
+            FeatureChangeImpl change = mChanges.get(contentIdKey);
             if (change == null) {
                 UpdatableModelChild modelChild;
-                synchronized (lock) {
-                    modelChild = contents.get(contentIdKey);
+                synchronized (mLock) {
+                    modelChild = mContents.get(contentIdKey);
                 }
                 if (modelChild == null) {
                     Logger.e(TAG, "Didn't find '%s' in content", contentIdKey);
@@ -1224,7 +1225,7 @@
                     return null;
                 }
                 change = new FeatureChangeImpl(modelChild.getModelFeature());
-                changes.put(contentIdKey, change);
+                mChanges.put(contentIdKey, change);
             }
             return change;
         }
@@ -1232,25 +1233,26 @@
 
     // This method will return true if it sets/updates root
     private boolean createRoot(UpdatableModelChild child) {
-        synchronized (lock) {
+        synchronized (mLock) {
             // this must be a root
             if (child.getType() == Type.FEATURE || child.getType() == Type.UNBOUND) {
-                if (root != null) {
+                if (mRoot != null) {
                     // For multiple roots, check to see if they have the same content id, if so then
                     // ignore the new root.  Otherwise, invalidate the model because we don't
                     // support multiple roots
-                    if (root.getContentId().equals(child.getContentId())) {
+                    if (mRoot.getContentId().equals(child.getContentId())) {
                         Logger.w(TAG, "Multiple Roots - duplicate root is ignored");
                         return true;
                     } else {
                         Logger.e(TAG,
                                 "Found multiple roots [%s, %s] which is not supported."
                                         + "  Invalidating model",
-                                Validators.checkNotNull(root).getContentId(), child.getContentId());
+                                Validators.checkNotNull(mRoot).getContentId(),
+                                child.getContentId());
                         return false;
                     }
                 }
-                root = child;
+                mRoot = child;
             } else {
                 // continuation tokens can not be roots.
                 Logger.e(TAG, "Invalid Root, type %s", child.getType());
@@ -1262,19 +1264,19 @@
 
     // Lazy creation of containers
     private ArrayList<UpdatableModelChild> getChildList(String parentKey) {
-        synchronized (lock) {
-            if (!containers.containsKey(parentKey)) {
-                containers.put(parentKey, new ArrayList<>());
+        synchronized (mLock) {
+            if (!mContainers.containsKey(parentKey)) {
+                mContainers.put(parentKey, new ArrayList<>());
             }
-            return containers.get(parentKey);
+            return mContainers.get(parentKey);
         }
     }
 
     private void traverseNode(UpdatableModelChild node, RemoveTracking<?> removeTracking) {
         if (node.getType() == Type.FEATURE) {
             removeTracking.filterStreamFeature(node.getModelFeature().getStreamFeature());
-            synchronized (lock) {
-                List<UpdatableModelChild> children = containers.get(node.getContentId());
+            synchronized (mLock) {
+                List<UpdatableModelChild> children = mContainers.get(node.getContentId());
                 if (children != null) {
                     for (UpdatableModelChild child : children) {
                         traverseNode(child, removeTracking);
@@ -1287,60 +1289,60 @@
     /** Track the continuation token location and model */
     @VisibleForTesting
     static final class TokenTracking {
-        final UpdatableModelToken tokenChild;
-        final String parentContentId;
-        final ArrayList<UpdatableModelChild> location;
+        final UpdatableModelToken mTokenChild;
+        final String mParentContentId;
+        final ArrayList<UpdatableModelChild> mLocation;
 
         TokenTracking(UpdatableModelToken tokenChild, String parentContentId,
                 ArrayList<UpdatableModelChild> location) {
-            this.tokenChild = tokenChild;
-            this.parentContentId = parentContentId;
-            this.location = location;
+            this.mTokenChild = tokenChild;
+            this.mParentContentId = parentContentId;
+            this.mLocation = location;
         }
     }
 
     // test only method for returning a copy of the tokens map
     @VisibleForTesting
     Map<ByteString, TokenTracking> getTokensForTest() {
-        synchronized (lock) {
-            return new HashMap<>(tokens);
+        synchronized (mLock) {
+            return new HashMap<>(mTokens);
         }
     }
 
     @VisibleForTesting
     boolean getDelayedTriggerRefreshForTest() {
-        synchronized (lock) {
-            return delayedTriggerRefresh;
+        synchronized (mLock) {
+            return mDelayedTriggerRefresh;
         }
     }
 
     @VisibleForTesting
     @RequestReason
     int getRequestReasonForTest() {
-        synchronized (lock) {
-            return requestReason;
+        synchronized (mLock) {
+            return mRequestReason;
         }
     }
 
     @VisibleForTesting
     void clearRootChildrenForTest() {
-        synchronized (lock) {
-            if (root == null) {
+        synchronized (mLock) {
+            if (mRoot == null) {
                 return;
             }
 
-            containers.remove(root.getContentId());
+            mContainers.remove(mRoot.getContentId());
         }
     }
 
     private static final class ModelState {
-        final UiContext uiContext;
+        final UiContext mUiContext;
         @State
-        final int state;
+        final int mState;
 
         private ModelState(UiContext uiContext, @State int state) {
-            this.uiContext = uiContext;
-            this.state = state;
+            this.mUiContext = uiContext;
+            this.mState = state;
         }
 
         static ModelState initializing() {
@@ -1356,20 +1358,20 @@
         }
 
         public boolean isReady() {
-            return state == State.READY;
+            return mState == State.READY;
         }
 
         public boolean isInvalidated() {
-            return state == State.INVALIDATED;
+            return mState == State.INVALIDATED;
         }
 
         public boolean isInitializing() {
-            return state == State.INITIALIZING;
+            return mState == State.INITIALIZING;
         }
 
         @State
         public int getState() {
-            return state;
+            return mState;
         }
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedmodelprovider/FeedModelProviderFactory.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedmodelprovider/FeedModelProviderFactory.java
index d577f3b..6429e25 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedmodelprovider/FeedModelProviderFactory.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedmodelprovider/FeedModelProviderFactory.java
@@ -23,31 +23,31 @@
  * FeedModelProvider}.
  */
 public final class FeedModelProviderFactory implements ModelProviderFactory {
-    private final FeedSessionManager feedSessionManager;
-    private final ThreadUtils threadUtils;
-    private final TimingUtils timingUtils;
-    private final TaskQueue taskQueue;
-    private final MainThreadRunner mainThreadRunner;
-    private final Configuration config;
-    private final BasicLoggingApi basicLoggingApi;
+    private final FeedSessionManager mFeedSessionManager;
+    private final ThreadUtils mThreadUtils;
+    private final TimingUtils mTimingUtils;
+    private final TaskQueue mTaskQueue;
+    private final MainThreadRunner mMainThreadRunner;
+    private final Configuration mConfig;
+    private final BasicLoggingApi mBasicLoggingApi;
 
     public FeedModelProviderFactory(FeedSessionManager feedSessionManager, ThreadUtils threadUtils,
             TimingUtils timingUtils, TaskQueue taskQueue, MainThreadRunner mainThreadRunner,
             Configuration config, BasicLoggingApi basicLoggingApi) {
-        this.feedSessionManager = feedSessionManager;
-        this.threadUtils = threadUtils;
-        this.timingUtils = timingUtils;
-        this.taskQueue = taskQueue;
-        this.mainThreadRunner = mainThreadRunner;
-        this.config = config;
-        this.basicLoggingApi = basicLoggingApi;
+        this.mFeedSessionManager = feedSessionManager;
+        this.mThreadUtils = threadUtils;
+        this.mTimingUtils = timingUtils;
+        this.mTaskQueue = taskQueue;
+        this.mMainThreadRunner = mainThreadRunner;
+        this.mConfig = config;
+        this.mBasicLoggingApi = basicLoggingApi;
     }
 
     @Override
     public ModelProvider create(String sessionId, UiContext uiContext) {
-        FeedModelProvider modelProvider = new FeedModelProvider(feedSessionManager, threadUtils,
-                timingUtils, taskQueue, mainThreadRunner, null, config, basicLoggingApi);
-        feedSessionManager.getExistingSession(sessionId, modelProvider, uiContext);
+        FeedModelProvider modelProvider = new FeedModelProvider(mFeedSessionManager, mThreadUtils,
+                mTimingUtils, mTaskQueue, mMainThreadRunner, null, mConfig, mBasicLoggingApi);
+        mFeedSessionManager.getExistingSession(sessionId, modelProvider, uiContext);
         return modelProvider;
     }
 
@@ -61,9 +61,10 @@
     public ModelProvider createNew(
             /*@Nullable*/ ViewDepthProvider viewDepthProvider,
             /*@Nullable*/ Predicate<StreamStructure> filterPredicate, UiContext uiContext) {
-        FeedModelProvider modelProvider = new FeedModelProvider(feedSessionManager, threadUtils,
-                timingUtils, taskQueue, mainThreadRunner, filterPredicate, config, basicLoggingApi);
-        feedSessionManager.getNewSession(
+        FeedModelProvider modelProvider =
+                new FeedModelProvider(mFeedSessionManager, mThreadUtils, mTimingUtils, mTaskQueue,
+                        mMainThreadRunner, filterPredicate, mConfig, mBasicLoggingApi);
+        mFeedSessionManager.getNewSession(
                 modelProvider, modelProvider.getViewDepthProvider(viewDepthProvider), uiContext);
         return modelProvider;
     }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedmodelprovider/internal/FeatureChangeImpl.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedmodelprovider/internal/FeatureChangeImpl.java
index 37b13852..ae83e5c 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedmodelprovider/internal/FeatureChangeImpl.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedmodelprovider/internal/FeatureChangeImpl.java
@@ -24,54 +24,54 @@
  * </ol>
  */
 public final class FeatureChangeImpl implements FeatureChange {
-    private final ModelFeature modelFeature;
-    private final ChildChangesImpl childChanges;
-    private boolean featureChanged;
+    private final ModelFeature mModelFeature;
+    private final ChildChangesImpl mChildChanges;
+    private boolean mFeatureChanged;
 
     public FeatureChangeImpl(ModelFeature modelFeature) {
-        this.modelFeature = modelFeature;
-        this.childChanges = new ChildChangesImpl();
+        this.mModelFeature = modelFeature;
+        this.mChildChanges = new ChildChangesImpl();
     }
 
     /** Returns the String ContentId of the ModelFeature which was changed. */
     @Override
     public String getContentId() {
-        return modelFeature.getStreamFeature().getContentId();
+        return mModelFeature.getStreamFeature().getContentId();
     }
 
     /** This is called to indicate the Content changed for this ModelFeature. */
     public void setFeatureChanged(boolean value) {
-        featureChanged = value;
+        mFeatureChanged = value;
     }
 
     /** Returns {@code true} if the ModelFeature changed. */
     public boolean isFeatureChanged() {
-        return featureChanged;
+        return mFeatureChanged;
     }
 
     /** Returns the ModelFeature that was changed. */
     public ModelFeature getModelFeature() {
-        return modelFeature;
+        return mModelFeature;
     }
 
     /** Returns the structural changes to the ModelFeature. */
     public ChildChanges getChildChanges() {
-        return childChanges;
+        return mChildChanges;
     }
 
     public ChildChangesImpl getChildChangesImpl() {
-        return childChanges;
+        return mChildChanges;
     }
 
     /** Structure used to define the children changes. */
     public static final class ChildChangesImpl implements ChildChanges {
-        private final List<ModelChild> appendChildren;
-        private final List<ModelChild> removedChildren;
+        private final List<ModelChild> mAppendChildren;
+        private final List<ModelChild> mRemovedChildren;
 
         @VisibleForTesting
         ChildChangesImpl() {
-            this.appendChildren = new ArrayList<>();
-            this.removedChildren = new ArrayList<>();
+            this.mAppendChildren = new ArrayList<>();
+            this.mRemovedChildren = new ArrayList<>();
         }
 
         /**
@@ -80,22 +80,22 @@
          */
         @Override
         public List<ModelChild> getAppendedChildren() {
-            return appendChildren;
+            return mAppendChildren;
         }
 
         @Override
         public List<ModelChild> getRemovedChildren() {
-            return removedChildren;
+            return mRemovedChildren;
         }
 
         /** Add a child to be appended to the ModelFeature children List. */
         public void addAppendChild(ModelChild child) {
-            appendChildren.add(child);
+            mAppendChildren.add(child);
         }
 
         /** Remove a child from the ModelFeature children List. */
         public void removeChild(ModelChild child) {
-            removedChildren.add(child);
+            mRemovedChildren.add(child);
         }
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedmodelprovider/internal/ModelChildBinder.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedmodelprovider/internal/ModelChildBinder.java
index d1a893c..f76379b 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedmodelprovider/internal/ModelChildBinder.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedmodelprovider/internal/ModelChildBinder.java
@@ -27,19 +27,19 @@
 public final class ModelChildBinder {
     private static final String TAG = "ModelChildBinder";
 
-    private final FeedSessionManager feedSessionManager;
-    private final CursorProvider cursorProvider;
-    private final TimingUtils timingUtils;
+    private final FeedSessionManager mFeedSessionManager;
+    private final CursorProvider mCursorProvider;
+    private final TimingUtils mTimingUtils;
 
     public ModelChildBinder(FeedSessionManager feedSessionManager, CursorProvider cursorProvider,
             TimingUtils timingUtils) {
-        this.feedSessionManager = feedSessionManager;
-        this.cursorProvider = cursorProvider;
-        this.timingUtils = timingUtils;
+        this.mFeedSessionManager = feedSessionManager;
+        this.mCursorProvider = cursorProvider;
+        this.mTimingUtils = timingUtils;
     }
 
     public boolean bindChildren(List<UpdatableModelChild> childrenToBind) {
-        ElapsedTimeTracker timeTracker = timingUtils.getElapsedTimeTracker(TAG);
+        ElapsedTimeTracker timeTracker = mTimingUtils.getElapsedTimeTracker(TAG);
         Map<String, UpdatableModelChild> bindingChildren = new HashMap<>();
         List<String> contentIds = new ArrayList<>();
         for (UpdatableModelChild child : childrenToBind) {
@@ -48,7 +48,7 @@
             bindingChildren.put(key, child);
         }
 
-        Result<List<PayloadWithId>> results = feedSessionManager.getStreamFeatures(contentIds);
+        Result<List<PayloadWithId>> results = mFeedSessionManager.getStreamFeatures(contentIds);
         if (!results.isSuccessful()) {
             // If we failed, it's likely that this ModelProvider will soon be invalidated by the
             // FeedSessionManager
@@ -68,7 +68,7 @@
                 if (child.getType() == Type.UNBOUND) {
                     if (payload.hasStreamFeature()) {
                         child.bindFeature(new UpdatableModelFeature(
-                                payload.getStreamFeature(), cursorProvider));
+                                payload.getStreamFeature(), mCursorProvider));
                     } else if (payload.hasStreamToken()) {
                         child.bindToken(new UpdatableModelToken(payload.getStreamToken(), false));
                         continue;
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedmodelprovider/internal/ModelCursorImpl.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedmodelprovider/internal/ModelCursorImpl.java
index 8e7d722..aa2016aa 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedmodelprovider/internal/ModelCursorImpl.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedmodelprovider/internal/ModelCursorImpl.java
@@ -28,21 +28,21 @@
 public final class ModelCursorImpl implements ModelCursor, Dumpable {
     private static final String TAG = "ModelCursorImpl";
 
-    private final Object lock = new Object();
+    private final Object mLock = new Object();
 
-    private final String parentContentId;
+    private final String mParentContentId;
 
     @GuardedBy("lock")
-    private final List<UpdatableModelChild> childList;
+    private final List<UpdatableModelChild> mChildList;
 
     /*@Nullable*/
     @GuardedBy("lock")
-    private CursorIterator iterator;
+    private CursorIterator mIterator;
 
     // #dump() operation counts
-    private int updatesAtEnd;
-    private int appendCount;
-    private int removeCount;
+    private int mUpdatesAtEnd;
+    private int mAppendCount;
+    private int mRemoveCount;
 
     /**
      * Create a new ModelCursorImpl. The {@code childList} needs to be a copy of the original list
@@ -51,23 +51,23 @@
      * featureChang)}.
      */
     public ModelCursorImpl(String parentContentId, List<UpdatableModelChild> childList) {
-        this.parentContentId = parentContentId;
-        this.childList = new ArrayList<>(childList);
-        this.iterator = new CursorIterator();
+        this.mParentContentId = parentContentId;
+        this.mChildList = new ArrayList<>(childList);
+        this.mIterator = new CursorIterator();
     }
 
     public String getParentContentId() {
-        return parentContentId;
+        return mParentContentId;
     }
 
     public void updateIterator(FeatureChange featureChange) {
         // if the state has been released then ignore the change
         if (isAtEnd()) {
             Logger.i(TAG, "Ignoring Update on cursor currently at end");
-            updatesAtEnd++;
+            mUpdatesAtEnd++;
             return;
         }
-        synchronized (lock) {
+        synchronized (mLock) {
             ChildChanges childChanges = featureChange.getChildChanges();
             Logger.i(TAG, "Update Cursor, removes %s, appends %s",
                     childChanges.getRemovedChildren().size(),
@@ -77,8 +77,8 @@
 
             for (ModelChild modelChild : featureChange.getChildChanges().getAppendedChildren()) {
                 if (modelChild instanceof UpdatableModelChild) {
-                    childList.add(((UpdatableModelChild) modelChild));
-                    appendCount++;
+                    mChildList.add(((UpdatableModelChild) modelChild));
+                    mAppendCount++;
                 } else {
                     Logger.e(TAG, "non-UpdatableModelChild found, ignored");
                 }
@@ -92,23 +92,23 @@
         }
         // Remove only needs to remove all children that are beyond the current position because we
         // have visited everything before and can't revisit them with this cursor.
-        synchronized (lock) {
-            CursorIterator cursorIterator = Validators.checkNotNull(iterator);
+        synchronized (mLock) {
+            CursorIterator cursorIterator = Validators.checkNotNull(mIterator);
             int currentPosition = cursorIterator.getPosition();
             List<UpdatableModelChild> realRemoves = new ArrayList<>();
             for (ModelChild modelChild : children) {
                 String childKey = modelChild.getContentId();
                 // This assumes removes are rare so we can walk the list for each deleted child.
-                for (int i = currentPosition; i < childList.size(); i++) {
-                    UpdatableModelChild child = childList.get(i);
+                for (int i = currentPosition; i < mChildList.size(); i++) {
+                    UpdatableModelChild child = mChildList.get(i);
                     if (child.getContentId().equals(childKey)) {
                         realRemoves.add(child);
                         break;
                     }
                 }
             }
-            removeCount += realRemoves.size();
-            childList.removeAll(realRemoves);
+            mRemoveCount += realRemoves.size();
+            mChildList.removeAll(realRemoves);
             Logger.i(TAG, "Removed %s children from the Cursor", realRemoves.size());
         }
     }
@@ -118,15 +118,15 @@
     public ModelChild getNextItem() {
         // The TimeoutSessionImpl may use the cursor to access the model structure
         ModelChild nextChild;
-        synchronized (lock) {
-            if (iterator == null || !iterator.hasNext()) {
+        synchronized (mLock) {
+            if (mIterator == null || !mIterator.hasNext()) {
                 release();
                 return null;
             }
-            nextChild = iterator.next();
+            nextChild = mIterator.next();
             // If we just hit the last element in the iterator, free all the resources for this
             // cursor.
-            if (!iterator.hasNext()) {
+            if (!mIterator.hasNext()) {
                 release();
             }
             // If we have a synthetic token, this is the end of the cursor.
@@ -147,48 +147,48 @@
     /** Release all the state assocated with this cursor */
     public void release() {
         // This could be called on a background thread.
-        synchronized (lock) {
-            iterator = null;
+        synchronized (mLock) {
+            mIterator = null;
         }
     }
 
     @Override
     public boolean isAtEnd() {
-        synchronized (lock) {
-            return iterator == null || !this.iterator.hasNext();
+        synchronized (mLock) {
+            return mIterator == null || !this.mIterator.hasNext();
         }
     }
 
     @VisibleForTesting
     final class CursorIterator implements Iterator<UpdatableModelChild> {
-        private int cursor;
+        private int mCursor;
 
         @Override
         public boolean hasNext() {
-            synchronized (lock) {
-                return cursor < childList.size();
+            synchronized (mLock) {
+                return mCursor < mChildList.size();
             }
         }
 
         @Override
         public UpdatableModelChild next() {
-            synchronized (lock) {
-                if (cursor >= childList.size()) {
+            synchronized (mLock) {
+                if (mCursor >= mChildList.size()) {
                     throw new NoSuchElementException();
                 }
-                return childList.get(cursor++);
+                return mChildList.get(mCursor++);
             }
         }
 
         int getPosition() {
-            return cursor;
+            return mCursor;
         }
     }
 
     @VisibleForTesting
     List<UpdatableModelChild> getChildListForTesting() {
-        synchronized (lock) {
-            return new ArrayList<>(childList);
+        synchronized (mLock) {
+            return new ArrayList<>(mChildList);
         }
     }
 
@@ -196,8 +196,8 @@
     public void dump(Dumper dumper) {
         dumper.title(TAG);
         dumper.forKey("atEnd").value(isAtEnd());
-        dumper.forKey("updatesPostAtEnd").value(updatesAtEnd).compactPrevious();
-        dumper.forKey("appendCount").value(appendCount).compactPrevious();
-        dumper.forKey("removeCount").value(removeCount).compactPrevious();
+        dumper.forKey("updatesPostAtEnd").value(mUpdatesAtEnd).compactPrevious();
+        dumper.forKey("appendCount").value(mAppendCount).compactPrevious();
+        dumper.forKey("removeCount").value(mRemoveCount).compactPrevious();
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedmodelprovider/internal/ModelMutationImpl.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedmodelprovider/internal/ModelMutationImpl.java
index f9d2511..82d79ed 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedmodelprovider/internal/ModelMutationImpl.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedmodelprovider/internal/ModelMutationImpl.java
@@ -20,59 +20,59 @@
 public final class ModelMutationImpl implements ModelMutation {
     /** The data representing the Change to the model. */
     public static final class Change {
-        public final List<StreamStructure> structureChanges = new ArrayList<>();
-        public final List<StreamStructure> updateChanges = new ArrayList<>();
-        /*@Nullable*/ public MutationContext mutationContext;
-        /*@Nullable*/ public String sessionId;
-        public boolean cachedBindings;
+        public final List<StreamStructure> mStructureChanges = new ArrayList<>();
+        public final List<StreamStructure> mUpdateChanges = new ArrayList<>();
+        /*@Nullable*/ public MutationContext mMutationContext;
+        /*@Nullable*/ public String mSessionId;
+        public boolean mCachedBindings;
     }
 
-    private final Committer<Void, Change> committer;
+    private final Committer<Void, Change> mCommitter;
     @VisibleForTesting
-    final Change change = new Change();
+    final Change mChange = new Change();
 
     public ModelMutationImpl(Committer<Void, Change> committer) {
-        this.committer = committer;
+        this.mCommitter = committer;
     }
 
     @Override
     public ModelMutation addChild(StreamStructure streamStructure) {
-        change.structureChanges.add(streamStructure);
+        mChange.mStructureChanges.add(streamStructure);
         return this;
     }
 
     @Override
     public ModelMutation removeChild(StreamStructure streamStructure) {
-        change.structureChanges.add(streamStructure);
+        mChange.mStructureChanges.add(streamStructure);
         return this;
     }
 
     @Override
     public ModelMutation updateChild(StreamStructure updateChild) {
-        change.updateChanges.add(updateChild);
+        mChange.mUpdateChanges.add(updateChild);
         return this;
     }
 
     @Override
     public ModelMutation setMutationContext(MutationContext mutationContext) {
-        change.mutationContext = mutationContext;
+        mChange.mMutationContext = mutationContext;
         return this;
     }
 
     @Override
     public ModelMutation setSessionId(String sessionId) {
-        change.sessionId = sessionId;
+        mChange.mSessionId = sessionId;
         return this;
     }
 
     @Override
     public ModelMutation hasCachedBindings(boolean cachedBindings) {
-        change.cachedBindings = cachedBindings;
+        mChange.mCachedBindings = cachedBindings;
         return this;
     }
 
     @Override
     public void commit() {
-        committer.commit(change);
+        mCommitter.commit(mChange);
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedmodelprovider/internal/UpdatableModelChild.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedmodelprovider/internal/UpdatableModelChild.java
index 4b1cca4..9fda482 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedmodelprovider/internal/UpdatableModelChild.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedmodelprovider/internal/UpdatableModelChild.java
@@ -16,52 +16,52 @@
 public final class UpdatableModelChild implements ModelChild {
     private static final String TAG = "UpdatableModelChild";
 
-    private final String contentId;
-    /*@Nullable*/ private final String parentContentId;
+    private final String mContentId;
+    /*@Nullable*/ private final String mParentContentId;
 
-    private @Type int type = Type.UNBOUND;
-    private UpdatableModelFeature modelFeature;
-    private UpdatableModelToken modelToken;
+    private @Type int mType = Type.UNBOUND;
+    private UpdatableModelFeature mModelFeature;
+    private UpdatableModelToken mModelToken;
 
     public UpdatableModelChild(String contentId, /*@Nullable*/ String parentContentId) {
-        this.contentId = contentId;
-        this.parentContentId = parentContentId;
+        this.mContentId = contentId;
+        this.mParentContentId = parentContentId;
     }
 
     void bindFeature(UpdatableModelFeature modelFeature) {
         validateType(Type.UNBOUND);
-        this.modelFeature = modelFeature;
-        type = Type.FEATURE;
+        this.mModelFeature = modelFeature;
+        mType = Type.FEATURE;
     }
 
     public void bindToken(UpdatableModelToken modelToken) {
         validateType(Type.UNBOUND);
-        this.modelToken = modelToken;
-        type = Type.TOKEN;
+        this.mModelToken = modelToken;
+        mType = Type.TOKEN;
     }
 
     @Override
     public ModelFeature getModelFeature() {
         validateType(Type.FEATURE);
-        return modelFeature;
+        return mModelFeature;
     }
 
     @Override
     public ModelToken getModelToken() {
         validateType(Type.TOKEN);
-        return modelToken;
+        return mModelToken;
     }
 
     public UpdatableModelToken getUpdatableModelToken() {
         validateType(Type.TOKEN);
-        return modelToken;
+        return mModelToken;
     }
 
     void updateFeature(StreamPayload payload) {
-        switch (type) {
+        switch (mType) {
             case Type.FEATURE:
                 if (payload.hasStreamFeature()) {
-                    modelFeature.setFeatureValue(payload.getStreamFeature());
+                    mModelFeature.setFeatureValue(payload.getStreamFeature());
                 } else {
                     Logger.e(
                             TAG, "Attempting to update a ModelFeature without providing a feature");
@@ -74,35 +74,35 @@
                 Logger.e(TAG, "updateFeature called on UNBOUND child");
                 break;
             default:
-                Logger.e(TAG, "Update called for unsupported type: %s", type);
+                Logger.e(TAG, "Update called for unsupported type: %s", mType);
         }
     }
 
     @Override
     public @Type int getType() {
-        return type;
+        return mType;
     }
 
     @Override
     public String getContentId() {
-        return contentId;
+        return mContentId;
     }
 
     /*@Nullable*/
     @Override
     public String getParentId() {
-        return parentContentId;
+        return mParentContentId;
     }
 
     @Override
     public boolean hasParentId() {
-        return !TextUtils.isEmpty(parentContentId);
+        return !TextUtils.isEmpty(mParentContentId);
     }
 
     private void validateType(@Type int type) {
-        if (this.type != type) {
-            throw new IllegalStateException(
-                    String.format("ModelChild type error - Type %s, expected %s", this.type, type));
+        if (this.mType != type) {
+            throw new IllegalStateException(String.format(
+                    "ModelChild type error - Type %s, expected %s", this.mType, type));
         }
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedmodelprovider/internal/UpdatableModelFeature.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedmodelprovider/internal/UpdatableModelFeature.java
index 35142616..98e3e30 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedmodelprovider/internal/UpdatableModelFeature.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedmodelprovider/internal/UpdatableModelFeature.java
@@ -16,22 +16,22 @@
 /** Implementation of the {@link ModelFeature} */
 public final class UpdatableModelFeature
         extends FeedObservable<FeatureChangeObserver> implements ModelFeature {
-    private StreamFeature streamFeature;
-    private final CursorProvider cursorProvider;
+    private StreamFeature mStreamFeature;
+    private final CursorProvider mCursorProvider;
 
     UpdatableModelFeature(StreamFeature streamFeature, CursorProvider cursorProvider) {
-        this.streamFeature = streamFeature;
-        this.cursorProvider = cursorProvider;
+        this.mStreamFeature = streamFeature;
+        this.mCursorProvider = cursorProvider;
     }
 
     @Override
     public StreamFeature getStreamFeature() {
-        return streamFeature;
+        return mStreamFeature;
     }
 
     @Override
     public ModelCursor getCursor() {
-        return cursorProvider.getCursor(streamFeature.getContentId());
+        return mCursorProvider.getCursor(mStreamFeature.getContentId());
     }
 
     @Override
@@ -41,12 +41,12 @@
     }
 
     public List<FeatureChangeObserver> getObserversToNotify() {
-        synchronized (observers) {
-            return new ArrayList<>(observers);
+        synchronized (mObservers) {
+            return new ArrayList<>(mObservers);
         }
     }
 
     void setFeatureValue(StreamFeature streamFeature) {
-        this.streamFeature = streamFeature;
+        this.mStreamFeature = streamFeature;
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedmodelprovider/internal/UpdatableModelToken.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedmodelprovider/internal/UpdatableModelToken.java
index 10040ca..369306c 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedmodelprovider/internal/UpdatableModelToken.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedmodelprovider/internal/UpdatableModelToken.java
@@ -15,27 +15,27 @@
 /** Implementation of the {@link ModelToken}. */
 public final class UpdatableModelToken
         extends FeedObservable<TokenCompletedObserver> implements ModelToken {
-    private final StreamToken token;
-    private final boolean isSynthetic;
+    private final StreamToken mToken;
+    private final boolean mIsSynthetic;
 
     public UpdatableModelToken(StreamToken token, boolean isSynthetic) {
-        this.token = token;
-        this.isSynthetic = isSynthetic;
+        this.mToken = token;
+        this.mIsSynthetic = isSynthetic;
     }
 
     @Override
     public boolean isSynthetic() {
-        return isSynthetic;
+        return mIsSynthetic;
     }
 
     @Override
     public StreamToken getStreamToken() {
-        return token;
+        return mToken;
     }
 
     public List<TokenCompletedObserver> getObserversToNotify() {
-        synchronized (observers) {
-            return new ArrayList<>(observers);
+        synchronized (mObservers) {
+            return new ArrayList<>(mObservers);
         }
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedprotocoladapter/FeedProtocolAdapter.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedprotocoladapter/FeedProtocolAdapter.java
index fb9e7a8..95328b55 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedprotocoladapter/FeedProtocolAdapter.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedprotocoladapter/FeedProtocolAdapter.java
@@ -46,26 +46,26 @@
     private static final String TAG = "FeedProtocolAdapter";
     static final String CONTENT_ID_DELIMITER = "::";
 
-    private final List<DataOperationTransformer> dataOperationTransformers;
-    private final List<RequiredContentAdapter> requiredContentAdapters;
-    private final TimingUtils timingUtils;
+    private final List<DataOperationTransformer> mDataOperationTransformers;
+    private final List<RequiredContentAdapter> mRequiredContentAdapters;
+    private final TimingUtils mTimingUtils;
 
     // Operation counts for #dump(Dumpable)
-    private int responseHandlingCount;
-    private int convertContentIdCount;
+    private int mResponseHandlingCount;
+    private int mConvertContentIdCount;
 
     public FeedProtocolAdapter(
             List<RequiredContentAdapter> requiredContentAdapters, TimingUtils timingUtils) {
-        this.timingUtils = timingUtils;
-        this.requiredContentAdapters = requiredContentAdapters;
-        dataOperationTransformers = new ArrayList<>(2);
-        dataOperationTransformers.add(new FeatureDataOperationTransformer());
-        dataOperationTransformers.add(new ContentDataOperationTransformer());
+        this.mTimingUtils = timingUtils;
+        this.mRequiredContentAdapters = requiredContentAdapters;
+        mDataOperationTransformers = new ArrayList<>(2);
+        mDataOperationTransformers.add(new FeatureDataOperationTransformer());
+        mDataOperationTransformers.add(new ContentDataOperationTransformer());
     }
 
     @Override
     public String getStreamContentId(ContentId contentId) {
-        convertContentIdCount++;
+        mConvertContentIdCount++;
         return createContentId(contentId);
     }
 
@@ -98,7 +98,7 @@
 
     @Override
     public Result<Model> createModel(Response response) {
-        responseHandlingCount++;
+        mResponseHandlingCount++;
 
         FeedResponse feedResponse = response.getExtension(FeedResponse.feedResponse);
         Logger.i(TAG, "createModel, operations %s", feedResponse.getDataOperationCount());
@@ -118,11 +118,11 @@
 
     private Result<List<StreamDataOperation>> createOperations(
             List<DataOperation> dataOperations, FeedResponseMetadata responseMetadata) {
-        ElapsedTimeTracker totalTimeTracker = timingUtils.getElapsedTimeTracker(TAG);
+        ElapsedTimeTracker totalTimeTracker = mTimingUtils.getElapsedTimeTracker(TAG);
         List<StreamDataOperation> streamDataOperations = new ArrayList<>();
         Set<ContentId> requiredContentIds = new HashSet<>();
         for (DataOperation operation : dataOperations) {
-            for (RequiredContentAdapter adapter : requiredContentAdapters) {
+            for (RequiredContentAdapter adapter : mRequiredContentAdapters) {
                 requiredContentIds.addAll(adapter.determineRequiredContentIds(operation));
             }
 
@@ -229,7 +229,7 @@
     private StreamDataOperation.Builder transformOperation(DataOperation operation,
             StreamDataOperation.Builder streamDataOperation,
             FeedResponseMetadata feedResponseMetadata) {
-        for (DataOperationTransformer transformer : dataOperationTransformers) {
+        for (DataOperationTransformer transformer : mDataOperationTransformers) {
             streamDataOperation =
                     transformer.transform(operation, streamDataOperation, feedResponseMetadata);
         }
@@ -321,8 +321,8 @@
     @Override
     public void dump(Dumper dumper) {
         dumper.title(TAG);
-        dumper.forKey("responseHandlingCount").value(responseHandlingCount);
-        dumper.forKey("convertContentIdCount").value(convertContentIdCount).compactPrevious();
+        dumper.forKey("responseHandlingCount").value(mResponseHandlingCount);
+        dumper.forKey("convertContentIdCount").value(mConvertContentIdCount).compactPrevious();
     }
 
     private static Operation operationToStreamOperation(DataOperation.Operation operation) {
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedrequestmanager/FeedActionUploadRequestManager.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedrequestmanager/FeedActionUploadRequestManager.java
index f8c3c40a..de69bff 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedrequestmanager/FeedActionUploadRequestManager.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedrequestmanager/FeedActionUploadRequestManager.java
@@ -41,46 +41,47 @@
 public final class FeedActionUploadRequestManager implements ActionUploadRequestManager {
     private static final String TAG = "ActionUploadRequest";
 
-    private final Configuration configuration;
-    private final NetworkClient networkClient;
-    private final ProtocolAdapter protocolAdapter;
-    private final FeedExtensionRegistry extensionRegistry;
-    private final TaskQueue taskQueue;
-    private final ThreadUtils threadUtils;
-    private final Store store;
-    private final Clock clock;
-    private final long maxActionUploadAttempts;
+    private final Configuration mConfiguration;
+    private final NetworkClient mNetworkClient;
+    private final ProtocolAdapter mProtocolAdapter;
+    private final FeedExtensionRegistry mExtensionRegistry;
+    private final TaskQueue mTaskQueue;
+    private final ThreadUtils mThreadUtils;
+    private final Store mStore;
+    private final Clock mClock;
+    private final long mMaxActionUploadAttempts;
     // Total number of actions that can be uploaded in a chained batch request.
-    private final long maxActionsUploadsPerBatchedRequest;
+    private final long mMaxActionsUploadsPerBatchedRequest;
     // Maximum bytes that can be uploaded in a single request.
-    private final long maxBytesPerRequest;
-    private final long maxActionUploadTtl;
+    private final long mMaxBytesPerRequest;
+    private final long mMaxActionUploadTtl;
 
     public FeedActionUploadRequestManager(Configuration configuration, NetworkClient networkClient,
             ProtocolAdapter protocolAdapter, FeedExtensionRegistry extensionRegistry,
             TaskQueue taskQueue, ThreadUtils threadUtils, Store store, Clock clock) {
-        this.configuration = configuration;
-        this.networkClient = networkClient;
-        this.protocolAdapter = protocolAdapter;
-        this.extensionRegistry = extensionRegistry;
-        this.taskQueue = taskQueue;
-        this.threadUtils = threadUtils;
-        this.store = store;
-        this.clock = clock;
-        maxBytesPerRequest = configuration.getValueOrDefault(
+        this.mConfiguration = configuration;
+        this.mNetworkClient = networkClient;
+        this.mProtocolAdapter = protocolAdapter;
+        this.mExtensionRegistry = extensionRegistry;
+        this.mTaskQueue = taskQueue;
+        this.mThreadUtils = threadUtils;
+        this.mStore = store;
+        this.mClock = clock;
+        mMaxBytesPerRequest = configuration.getValueOrDefault(
                 ConfigKey.FEED_ACTION_SERVER_MAX_SIZE_PER_REQUEST, 4000L);
-        maxActionsUploadsPerBatchedRequest = configuration.getValueOrDefault(
+        mMaxActionsUploadsPerBatchedRequest = configuration.getValueOrDefault(
                 ConfigKey.FEED_ACTION_SERVER_MAX_ACTIONS_PER_REQUEST, 10L);
-        maxActionUploadAttempts =
+        mMaxActionUploadAttempts =
                 configuration.getValueOrDefault(ConfigKey.FEED_ACTION_MAX_UPLOAD_ATTEMPTS, 1L);
-        maxActionUploadTtl = configuration.getValueOrDefault(ConfigKey.FEED_ACTION_TTL_SECONDS, 0L);
+        mMaxActionUploadTtl =
+                configuration.getValueOrDefault(ConfigKey.FEED_ACTION_TTL_SECONDS, 0L);
     }
 
     @Override
     public void triggerUploadActions(Set<StreamUploadableAction> actions, ConsistencyToken token,
             Consumer<Result<ConsistencyToken>> consumer) {
-        if (maxActionUploadAttempts == 0 || maxBytesPerRequest == 0
-                || maxActionsUploadsPerBatchedRequest == 0) {
+        if (mMaxActionUploadAttempts == 0 || mMaxBytesPerRequest == 0
+                || mMaxActionsUploadsPerBatchedRequest == 0) {
             consumer.accept(Result.success(token));
             return;
         }
@@ -89,20 +90,20 @@
 
     private void triggerUploadActions(Set<StreamUploadableAction> actions, ConsistencyToken token,
             Consumer<Result<ConsistencyToken>> consumer, int uploadCount) {
-        threadUtils.checkNotMainThread();
+        mThreadUtils.checkNotMainThread();
         // Return the token if there are no actions to upload.
-        if (actions.isEmpty() || uploadCount >= maxActionsUploadsPerBatchedRequest) {
+        if (actions.isEmpty() || uploadCount >= mMaxActionsUploadsPerBatchedRequest) {
             consumer.accept(Result.success(token));
             return;
         }
         UploadableActionsRequestBuilder requestBuilder =
-                new UploadableActionsRequestBuilder(protocolAdapter);
+                new UploadableActionsRequestBuilder(mProtocolAdapter);
         int actionPayloadBytes = 0;
         Set<StreamUploadableAction> actionsToUpload = new HashSet<>();
         ArrayList<String> contentIds = new ArrayList<>();
         for (StreamUploadableAction action : actions) {
             int actionBytes = action.toByteArray().length;
-            if (maxBytesPerRequest > actionPayloadBytes + actionBytes) {
+            if (mMaxBytesPerRequest > actionPayloadBytes + actionBytes) {
                 actionsToUpload.add(action);
                 contentIds.add(action.getFeatureContentId());
                 actionPayloadBytes += actionBytes;
@@ -112,7 +113,7 @@
         }
 
         Result<List<SemanticPropertiesWithId>> semanticPropertiesResult =
-                store.getSemanticProperties(contentIds);
+                mStore.getSemanticProperties(contentIds);
         List<SemanticPropertiesWithId> semanticPropertiesList = new ArrayList<>();
         if (semanticPropertiesResult.isSuccessful()
                 && !semanticPropertiesResult.getValue().isEmpty()) {
@@ -120,7 +121,7 @@
         }
 
         Consumer<Result<ConsistencyToken>> tokenConsumer = result -> {
-            threadUtils.checkNotMainThread();
+            mThreadUtils.checkNotMainThread();
             if (result.isSuccessful()) {
                 actions.removeAll(actionsToUpload);
                 if (!actions.isEmpty()) {
@@ -142,18 +143,18 @@
     private void executeUploadActionRequest(Set<StreamUploadableAction> actions,
             UploadableActionsRequestBuilder requestBuilder,
             Consumer<Result<ConsistencyToken>> consumer) {
-        threadUtils.checkNotMainThread();
+        mThreadUtils.checkNotMainThread();
 
         String endpoint =
-                configuration.getValueOrDefault(ConfigKey.FEED_ACTION_SERVER_ENDPOINT, "");
+                mConfiguration.getValueOrDefault(ConfigKey.FEED_ACTION_SERVER_ENDPOINT, "");
         @HttpMethod
-        String httpMethod = configuration.getValueOrDefault(
+        String httpMethod = mConfiguration.getValueOrDefault(
                 ConfigKey.FEED_ACTION_SERVER_METHOD, HttpMethod.POST);
         HttpRequest httpRequest = RequestHelper.buildHttpRequest(
                 httpMethod, requestBuilder.build().toByteArray(), endpoint, /* locale= */ "");
 
         Logger.i(TAG, "Making Request: %s", httpRequest.getUri().getPath());
-        networkClient.send(httpRequest, input -> {
+        mNetworkClient.send(httpRequest, input -> {
             Logger.i(TAG, "Request: %s completed with response code: %s",
                     httpRequest.getUri().getPath(), input.getResponseCode());
             if (input.getResponseCode() != 200) {
@@ -165,7 +166,7 @@
                 }
                 Logger.e(TAG, "errorCode: %d", input.getResponseCode());
                 Logger.e(TAG, "errorResponse: %s", errorBody);
-                taskQueue.execute(Task.EXECUTE_UPLOAD_ACTION_REQUEST, TaskType.IMMEDIATE,
+                mTaskQueue.execute(Task.EXECUTE_UPLOAD_ACTION_REQUEST, TaskType.IMMEDIATE,
                         () -> { consumer.accept(Result.failure()); });
                 return;
             }
@@ -175,15 +176,15 @@
 
     private void handleUploadableActionResponseBytes(Set<StreamUploadableAction> actions,
             final byte[] responseBytes, final Consumer<Result<ConsistencyToken>> consumer) {
-        taskQueue.execute(Task.HANDLE_UPLOADABLE_ACTION_RESPONSE_BYTES, TaskType.IMMEDIATE, () -> {
+        mTaskQueue.execute(Task.HANDLE_UPLOADABLE_ACTION_RESPONSE_BYTES, TaskType.IMMEDIATE, () -> {
             Response response;
-            boolean isLengthPrefixed = configuration.getValueOrDefault(
+            boolean isLengthPrefixed = mConfiguration.getValueOrDefault(
                     ConfigKey.FEED_ACTION_SERVER_RESPONSE_LENGTH_PREFIXED, true);
             try {
                 response = Response.parseFrom(isLengthPrefixed
                                 ? RequestHelper.getLengthPrefixedValue(responseBytes)
                                 : responseBytes,
-                        extensionRegistry.getExtensionRegistry());
+                        mExtensionRegistry.getExtensionRegistry());
             } catch (IOException e) {
                 Logger.e(TAG, e, "Response parse failed");
                 handleUpdatingActionsOnFailure(actions);
@@ -195,7 +196,7 @@
             final Result<ConsistencyToken> contextResult;
             if (feedActionResponse.hasConsistencyToken()) {
                 contextResult = Result.success(feedActionResponse.getConsistencyToken());
-                UploadableActionMutation actionMutation = store.editUploadableActions();
+                UploadableActionMutation actionMutation = mStore.editUploadableActions();
                 for (StreamUploadableAction action : actions) {
                     actionMutation.remove(action, action.getFeatureContentId());
                 }
@@ -213,12 +214,13 @@
     }
 
     private void handleUpdatingActionsOnFailure(Set<StreamUploadableAction> actions) {
-        UploadableActionMutation actionMutation = store.editUploadableActions();
+        UploadableActionMutation actionMutation = mStore.editUploadableActions();
         for (StreamUploadableAction action : actions) {
             int uploadAttempts = action.getUploadAttempts();
-            long currentTime = TimeUnit.MILLISECONDS.toSeconds(clock.currentTimeMillis());
+            long currentTime = TimeUnit.MILLISECONDS.toSeconds(mClock.currentTimeMillis());
             long timeSinceUpload = currentTime - action.getTimestampSeconds();
-            if (uploadAttempts < maxActionUploadAttempts && timeSinceUpload < maxActionUploadTtl) {
+            if (uploadAttempts < mMaxActionUploadAttempts
+                    && timeSinceUpload < mMaxActionUploadTtl) {
                 actionMutation.upsert(
                         action.toBuilder().setUploadAttempts(uploadAttempts + 1).build(),
                         action.getFeatureContentId());
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedrequestmanager/FeedRequestManagerImpl.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedrequestmanager/FeedRequestManagerImpl.java
index 6d804f1..632d9d4 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedrequestmanager/FeedRequestManagerImpl.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedrequestmanager/FeedRequestManagerImpl.java
@@ -72,20 +72,20 @@
 public final class FeedRequestManagerImpl implements FeedRequestManager {
     private static final String TAG = "FeedRequestManagerImpl";
 
-    private final Configuration configuration;
-    private final NetworkClient networkClient;
-    private final ProtocolAdapter protocolAdapter;
-    private final FeedExtensionRegistry extensionRegistry;
-    private final SchedulerApi scheduler;
-    private final TaskQueue taskQueue;
-    private final TimingUtils timingUtils;
-    private final ThreadUtils threadUtils;
-    private final ActionReader actionReader;
-    private final Context context;
-    private final MainThreadRunner mainThreadRunner;
-    private final BasicLoggingApi basicLoggingApi;
-    private final TooltipSupportedApi tooltipSupportedApi;
-    private final ApplicationInfo applicationInfo;
+    private final Configuration mConfiguration;
+    private final NetworkClient mNetworkClient;
+    private final ProtocolAdapter mProtocolAdapter;
+    private final FeedExtensionRegistry mExtensionRegistry;
+    private final SchedulerApi mScheduler;
+    private final TaskQueue mTaskQueue;
+    private final TimingUtils mTimingUtils;
+    private final ThreadUtils mThreadUtils;
+    private final ActionReader mActionReader;
+    private final Context mContext;
+    private final MainThreadRunner mMainThreadRunner;
+    private final BasicLoggingApi mBasicLoggingApi;
+    private final TooltipSupportedApi mTooltipSupportedApi;
+    private final ApplicationInfo mApplicationInfo;
 
     public FeedRequestManagerImpl(Configuration configuration, NetworkClient networkClient,
             ProtocolAdapter protocolAdapter, FeedExtensionRegistry extensionRegistry,
@@ -93,29 +93,29 @@
             ThreadUtils threadUtils, ActionReader actionReader, Context context,
             ApplicationInfo applicationInfo, MainThreadRunner mainThreadRunner,
             BasicLoggingApi basicLoggingApi, TooltipSupportedApi tooltipSupportedApi) {
-        this.configuration = configuration;
-        this.networkClient = networkClient;
-        this.protocolAdapter = protocolAdapter;
-        this.extensionRegistry = extensionRegistry;
-        this.scheduler = scheduler;
-        this.taskQueue = taskQueue;
-        this.timingUtils = timingUtils;
-        this.threadUtils = threadUtils;
-        this.actionReader = actionReader;
-        this.context = context;
-        this.applicationInfo = applicationInfo;
-        this.mainThreadRunner = mainThreadRunner;
-        this.basicLoggingApi = basicLoggingApi;
-        this.tooltipSupportedApi = tooltipSupportedApi;
+        this.mConfiguration = configuration;
+        this.mNetworkClient = networkClient;
+        this.mProtocolAdapter = protocolAdapter;
+        this.mExtensionRegistry = extensionRegistry;
+        this.mScheduler = scheduler;
+        this.mTaskQueue = taskQueue;
+        this.mTimingUtils = timingUtils;
+        this.mThreadUtils = threadUtils;
+        this.mActionReader = actionReader;
+        this.mContext = context;
+        this.mApplicationInfo = applicationInfo;
+        this.mMainThreadRunner = mainThreadRunner;
+        this.mBasicLoggingApi = basicLoggingApi;
+        this.mTooltipSupportedApi = tooltipSupportedApi;
     }
 
     @Override
     public void loadMore(
             StreamToken streamToken, ConsistencyToken token, Consumer<Result<Model>> consumer) {
-        threadUtils.checkNotMainThread();
+        mThreadUtils.checkNotMainThread();
 
         Logger.i(TAG, "Task: FeedRequestManagerImpl LoadMore");
-        ElapsedTimeTracker timeTracker = timingUtils.getElapsedTimeTracker(TAG);
+        ElapsedTimeTracker timeTracker = mTimingUtils.getElapsedTimeTracker(TAG);
         RequestBuilder request = newDefaultRequest(RequestReason.MANUAL_CONTINUATION)
                                          .setPageToken(streamToken.getNextPageToken())
                                          .setConsistencyToken(token);
@@ -135,10 +135,10 @@
         Logger.i(TAG, "trigger refresh %s", reason);
         RequestBuilder request = newDefaultRequest(reason).setConsistencyToken(token);
 
-        if (threadUtils.isMainThread()) {
+        if (mThreadUtils.isMainThread()) {
             // This will make a new request, it should invalidate the existing head to delay
             // everything until the response is obtained.
-            taskQueue.execute(Task.REQUEST_MANAGER_TRIGGER_REFRESH, TaskType.HEAD_INVALIDATE,
+            mTaskQueue.execute(Task.REQUEST_MANAGER_TRIGGER_REFRESH, TaskType.HEAD_INVALIDATE,
                     () -> executeRequest(request, consumer));
         } else {
             executeRequest(request, consumer);
@@ -146,7 +146,7 @@
     }
 
     private RequestBuilder newDefaultRequest(@RequestReason int requestReason) {
-        return new RequestBuilder(context, applicationInfo, configuration, requestReason);
+        return new RequestBuilder(mContext, mApplicationInfo, mConfiguration, requestReason);
     }
 
     private static FeedQuery.RequestReason getWireRequestReason(@RequestReason int requestReason) {
@@ -175,9 +175,9 @@
     }
 
     private void executeRequest(RequestBuilder requestBuilder, Consumer<Result<Model>> consumer) {
-        threadUtils.checkNotMainThread();
+        mThreadUtils.checkNotMainThread();
         Result<List<DismissActionWithSemanticProperties>> dismissActionsResult =
-                actionReader.getDismissActionsWithSemanticProperties();
+                mActionReader.getDismissActionsWithSemanticProperties();
         if (dismissActionsResult.isSuccessful()) {
             requestBuilder.setActions(dismissActionsResult.getValue());
             for (DismissActionWithSemanticProperties dismiss : dismissActionsResult.getValue()) {
@@ -187,13 +187,13 @@
             Logger.e(TAG, "Error fetching dismiss actions");
         }
 
-        if (configuration.getValueOrDefault(ConfigKey.CARD_MENU_TOOLTIP_ELIGIBLE, false)) {
+        if (mConfiguration.getValueOrDefault(ConfigKey.CARD_MENU_TOOLTIP_ELIGIBLE, false)) {
             // We need use the main thread to call the {@link
             // TooltipSupportedApi#wouldTriggerHelpUi}.
-            mainThreadRunner.execute("Check Tooltips", () -> {
-                tooltipSupportedApi.wouldTriggerHelpUi(
+            mMainThreadRunner.execute("Check Tooltips", () -> {
+                mTooltipSupportedApi.wouldTriggerHelpUi(
                         FeatureName.CARD_MENU_TOOLTIP, (wouldTrigger) -> {
-                            taskQueue.execute(Task.SEND_REQUEST, TaskType.IMMEDIATE, () -> {
+                            mTaskQueue.execute(Task.SEND_REQUEST, TaskType.IMMEDIATE, () -> {
                                 requestBuilder.setCardMenuTooltipWouldTrigger(wouldTrigger);
                                 sendRequest(requestBuilder, consumer);
                             });
@@ -205,19 +205,19 @@
     }
 
     private void sendRequest(RequestBuilder requestBuilder, Consumer<Result<Model>> consumer) {
-        threadUtils.checkNotMainThread();
-        String endpoint = configuration.getValueOrDefault(ConfigKey.FEED_SERVER_ENDPOINT, "");
+        mThreadUtils.checkNotMainThread();
+        String endpoint = mConfiguration.getValueOrDefault(ConfigKey.FEED_SERVER_ENDPOINT, "");
         @HttpMethod
         String httpMethod =
-                configuration.getValueOrDefault(ConfigKey.FEED_SERVER_METHOD, HttpMethod.GET);
+                mConfiguration.getValueOrDefault(ConfigKey.FEED_SERVER_METHOD, HttpMethod.GET);
 
         HttpRequest httpRequest =
                 RequestHelper.buildHttpRequest(httpMethod, requestBuilder.build().toByteArray(),
-                        endpoint, LocaleUtils.getLanguageTag(context));
+                        endpoint, LocaleUtils.getLanguageTag(mContext));
 
         Logger.i(TAG, "Making Request: %s", httpRequest.getUri().getPath());
-        networkClient.send(httpRequest, input -> {
-            basicLoggingApi.onServerRequest(requestBuilder.clientLoggingRequestReason);
+        mNetworkClient.send(httpRequest, input -> {
+            mBasicLoggingApi.onServerRequest(requestBuilder.mClientLoggingRequestReason);
             Logger.i(TAG, "Request: %s completed with response code: %s",
                     httpRequest.getUri().getPath(), input.getResponseCode());
             if (input.getResponseCode() != 200) {
@@ -230,7 +230,7 @@
                 Logger.e(TAG, "errorCode: %d", input.getResponseCode());
                 Logger.e(TAG, "errorResponse: %s", errorBody);
                 if (!requestBuilder.hasPageToken()) {
-                    scheduler.onRequestError(input.getResponseCode());
+                    mScheduler.onRequestError(input.getResponseCode());
                 }
                 consumer.accept(Result.failure());
                 return;
@@ -241,44 +241,44 @@
 
     private void handleResponseBytes(
             final byte[] responseBytes, final Consumer<Result<Model>> consumer) {
-        taskQueue.execute(Task.HANDLE_RESPONSE_BYTES, TaskType.IMMEDIATE, () -> {
+        mTaskQueue.execute(Task.HANDLE_RESPONSE_BYTES, TaskType.IMMEDIATE, () -> {
             Response response;
-            boolean isLengthPrefixed = configuration.getValueOrDefault(
+            boolean isLengthPrefixed = mConfiguration.getValueOrDefault(
                     ConfigKey.FEED_SERVER_RESPONSE_LENGTH_PREFIXED, true);
             try {
                 response = Response.parseFrom(isLengthPrefixed
                                 ? RequestHelper.getLengthPrefixedValue(responseBytes)
                                 : responseBytes,
-                        extensionRegistry.getExtensionRegistry());
+                        mExtensionRegistry.getExtensionRegistry());
             } catch (IOException e) {
                 Logger.e(TAG, e, "Response parse failed");
                 consumer.accept(Result.failure());
                 return;
             }
-            mainThreadRunner.execute("FeedRequestManagerImpl consumer",
-                    () -> consumer.accept(protocolAdapter.createModel(response)));
+            mMainThreadRunner.execute("FeedRequestManagerImpl consumer",
+                    () -> consumer.accept(mProtocolAdapter.createModel(response)));
         });
     }
 
     private static final class RequestBuilder {
-        private ByteString token;
-        private ConsistencyToken consistencyToken;
-        private List<DismissActionWithSemanticProperties> dismissActionsWithSemanticProperties;
-        private final Context context;
-        private final ApplicationInfo applicationInfo;
-        private final Configuration configuration;
-        private final FeedQuery.RequestReason requestReason;
+        private ByteString mToken;
+        private ConsistencyToken mConsistencyToken;
+        private List<DismissActionWithSemanticProperties> mDismissActionWithSemanticProperties;
+        private final Context mContext;
+        private final ApplicationInfo mApplicationInfo;
+        private final Configuration mConfiguration;
+        private final FeedQuery.RequestReason mRequestReason;
         @RequestReason
-        private final int clientLoggingRequestReason;
-        private boolean cardMenuTooltipWouldTrigger;
+        private final int mClientLoggingRequestReason;
+        private boolean mCardMenuTooltipWouldTrigger;
 
         RequestBuilder(Context context, ApplicationInfo applicationInfo,
                 Configuration configuration, @RequestReason int requestReason) {
-            this.context = context;
-            this.applicationInfo = applicationInfo;
-            this.configuration = configuration;
-            this.clientLoggingRequestReason = requestReason;
-            this.requestReason = getWireRequestReason(requestReason);
+            this.mContext = context;
+            this.mApplicationInfo = applicationInfo;
+            this.mConfiguration = configuration;
+            this.mClientLoggingRequestReason = requestReason;
+            this.mRequestReason = getWireRequestReason(requestReason);
         }
 
         /**
@@ -287,12 +287,12 @@
          * @param token the token copied from FeedResponse.next_page_token.
          */
         RequestBuilder setPageToken(ByteString token) {
-            this.token = token;
+            this.mToken = token;
             return this;
         }
 
         boolean hasPageToken() {
-            return token != null;
+            return mToken != null;
         }
         /**
          * Sets the token used to tell the server which storage version to read/write to.
@@ -300,18 +300,18 @@
          * @param token the token used to maintain read/write consistency.
          */
         RequestBuilder setConsistencyToken(ConsistencyToken token) {
-            this.consistencyToken = token;
+            this.mConsistencyToken = token;
             return this;
         }
 
         RequestBuilder setActions(
                 List<DismissActionWithSemanticProperties> dismissActionsWithSemanticProperties) {
-            this.dismissActionsWithSemanticProperties = dismissActionsWithSemanticProperties;
+            this.mDismissActionWithSemanticProperties = dismissActionsWithSemanticProperties;
             return this;
         }
 
         RequestBuilder setCardMenuTooltipWouldTrigger(boolean wouldTrigger) {
-            cardMenuTooltipWouldTrigger = wouldTrigger;
+            mCardMenuTooltipWouldTrigger = wouldTrigger;
             return this;
         }
 
@@ -319,17 +319,17 @@
             Request.Builder requestBuilder =
                     Request.newBuilder().setRequestVersion(RequestVersion.FEED_QUERY);
 
-            FeedQuery.Builder feedQuery = FeedQuery.newBuilder().setReason(requestReason);
-            if (token != null) {
-                feedQuery.setPageToken(token);
+            FeedQuery.Builder feedQuery = FeedQuery.newBuilder().setReason(mRequestReason);
+            if (mToken != null) {
+                feedQuery.setPageToken(mToken);
             }
             Builder feedRequestBuilder = FeedRequest.newBuilder().setFeedQuery(feedQuery);
-            if (consistencyToken != null) {
-                feedRequestBuilder.setConsistencyToken(consistencyToken);
-                Logger.i(TAG, "Consistency Token: %s", consistencyToken);
+            if (mConsistencyToken != null) {
+                feedRequestBuilder.setConsistencyToken(mConsistencyToken);
+                Logger.i(TAG, "Consistency Token: %s", mConsistencyToken);
             }
-            if (dismissActionsWithSemanticProperties != null
-                    && !dismissActionsWithSemanticProperties.isEmpty()) {
+            if (mDismissActionWithSemanticProperties != null
+                    && !mDismissActionWithSemanticProperties.isEmpty()) {
                 feedRequestBuilder.addFeedActionQueryData(buildFeedActionQueryData());
             }
             feedRequestBuilder.setClientInfo(buildClientInfo());
@@ -348,7 +348,7 @@
                     Capability.MANAGE_INTERESTS);
             addCapabilityIfConfigEnabled(
                     feedRequestBuilder, ConfigKey.ENABLE_CAROUSELS, Capability.CAROUSELS);
-            if (cardMenuTooltipWouldTrigger) {
+            if (mCardMenuTooltipWouldTrigger) {
                 addCapabilityIfConfigEnabled(feedRequestBuilder,
                         ConfigKey.CARD_MENU_TOOLTIP_ELIGIBLE, Capability.CARD_MENU_TOOLTIP);
             }
@@ -365,25 +365,25 @@
 
         private void addCapabilityIfConfigEnabled(
                 Builder feedRequestBuilder, String configKey, Capability capability) {
-            if (configuration.getValueOrDefault(configKey, false)) {
+            if (mConfiguration.getValueOrDefault(configKey, false)) {
                 feedRequestBuilder.addClientCapability(capability);
             }
         }
 
         private FeedActionQueryData buildFeedActionQueryData() {
             Map<Long, Integer> ids =
-                    new LinkedHashMap<>(dismissActionsWithSemanticProperties.size());
+                    new LinkedHashMap<>(mDismissActionWithSemanticProperties.size());
             Map<String, Integer> tables =
-                    new LinkedHashMap<>(dismissActionsWithSemanticProperties.size());
+                    new LinkedHashMap<>(mDismissActionWithSemanticProperties.size());
             Map<String, Integer> contentDomains =
-                    new LinkedHashMap<>(dismissActionsWithSemanticProperties.size());
+                    new LinkedHashMap<>(mDismissActionWithSemanticProperties.size());
             Map<SemanticProperties, Integer> semanticProperties =
-                    new LinkedHashMap<>(dismissActionsWithSemanticProperties.size());
+                    new LinkedHashMap<>(mDismissActionWithSemanticProperties.size());
             ArrayList<FeedActionQueryDataItem> actionDataItems =
-                    new ArrayList<>(dismissActionsWithSemanticProperties.size());
+                    new ArrayList<>(mDismissActionWithSemanticProperties.size());
 
             for (DismissActionWithSemanticProperties action :
-                    dismissActionsWithSemanticProperties) {
+                    mDismissActionWithSemanticProperties) {
                 ContentId contentId = action.getContentId();
                 byte /*@Nullable*/[] semanticPropertiesBytes = action.getSemanticProperties();
 
@@ -430,10 +430,10 @@
             ClientInfo.Builder clientInfoBuilder = ClientInfo.newBuilder();
             clientInfoBuilder.setPlatformType(PlatformType.ANDROID);
             clientInfoBuilder.setPlatformVersion(getPlatformVersion());
-            clientInfoBuilder.setLocale(LocaleUtils.getLanguageTag(context));
-            clientInfoBuilder.setAppType(Utils.convertAppType(applicationInfo.getAppType()));
+            clientInfoBuilder.setLocale(LocaleUtils.getLanguageTag(mContext));
+            clientInfoBuilder.setAppType(Utils.convertAppType(mApplicationInfo.getAppType()));
             clientInfoBuilder.setAppVersion(getAppVersion());
-            DisplayMetrics metrics = context.getResources().getDisplayMetrics();
+            DisplayMetrics metrics = mContext.getResources().getDisplayMetrics();
             clientInfoBuilder.addDisplayInfo(
                     DisplayInfo.newBuilder()
                             .setScreenDensity(metrics.density)
@@ -471,9 +471,9 @@
 
         private Version getAppVersion() {
             Version.Builder builder = Version.newBuilder();
-            Utils.fillVersionsFromString(builder, applicationInfo.getVersionString());
-            builder.setArchitecture(Utils.convertArchitecture(applicationInfo.getArchitecture()));
-            builder.setBuildType(Utils.convertBuildType(applicationInfo.getBuildType()));
+            Utils.fillVersionsFromString(builder, mApplicationInfo.getVersionString());
+            builder.setArchitecture(Utils.convertArchitecture(mApplicationInfo.getArchitecture()));
+            builder.setBuildType(Utils.convertBuildType(mApplicationInfo.getBuildType()));
             return builder.build();
         }
     }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedrequestmanager/RequestManagerImpl.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedrequestmanager/RequestManagerImpl.java
index 6ce86174..a60bf8d 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedrequestmanager/RequestManagerImpl.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedrequestmanager/RequestManagerImpl.java
@@ -14,18 +14,18 @@
 public final class RequestManagerImpl implements RequestManager {
     private static final String TAG = "RequestManagerImpl";
 
-    private final FeedRequestManager feedRequestManager;
-    private final FeedSessionManager feedSessionManager;
+    private final FeedRequestManager mFeedRequestManager;
+    private final FeedSessionManager mFeedSessionManager;
 
     public RequestManagerImpl(
             FeedRequestManager feedRequestManager, FeedSessionManager feedSessionManager) {
-        this.feedRequestManager = feedRequestManager;
-        this.feedSessionManager = feedSessionManager;
+        this.mFeedRequestManager = feedRequestManager;
+        this.mFeedSessionManager = feedSessionManager;
     }
 
     @Override
     public void triggerScheduledRefresh() {
-        feedRequestManager.triggerRefresh(RequestReason.HOST_REQUESTED,
-                feedSessionManager.getUpdateConsumer(MutationContext.EMPTY_CONTEXT));
+        mFeedRequestManager.triggerRefresh(RequestReason.HOST_REQUESTED,
+                mFeedSessionManager.getUpdateConsumer(MutationContext.EMPTY_CONTEXT));
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedrequestmanager/UploadableActionsRequestBuilder.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedrequestmanager/UploadableActionsRequestBuilder.java
index 1dd20e2..de0a8802 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedrequestmanager/UploadableActionsRequestBuilder.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedrequestmanager/UploadableActionsRequestBuilder.java
@@ -23,33 +23,33 @@
 
 // A class that creates an ActionsRequest for uploading actions
 final class UploadableActionsRequestBuilder {
-    private Set<StreamUploadableAction> uploadableActions;
-    private ConsistencyToken token;
-    private final ProtocolAdapter protocolAdapter;
-    private final HashMap<String, byte[]> semanticPropertiesMap = new HashMap<>();
+    private Set<StreamUploadableAction> mUploadableActions;
+    private ConsistencyToken mToken;
+    private final ProtocolAdapter mProtocolAdapter;
+    private final HashMap<String, byte[]> mSemanticPropertiesMap = new HashMap<>();
 
     UploadableActionsRequestBuilder(ProtocolAdapter protocolAdapter) {
-        this.protocolAdapter = protocolAdapter;
+        this.mProtocolAdapter = protocolAdapter;
     }
 
     UploadableActionsRequestBuilder setConsistencyToken(ConsistencyToken token) {
-        this.token = token;
+        this.mToken = token;
         return this;
     }
 
     boolean hasConsistencyToken() {
-        return token != null;
+        return mToken != null;
     }
 
     UploadableActionsRequestBuilder setActions(Set<StreamUploadableAction> uploadableActions) {
-        this.uploadableActions = uploadableActions;
+        this.mUploadableActions = uploadableActions;
         return this;
     }
 
     UploadableActionsRequestBuilder setSemanticProperties(
             List<SemanticPropertiesWithId> semanticPropertiesList) {
         for (SemanticPropertiesWithId semanticProperties : semanticPropertiesList) {
-            semanticPropertiesMap.put(
+            mSemanticPropertiesMap.put(
                     semanticProperties.contentId, semanticProperties.semanticData);
         }
         return this;
@@ -59,8 +59,8 @@
         ActionRequest.Builder requestBuilder = ActionRequest.newBuilder().setRequestVersion(
                 ActionRequest.RequestVersion.FEED_UPLOAD_ACTION);
         FeedActionRequest.Builder feedActionRequestBuilder = FeedActionRequest.newBuilder();
-        if (uploadableActions != null) {
-            for (StreamUploadableAction action : uploadableActions) {
+        if (mUploadableActions != null) {
+            for (StreamUploadableAction action : mUploadableActions) {
                 String contentId = action.getFeatureContentId();
                 ActionPayload payload = action.getPayload();
                 FeedAction.Builder feedAction =
@@ -68,12 +68,12 @@
                                 FeedAction.ClientData.newBuilder()
                                         .setTimestampSeconds(action.getTimestampSeconds())
                                         .build());
-                if (semanticPropertiesMap.containsKey(contentId)) {
+                if (mSemanticPropertiesMap.containsKey(contentId)) {
                     feedAction.setSemanticProperties(
                             SemanticProperties.newBuilder().setSemanticPropertiesData(
-                                    ByteString.copyFrom(semanticPropertiesMap.get(contentId))));
+                                    ByteString.copyFrom(mSemanticPropertiesMap.get(contentId))));
                 }
-                Result<ContentId> contentIdResult = protocolAdapter.getWireContentId(contentId);
+                Result<ContentId> contentIdResult = mProtocolAdapter.getWireContentId(contentId);
                 if (contentIdResult.isSuccessful()) {
                     feedAction.setContentId(contentIdResult.getValue());
                 }
@@ -81,7 +81,7 @@
             }
         }
         if (hasConsistencyToken()) {
-            feedActionRequestBuilder.setConsistencyToken(token);
+            feedActionRequestBuilder.setConsistencyToken(mToken);
         }
         requestBuilder.setExtension(
                 FeedActionRequest.feedActionRequest, feedActionRequestBuilder.build());
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedsessionmanager/FeedSessionManagerFactory.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedsessionmanager/FeedSessionManagerFactory.java
index 319b0ca8..2d4cd9f 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedsessionmanager/FeedSessionManagerFactory.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedsessionmanager/FeedSessionManagerFactory.java
@@ -35,19 +35,19 @@
 public final class FeedSessionManagerFactory {
     private static final long DEFAULT_LIFETIME_MS = TimeUnit.HOURS.toMillis(1L);
 
-    private final TaskQueue taskQueue;
-    private final Store store;
-    private final TimingUtils timingUtils;
-    private final ThreadUtils threadUtils;
-    private final ProtocolAdapter protocolAdapter;
-    private final FeedRequestManager feedRequestManager;
-    private final ActionUploadRequestManager actionUploadRequestManager;
-    private final SchedulerApi schedulerApi;
-    private final Configuration configuration;
-    private final Clock clock;
-    private final FeedObservable<FeedLifecycleListener> lifecycleListenerObservable;
-    private final MainThreadRunner mainThreadRunner;
-    private final BasicLoggingApi basicLoggingApi;
+    private final TaskQueue mTaskQueue;
+    private final Store mStore;
+    private final TimingUtils mTimingUtils;
+    private final ThreadUtils mThreadUtils;
+    private final ProtocolAdapter mProtocolAdapter;
+    private final FeedRequestManager mFeedRequestManager;
+    private final ActionUploadRequestManager mActionUploadRequestManager;
+    private final SchedulerApi mSchedulerApi;
+    private final Configuration mConfiguration;
+    private final Clock mClock;
+    private final FeedObservable<FeedLifecycleListener> mLifecycleListenerObservable;
+    private final MainThreadRunner mMainThreadRunner;
+    private final BasicLoggingApi mBasicLoggingApi;
 
     public FeedSessionManagerFactory(TaskQueue taskQueue, Store store, TimingUtils timingUtils,
             ThreadUtils threadUtils, ProtocolAdapter protocolAdapter,
@@ -56,38 +56,38 @@
             Configuration configuration, Clock clock,
             FeedObservable<FeedLifecycleListener> lifecycleListenerObservable,
             MainThreadRunner mainThreadRunner, BasicLoggingApi basicLoggingApi) {
-        this.taskQueue = taskQueue;
-        this.store = store;
-        this.timingUtils = timingUtils;
-        this.threadUtils = threadUtils;
-        this.protocolAdapter = protocolAdapter;
-        this.feedRequestManager = feedRequestManager;
-        this.actionUploadRequestManager = actionUploadRequestManager;
-        this.schedulerApi = schedulerApi;
-        this.configuration = configuration;
-        this.clock = clock;
-        this.lifecycleListenerObservable = lifecycleListenerObservable;
-        this.mainThreadRunner = mainThreadRunner;
-        this.basicLoggingApi = basicLoggingApi;
+        this.mTaskQueue = taskQueue;
+        this.mStore = store;
+        this.mTimingUtils = timingUtils;
+        this.mThreadUtils = threadUtils;
+        this.mProtocolAdapter = protocolAdapter;
+        this.mFeedRequestManager = feedRequestManager;
+        this.mActionUploadRequestManager = actionUploadRequestManager;
+        this.mSchedulerApi = schedulerApi;
+        this.mConfiguration = configuration;
+        this.mClock = clock;
+        this.mLifecycleListenerObservable = lifecycleListenerObservable;
+        this.mMainThreadRunner = mainThreadRunner;
+        this.mBasicLoggingApi = basicLoggingApi;
     }
 
     /** Creates a new FeedSessionManager and initializes it */
     public FeedSessionManagerImpl create() {
-        long lifetimeMs =
-                configuration.getValueOrDefault(ConfigKey.SESSION_LIFETIME_MS, DEFAULT_LIFETIME_MS);
+        long lifetimeMs = mConfiguration.getValueOrDefault(
+                ConfigKey.SESSION_LIFETIME_MS, DEFAULT_LIFETIME_MS);
         SessionFactory sessionFactory =
-                new SessionFactory(store, taskQueue, timingUtils, threadUtils, configuration);
+                new SessionFactory(mStore, mTaskQueue, mTimingUtils, mThreadUtils, mConfiguration);
         SessionCache sessionCache = new SessionCache(
-                store, taskQueue, sessionFactory, lifetimeMs, timingUtils, threadUtils, clock);
+                mStore, mTaskQueue, sessionFactory, lifetimeMs, mTimingUtils, mThreadUtils, mClock);
         ContentCache contentCache = new ContentCache();
-        SessionManagerMutation sessionManagerMutation = new SessionManagerMutation(store,
-                sessionCache, contentCache, taskQueue, schedulerApi, threadUtils, timingUtils,
-                clock, mainThreadRunner, basicLoggingApi);
+        SessionManagerMutation sessionManagerMutation = new SessionManagerMutation(mStore,
+                sessionCache, contentCache, mTaskQueue, mSchedulerApi, mThreadUtils, mTimingUtils,
+                mClock, mMainThreadRunner, mBasicLoggingApi);
 
-        return new FeedSessionManagerImpl(taskQueue, sessionFactory, sessionCache,
-                sessionManagerMutation, contentCache, store, timingUtils, threadUtils,
-                protocolAdapter, feedRequestManager, actionUploadRequestManager, schedulerApi,
-                configuration, clock, lifecycleListenerObservable, mainThreadRunner,
-                basicLoggingApi);
+        return new FeedSessionManagerImpl(mTaskQueue, sessionFactory, sessionCache,
+                sessionManagerMutation, contentCache, mStore, mTimingUtils, mThreadUtils,
+                mProtocolAdapter, mFeedRequestManager, mActionUploadRequestManager, mSchedulerApi,
+                mConfiguration, mClock, mLifecycleListenerObservable, mMainThreadRunner,
+                mBasicLoggingApi);
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedsessionmanager/FeedSessionManagerImpl.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedsessionmanager/FeedSessionManagerImpl.java
index a59c6e7..3166db3 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedsessionmanager/FeedSessionManagerImpl.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedsessionmanager/FeedSessionManagerImpl.java
@@ -92,59 +92,59 @@
 
     // For the Shared State we will always cache them in the Session Manager
     // Accessed on main thread, updated on Executor task
-    private final InternerWithStats<StreamSharedState> sharedStateInterner =
+    private final InternerWithStats<StreamSharedState> mSharedStateInterner =
             new InternerWithStats<>(new StreamSharedStateInterner());
-    private final Map<String, StreamSharedState> sharedStateCache =
-            new InternedMap<>(new HashMap<>(), sharedStateInterner);
+    private final Map<String, StreamSharedState> mSharedStateCache =
+            new InternedMap<>(new HashMap<>(), mSharedStateInterner);
 
     // All writes are done on background threads, there are accesses on the main thread.  Leaving
     // the lock back accessibleContentSupplier may eventually run on a background task and not
     // on the executor thread.
-    private final SessionCache sessionCache;
+    private final SessionCache mSessionCache;
 
     // All access to the content cache happens on the executor thread so there is no need to
     // synchronize access.
-    private final ContentCache contentCache;
+    private final ContentCache mContentCache;
 
     @VisibleForTesting
-    final AtomicBoolean initialized = new AtomicBoolean(false);
+    final AtomicBoolean mInitialized = new AtomicBoolean(false);
 
-    private final Object lock = new Object();
+    private final Object mLock = new Object();
 
     // Keep track of sessions being created which haven't been added to the SessionCache.
     // This is accessed on the main thread and the background thread.
     @GuardedBy("lock")
-    private final List<InitializableSession> sessionsUnderConstruction = new ArrayList<>();
+    private final List<InitializableSession> mSessionsUnderConstruction = new ArrayList<>();
 
     // This captures the NO_CARDS_ERROR when a request fails. The request fails in one task and this
     // is sent to the ModelProvider in the populateSessionTask.
-    /*@Nullable*/ private ModelError noCardsError;
+    /*@Nullable*/ private ModelError mNoCardsError;
 
-    private final SessionFactory sessionFactory;
-    private final SessionManagerMutation sessionManagerMutation;
-    private final Store store;
-    private final ThreadUtils threadUtils;
-    private final TimingUtils timingUtils;
-    private final ProtocolAdapter protocolAdapter;
-    private final FeedRequestManager requestManager;
-    private final ActionUploadRequestManager actionUploadRequestManager;
-    private final SchedulerApi schedulerApi;
-    private final TaskQueue taskQueue;
-    private final Clock clock;
-    private final Configuration configuration;
-    private final MainThreadRunner mainThreadRunner;
-    private final BasicLoggingApi basicLoggingApi;
-    private final long sessionPopulationTimeoutMs;
-    private final boolean uploadingActionsEnabled;
+    private final SessionFactory mSessionFactory;
+    private final SessionManagerMutation mSessionManagerMutation;
+    private final Store mStore;
+    private final ThreadUtils mThreadUtils;
+    private final TimingUtils mTimingUtils;
+    private final ProtocolAdapter mProtocolAdapter;
+    private final FeedRequestManager mRequestManager;
+    private final ActionUploadRequestManager mActionUploadRequestManager;
+    private final SchedulerApi mSchedulerApi;
+    private final TaskQueue mTaskQueue;
+    private final Clock mClock;
+    private final Configuration mConfiguration;
+    private final MainThreadRunner mMainThreadRunner;
+    private final BasicLoggingApi mBasicLoggingApi;
+    private final long mSessionPopulationTimeoutMs;
+    private final boolean mUploadingActionsEnabled;
 
     @VisibleForTesting
-    final Set<SessionMutationTracker> outstandingMutations = new HashSet<>();
+    final Set<SessionMutationTracker> mOutstandingMutations = new HashSet<>();
 
     // operation counts for the dumper
-    private int newSessionCount;
-    private int existingSessionCount;
-    private int handleTokenCount;
-    private Listener knownContentListener;
+    private int mNewSessionCount;
+    private int mExistingSessionCount;
+    private int mHandleTokenCount;
+    private Listener mKnownContentListener;
 
     @SuppressWarnings("argument.type.incompatible") // ok call to registerObserver
     public FeedSessionManagerImpl(TaskQueue taskQueue, SessionFactory sessionFactory,
@@ -156,26 +156,26 @@
             Configuration configuration, Clock clock,
             FeedObservable<FeedLifecycleListener> lifecycleListenerObservable,
             MainThreadRunner mainThreadRunner, BasicLoggingApi basicLoggingApi) {
-        this.taskQueue = taskQueue;
-        this.sessionFactory = sessionFactory;
-        this.sessionCache = sessionCache;
-        this.sessionManagerMutation = sessionManagerMutation;
-        this.contentCache = contentCache;
+        this.mTaskQueue = taskQueue;
+        this.mSessionFactory = sessionFactory;
+        this.mSessionCache = sessionCache;
+        this.mSessionManagerMutation = sessionManagerMutation;
+        this.mContentCache = contentCache;
 
-        this.store = store;
-        this.timingUtils = timingUtils;
-        this.threadUtils = threadUtils;
-        this.protocolAdapter = protocolAdapter;
-        this.requestManager = feedRequestManager;
-        this.actionUploadRequestManager = actionUploadRequestManager;
-        this.schedulerApi = schedulerApi;
-        this.clock = clock;
-        this.configuration = configuration;
-        this.mainThreadRunner = mainThreadRunner;
-        this.basicLoggingApi = basicLoggingApi;
-        uploadingActionsEnabled =
+        this.mStore = store;
+        this.mTimingUtils = timingUtils;
+        this.mThreadUtils = threadUtils;
+        this.mProtocolAdapter = protocolAdapter;
+        this.mRequestManager = feedRequestManager;
+        this.mActionUploadRequestManager = actionUploadRequestManager;
+        this.mSchedulerApi = schedulerApi;
+        this.mClock = clock;
+        this.mConfiguration = configuration;
+        this.mMainThreadRunner = mainThreadRunner;
+        this.mBasicLoggingApi = basicLoggingApi;
+        mUploadingActionsEnabled =
                 configuration.getValueOrDefault(ConfigKey.UNDOABLE_ACTIONS_ENABLED, false);
-        sessionPopulationTimeoutMs =
+        mSessionPopulationTimeoutMs =
                 configuration.getValueOrDefault(ConfigKey.TIMEOUT_TIMEOUT_MS, TIMEOUT_TIMEOUT_MS);
         lifecycleListenerObservable.registerObserver(this);
         Logger.i(TAG, "FeedSessionManagerImpl has been created");
@@ -188,35 +188,35 @@
      * an executor task.
      */
     public void initialize() {
-        boolean init = initialized.getAndSet(true);
+        boolean init = mInitialized.getAndSet(true);
         if (init) {
             Logger.w(TAG, "FeedSessionManagerImpl has previously been initialized");
             return;
         }
-        store.registerObserver(this);
-        taskQueue.initialize(this::initializationTask);
+        mStore.registerObserver(this);
+        mTaskQueue.initialize(this::initializationTask);
     }
 
     // Task which initializes the Session Manager.  This must be the first task run on the
     // Session Manager thread so it's complete before we create any sessions.
     private void initializationTask() {
-        threadUtils.checkNotMainThread();
+        mThreadUtils.checkNotMainThread();
         Thread currentThread = Thread.currentThread();
         currentThread.setName("JardinExecutor");
-        timingUtils.pinThread(currentThread, "JardinExecutor");
+        mTimingUtils.pinThread(currentThread, "JardinExecutor");
 
-        ElapsedTimeTracker timeTracker = timingUtils.getElapsedTimeTracker(TAG);
+        ElapsedTimeTracker timeTracker = mTimingUtils.getElapsedTimeTracker(TAG);
         // Initialize the Shared States cached here.
-        ElapsedTimeTracker sharedStateTimeTracker = timingUtils.getElapsedTimeTracker(TAG);
-        Result<List<StreamSharedState>> sharedStatesResult = store.getSharedStates();
+        ElapsedTimeTracker sharedStateTimeTracker = mTimingUtils.getElapsedTimeTracker(TAG);
+        Result<List<StreamSharedState>> sharedStatesResult = mStore.getSharedStates();
         if (sharedStatesResult.isSuccessful()) {
             for (StreamSharedState sharedState : sharedStatesResult.getValue()) {
-                sharedStateCache.put(sharedState.getContentId(), sharedState);
+                mSharedStateCache.put(sharedState.getContentId(), sharedState);
             }
         } else {
             // without shared states we need to switch to ephemeral mode
             switchToEphemeralMode("SharedStates failed to load, no shared states are loaded.");
-            taskQueue.reset();
+            mTaskQueue.reset();
             sharedStateTimeTracker.stop("", "sharedStateTimeTracker", "error", "store error");
             timeTracker.stop("task", "Initialization", "error", "switchToEphemeralMode");
             return;
@@ -224,7 +224,7 @@
         sharedStateTimeTracker.stop("", "sharedStateTimeTracker");
 
         // create the head session from the data in the Store
-        if (!sessionCache.initialize()) {
+        if (!mSessionCache.initialize()) {
             // we failed to initialize the sessionCache, so switch to ephemeral mode.
             switchToEphemeralMode("unable to initialize the sessionCache");
             timeTracker.stop("task", "Initialization", "error", "switchToEphemeralMode");
@@ -236,20 +236,20 @@
     @Override
     public void getNewSession(ModelProvider modelProvider,
             /*@Nullable*/ ViewDepthProvider viewDepthProvider, UiContext uiContext) {
-        threadUtils.checkMainThread();
-        if (!initialized.get()) {
+        mThreadUtils.checkMainThread();
+        if (!mInitialized.get()) {
             Logger.i(TAG, "Lazy initialization triggered, getNewSession");
             initialize();
         }
-        InitializableSession session = sessionFactory.getSession();
+        InitializableSession session = mSessionFactory.getSession();
         session.bindModelProvider(modelProvider, viewDepthProvider);
-        synchronized (lock) {
-            sessionsUnderConstruction.add(session);
+        synchronized (mLock) {
+            mSessionsUnderConstruction.add(session);
         }
 
-        if (!sessionCache.isHeadInitialized()) {
+        if (!mSessionCache.isHeadInitialized()) {
             Logger.i(TAG, "Delaying populateSession until initialization is finished");
-            taskQueue.execute(Task.GET_NEW_SESSION, TaskType.IMMEDIATE,
+            mTaskQueue.execute(Task.GET_NEW_SESSION, TaskType.IMMEDIATE,
                     () -> populateSession(session, uiContext));
         } else {
             populateSession(session, uiContext);
@@ -262,15 +262,15 @@
     private void populateSession(InitializableSession session, UiContext uiContext) {
         // Create SessionState and call SchedulerApi to determine what the session-creation
         // experience should be.
-        SessionState sessionState = new SessionState(!sessionCache.getHead().isHeadEmpty(),
-                sessionCache.getHeadLastAddedTimeMillis(), taskQueue.isMakingRequest());
+        SessionState sessionState = new SessionState(!mSessionCache.getHead().isHeadEmpty(),
+                mSessionCache.getHeadLastAddedTimeMillis(), mTaskQueue.isMakingRequest());
         Logger.i(TAG,
                 "shouldSessionRequestData; hasContent(%b), contentCreationTime(%d),"
                         + " outstandingRequest(%b)",
                 sessionState.hasContent, sessionState.contentCreationDateTimeMs,
                 sessionState.hasOutstandingRequest);
         @RequestBehavior
-        int behavior = schedulerApi.shouldSessionRequestData(sessionState);
+        int behavior = mSchedulerApi.shouldSessionRequestData(sessionState);
 
         // Based on sessionState and behavior, determine if FeedSessionManager should start a
         // request, append an ongoing request to this session, or include a timeout.
@@ -290,10 +290,10 @@
         if (shouldStartRequest && behavior != RequestBehavior.REQUEST_WITH_CONTENT) {
             triggerRefresh(/* sessionId= */ null, RequestReason.OPEN_WITHOUT_CONTENT, uiContext);
         }
-        taskQueue.execute(Task.POPULATE_NEW_SESSION, requestBehaviorToTaskType(behavior),
+        mTaskQueue.execute(Task.POPULATE_NEW_SESSION, requestBehaviorToTaskType(behavior),
                 ()
                         -> populateSessionTask(session, shouldAppendOutstandingRequest, uiContext),
-                timeoutTask, sessionPopulationTimeoutMs);
+                timeoutTask, mSessionPopulationTimeoutMs);
         if (shouldStartRequest && behavior == RequestBehavior.REQUEST_WITH_CONTENT) {
             triggerRefresh(/* sessionId= */ null, RequestReason.OPEN_WITH_CONTENT, uiContext);
         }
@@ -301,10 +301,10 @@
 
     private void populateSessionTask(InitializableSession session,
             boolean shouldAppendOutstandingRequest, UiContext uiContext) {
-        threadUtils.checkNotMainThread();
-        ElapsedTimeTracker timeTracker = timingUtils.getElapsedTimeTracker(TAG);
+        mThreadUtils.checkNotMainThread();
+        ElapsedTimeTracker timeTracker = mTimingUtils.getElapsedTimeTracker(TAG);
 
-        if (noCardsError != null && sessionCache.getHead().isHeadEmpty()) {
+        if (mNoCardsError != null && mSessionCache.getHead().isHeadEmpty()) {
             ModelProvider modelProvider = session.getModelProvider();
             if (modelProvider == null) {
                 Logger.e(TAG, "populateSessionTask - noCardsError, modelProvider not found");
@@ -313,7 +313,7 @@
             }
             Logger.w(TAG, "populateSessionTask - noCardsError %s", modelProvider);
 
-            Result<String> streamSessionResult = store.createNewSession();
+            Result<String> streamSessionResult = mStore.createNewSession();
             if (!streamSessionResult.isSuccessful()) {
                 switchToEphemeralMode("Unable to create a new session during noCardsError failure");
                 timeTracker.stop("task", "Create/Populate New Session", "Failure", "noCardsError");
@@ -321,13 +321,13 @@
             }
 
             // properly track the session so that it's empty.
-            modelProvider.raiseError(Validators.checkNotNull(noCardsError));
+            modelProvider.raiseError(Validators.checkNotNull(mNoCardsError));
             String sessionId = streamSessionResult.getValue();
             session.setSessionId(sessionId);
-            sessionCache.putAttached(sessionId, clock.currentTimeMillis(),
-                    sessionCache.getHead().getSchemaVersion(), session);
-            synchronized (lock) {
-                sessionsUnderConstruction.remove(session);
+            mSessionCache.putAttached(sessionId, mClock.currentTimeMillis(),
+                    mSessionCache.getHead().getSchemaVersion(), session);
+            synchronized (mLock) {
+                mSessionsUnderConstruction.remove(session);
             }
 
             // Set the session id on the ModelProvider.
@@ -336,7 +336,7 @@
             return;
         }
 
-        Result<String> streamSessionResult = store.createNewSession();
+        Result<String> streamSessionResult = mStore.createNewSession();
         if (!streamSessionResult.isSuccessful()) {
             switchToEphemeralMode("Unable to create a new session, createNewSession failed");
             timeTracker.stop("task", "Create/Populate New Session", "Failure", "createNewSession");
@@ -344,7 +344,8 @@
         }
         String sessionId = streamSessionResult.getValue();
         session.setSessionId(sessionId);
-        Result<List<StreamStructure>> streamStructuresResult = store.getStreamStructures(sessionId);
+        Result<List<StreamStructure>> streamStructuresResult =
+                mStore.getStreamStructures(sessionId);
         if (!streamStructuresResult.isSuccessful()) {
             switchToEphemeralMode("Unable to create a new session, getStreamStructures failed");
             timeTracker.stop(
@@ -353,16 +354,16 @@
         }
 
         boolean cachedBindings;
-        cachedBindings = contentCache.size() > 0;
-        long creationTimeMillis = clock.currentTimeMillis();
+        cachedBindings = mContentCache.size() > 0;
+        long creationTimeMillis = mClock.currentTimeMillis();
         session.populateModelProvider(streamStructuresResult.getValue(), cachedBindings,
                 shouldAppendOutstandingRequest, uiContext);
-        sessionCache.putAttached(
-                sessionId, creationTimeMillis, sessionCache.getHead().getSchemaVersion(), session);
-        synchronized (lock) {
-            sessionsUnderConstruction.remove(session);
+        mSessionCache.putAttached(
+                sessionId, creationTimeMillis, mSessionCache.getHead().getSchemaVersion(), session);
+        synchronized (mLock) {
+            mSessionsUnderConstruction.remove(session);
         }
-        newSessionCount++;
+        mNewSessionCount++;
         Logger.i(TAG, "Populate new session: %s, creation time %s", session.getSessionId(),
                 StringFormattingUtils.formatLogDate(creationTimeMillis));
         timeTracker.stop("task", "Create/Populate New Session");
@@ -371,19 +372,19 @@
     @VisibleForTesting
     void switchToEphemeralMode(String message) {
         Logger.e(TAG, message);
-        store.switchToEphemeralMode();
+        mStore.switchToEphemeralMode();
     }
 
     @VisibleForTesting
     void modelErrorObserver(/*@Nullable*/ Session session, ModelError error) {
         if (session == null && error.getErrorType() == ErrorType.NO_CARDS_ERROR) {
             Logger.e(TAG, "No Cards Found on TriggerRefresh, setting noCardsError");
-            noCardsError = error;
+            mNoCardsError = error;
             // queue a clear which will run after all currently delayed tasks.  This allows delayed
             // session population tasks to inform the ModelProvider of errors then we clear the
             // error state.
-            taskQueue.execute(
-                    Task.NO_CARD_ERROR_CLEAR, TaskType.USER_FACING, () -> noCardsError = null);
+            mTaskQueue.execute(
+                    Task.NO_CARD_ERROR_CLEAR, TaskType.USER_FACING, () -> mNoCardsError = null);
             return;
         } else if (session != null && error.getErrorType() == ErrorType.PAGINATION_ERROR) {
             Logger.e(TAG, "Pagination Error found");
@@ -402,23 +403,23 @@
     @Override
     public void getExistingSession(
             String sessionId, ModelProvider modelProvider, UiContext uiContext) {
-        threadUtils.checkMainThread();
-        if (!initialized.get()) {
+        mThreadUtils.checkMainThread();
+        if (!mInitialized.get()) {
             Logger.i(TAG, "Lazy initialization triggered, getExistingSession");
             initialize();
         }
-        InitializableSession session = sessionFactory.getSession();
+        InitializableSession session = mSessionFactory.getSession();
         session.bindModelProvider(modelProvider, null);
 
         // Task which populates the newly created session.  This must be done
         // on the Session Manager thread so it atomic with the mutations.
-        taskQueue.execute(Task.GET_EXISTING_SESSION, TaskType.IMMEDIATE, () -> {
-            threadUtils.checkNotMainThread();
-            if (!sessionCache.hasSession(sessionId)) {
+        mTaskQueue.execute(Task.GET_EXISTING_SESSION, TaskType.IMMEDIATE, () -> {
+            mThreadUtils.checkNotMainThread();
+            if (!mSessionCache.hasSession(sessionId)) {
                 modelProvider.invalidate(uiContext);
                 return;
             }
-            Session existingSession = sessionCache.getAttached(sessionId);
+            Session existingSession = mSessionCache.getAttached(sessionId);
             if (existingSession != null && !existingSession.getContentInSession().isEmpty()) {
                 ModelProvider existingModelProvider = existingSession.getModelProvider();
                 if (existingModelProvider != null) {
@@ -427,13 +428,13 @@
             }
 
             Result<List<StreamStructure>> streamStructuresResult =
-                    store.getStreamStructures(sessionId);
+                    mStore.getStreamStructures(sessionId);
             if (streamStructuresResult.isSuccessful()) {
                 session.setSessionId(sessionId);
                 session.populateModelProvider(
                         streamStructuresResult.getValue(), false, false, uiContext);
-                sessionCache.putAttachedAndRetainMetadata(sessionId, session);
-                existingSessionCount++;
+                mSessionCache.putAttachedAndRetainMetadata(sessionId, session);
+                mExistingSessionCount++;
             } else {
                 Logger.e(TAG, "unable to get stream structure for existing session %s", sessionId);
                 switchToEphemeralMode("unable to get stream structure for existing session");
@@ -443,45 +444,45 @@
 
     @Override
     public void invalidateSession(String sessionId) {
-        if (threadUtils.isMainThread()) {
-            taskQueue.execute(Task.INVALIDATE_SESSION, TaskType.USER_FACING,
-                    () -> sessionCache.removeAttached(sessionId));
+        if (mThreadUtils.isMainThread()) {
+            mTaskQueue.execute(Task.INVALIDATE_SESSION, TaskType.USER_FACING,
+                    () -> mSessionCache.removeAttached(sessionId));
         } else {
-            sessionCache.removeAttached(sessionId);
+            mSessionCache.removeAttached(sessionId);
         }
     }
 
     @Override
     public void detachSession(String sessionId) {
-        if (threadUtils.isMainThread()) {
-            taskQueue.execute(Task.DETACH_SESSION, TaskType.USER_FACING,
-                    () -> sessionCache.detachModelProvider(sessionId));
+        if (mThreadUtils.isMainThread()) {
+            mTaskQueue.execute(Task.DETACH_SESSION, TaskType.USER_FACING,
+                    () -> mSessionCache.detachModelProvider(sessionId));
         } else {
-            sessionCache.detachModelProvider(sessionId);
+            mSessionCache.detachModelProvider(sessionId);
         }
     }
 
     @Override
     public void invalidateHead() {
-        sessionManagerMutation.resetHead();
+        mSessionManagerMutation.resetHead();
     }
 
     @Override
     public void handleToken(String sessionId, StreamToken streamToken) {
         Logger.i(TAG, "HandleToken on stream %s, token %s", sessionId, streamToken.getContentId());
-        threadUtils.checkMainThread();
+        mThreadUtils.checkMainThread();
 
         // At the moment, this doesn't try to prevent multiple requests with the same Token.
         // We may want to make sure we only make the request a single time.
-        handleTokenCount++;
+        mHandleTokenCount++;
         MutationContext mutationContext = new MutationContext.Builder()
                                                   .setContinuationToken(streamToken)
                                                   .setRequestingSessionId(sessionId)
                                                   .build();
-        taskQueue.execute(Task.HANDLE_TOKEN, TaskType.BACKGROUND, () -> {
+        mTaskQueue.execute(Task.HANDLE_TOKEN, TaskType.BACKGROUND, () -> {
             fetchActionsAndUpload(getConsistencyToken(), result -> {
                 ConsistencyToken token = handleUpdateConsistencyToken(result);
-                requestManager.loadMore(
+                mRequestManager.loadMore(
                         streamToken, token, getCommitter("handleToken", mutationContext));
             });
         });
@@ -495,25 +496,25 @@
     @Override
     public void triggerRefresh(
             /*@Nullable*/ String sessionId, @RequestReason int requestReason, UiContext uiContext) {
-        if (!initialized.get()) {
+        if (!mInitialized.get()) {
             Logger.i(TAG, "Lazy initialization triggered, triggerRefresh");
             initialize();
         }
-        taskQueue.execute(Task.SESSION_MANAGER_TRIGGER_REFRESH,
+        mTaskQueue.execute(Task.SESSION_MANAGER_TRIGGER_REFRESH,
                 TaskType.HEAD_INVALIDATE, // invalidate because we are requesting a refresh
                 () -> triggerRefreshTask(sessionId, requestReason, uiContext));
     }
 
     private ConsistencyToken handleUpdateConsistencyToken(Result<ConsistencyToken> result) {
-        threadUtils.checkNotMainThread();
-        if (!uploadingActionsEnabled) {
+        mThreadUtils.checkNotMainThread();
+        if (!mUploadingActionsEnabled) {
             return getConsistencyToken();
         }
 
         ConsistencyToken consistencyToken;
         if (result.isSuccessful()) {
             consistencyToken = result.getValue();
-            store.editContent()
+            mStore.editContent()
                     .add(SessionCache.CONSISTENCY_TOKEN_CONTENT_ID,
                             StreamPayload.newBuilder()
                                     .setConsistencyToken(consistencyToken)
@@ -529,17 +530,17 @@
 
     private void triggerRefreshTask(
             /*@Nullable*/ String sessionId, @RequestReason int requestReason, UiContext uiContext) {
-        threadUtils.checkNotMainThread();
+        mThreadUtils.checkNotMainThread();
 
         fetchActionsAndUpload(getConsistencyToken(), result -> {
             ConsistencyToken consistencyToken = handleUpdateConsistencyToken(result);
-            requestManager.triggerRefresh(requestReason, consistencyToken,
+            mRequestManager.triggerRefresh(requestReason, consistencyToken,
                     getCommitter("triggerRefresh",
                             new MutationContext.Builder().setUiContext(uiContext).build()));
         });
 
         if (sessionId != null) {
-            Session session = sessionCache.getAttached(sessionId);
+            Session session = mSessionCache.getAttached(sessionId);
             if (session != null) {
                 ModelProvider modelProvider = session.getModelProvider();
                 if (modelProvider != null) {
@@ -557,32 +558,32 @@
 
     @Override
     public void fetchActionsAndUpload(Consumer<Result<ConsistencyToken>> consumer) {
-        threadUtils.checkNotMainThread();
+        mThreadUtils.checkNotMainThread();
         fetchActionsAndUpload(getConsistencyToken(), consumer);
     }
 
     private void fetchActionsAndUpload(
             ConsistencyToken token, Consumer<Result<ConsistencyToken>> consumer) {
         // fail fast if we're not actually recording these actions.
-        if (!uploadingActionsEnabled) {
+        if (!mUploadingActionsEnabled) {
             consumer.accept(Result.success(token));
             return;
         }
-        Result<Set<StreamUploadableAction>> actionsResult = store.getAllUploadableActions();
+        Result<Set<StreamUploadableAction>> actionsResult = mStore.getAllUploadableActions();
         if (actionsResult.isSuccessful()) {
-            actionUploadRequestManager.triggerUploadActions(
+            mActionUploadRequestManager.triggerUploadActions(
                     actionsResult.getValue(), token, consumer);
         }
     }
 
     @Override
     public Result<List<PayloadWithId>> getStreamFeatures(List<String> contentIds) {
-        threadUtils.checkNotMainThread();
+        mThreadUtils.checkNotMainThread();
         List<PayloadWithId> results = new ArrayList<>();
         List<String> cacheMisses = new ArrayList<>();
-        int contentSize = contentCache.size();
+        int contentSize = mContentCache.size();
         for (String contentId : contentIds) {
-            StreamPayload payload = contentCache.get(contentId);
+            StreamPayload payload = mContentCache.get(contentId);
             if (payload != null) {
                 results.add(new PayloadWithId(contentId, payload));
             } else {
@@ -591,10 +592,10 @@
         }
 
         if (!cacheMisses.isEmpty()) {
-            Result<List<PayloadWithId>> contentResult = store.getPayloads(cacheMisses);
+            Result<List<PayloadWithId>> contentResult = mStore.getPayloads(cacheMisses);
             boolean successfulRead = contentResult.isSuccessful()
                     && (contentResult.getValue().size()
-                                    + configuration.getValueOrDefault(
+                                    + mConfiguration.getValueOrDefault(
                                             ConfigKey.STORAGE_MISS_THRESHOLD, 4L)
                             >= cacheMisses.size());
             if (successfulRead) {
@@ -602,8 +603,8 @@
                         cacheMisses.size(), contentResult.getValue().size());
                 if (contentResult.getValue().size() < cacheMisses.size()) {
                     Logger.e(TAG, "ContentStorage is missing content");
-                    mainThreadRunner.execute("CONTENT_STORAGE_MISSING_ITEM", () -> {
-                        basicLoggingApi.onInternalError(
+                    mMainThreadRunner.execute("CONTENT_STORAGE_MISSING_ITEM", () -> {
+                        mBasicLoggingApi.onInternalError(
                                 InternalFeedError.CONTENT_STORAGE_MISSING_ITEM);
                     });
                 }
@@ -612,8 +613,8 @@
                 if (contentResult.isSuccessful()) {
                     Logger.e(TAG, "Storage miss beyond threshold; requestedItems(%d), returned(%d)",
                             cacheMisses.size(), contentResult.getValue().size());
-                    mainThreadRunner.execute("STORAGE_MISS_BEYOND_THRESHOLD", () -> {
-                        basicLoggingApi.onInternalError(
+                    mMainThreadRunner.execute("STORAGE_MISS_BEYOND_THRESHOLD", () -> {
+                        mBasicLoggingApi.onInternalError(
                                 InternalFeedError.STORAGE_MISS_BEYOND_THRESHOLD);
                     });
                 }
@@ -631,9 +632,9 @@
     @Override
     /*@Nullable*/
     public StreamSharedState getSharedState(ContentId contentId) {
-        threadUtils.checkMainThread();
-        String sharedStateId = protocolAdapter.getStreamContentId(contentId);
-        StreamSharedState state = sharedStateCache.get(sharedStateId);
+        mThreadUtils.checkMainThread();
+        String sharedStateId = mProtocolAdapter.getStreamContentId(contentId);
+        StreamSharedState state = mSharedStateCache.get(sharedStateId);
         if (state == null) {
             Logger.e(TAG, "Shared State [%s] was not found", sharedStateId);
         }
@@ -642,7 +643,7 @@
 
     @Override
     public Consumer<Result<Model>> getUpdateConsumer(MutationContext mutationContext) {
-        if (!initialized.get()) {
+        if (!mInitialized.get()) {
             Logger.i(TAG, "Lazy initialization triggered, getUpdateConsumer");
             initialize();
         }
@@ -651,26 +652,26 @@
 
     @VisibleForTesting
     class SessionMutationTracker implements Consumer<Result<Model>> {
-        private final MutationContext mutationContext;
-        private final String taskName;
+        private final MutationContext mMutationContext;
+        private final String mTaskName;
 
         @SuppressWarnings("argument.type.incompatible") // ok to add this to the map
         private SessionMutationTracker(MutationContext mutationContext, String taskName) {
-            this.mutationContext = mutationContext;
-            this.taskName = taskName;
-            outstandingMutations.add(this);
+            this.mMutationContext = mutationContext;
+            this.mTaskName = taskName;
+            mOutstandingMutations.add(this);
         }
 
         @Override
         public void accept(Result<Model> input) {
-            if (outstandingMutations.remove(this)) {
+            if (mOutstandingMutations.remove(this)) {
                 if (input.isSuccessful()) {
                     updateSharedStateCache(input.getValue().streamDataOperations);
                 }
-                sessionManagerMutation
-                        .createCommitter(taskName, mutationContext,
+                mSessionManagerMutation
+                        .createCommitter(mTaskName, mMutationContext,
                                 FeedSessionManagerImpl.this::modelErrorObserver,
-                                knownContentListener)
+                                mKnownContentListener)
                         .accept(input);
             } else {
                 Logger.w(TAG, "SessionMutationTracker dropping response due to clear");
@@ -682,8 +683,9 @@
     public <T> void getStreamFeaturesFromHead(
             Function<StreamPayload, /*@Nullable*/ T> filterPredicate,
             Consumer<Result<List</*@NonNull*/ T>>> consumer) {
-        taskQueue.execute(Task.GET_STREAM_FEATURES_FROM_HEAD, TaskType.BACKGROUND, () -> {
-            HeadAsStructure headAsStructure = new HeadAsStructure(store, timingUtils, threadUtils);
+        mTaskQueue.execute(Task.GET_STREAM_FEATURES_FROM_HEAD, TaskType.BACKGROUND, () -> {
+            HeadAsStructure headAsStructure =
+                    new HeadAsStructure(mStore, mTimingUtils, mThreadUtils);
             Function<TreeNode, /*@Nullable*/ T> toStreamPayload =
                     treeNode -> filterPredicate.apply(treeNode.getStreamPayload());
             headAsStructure.initialize(result -> {
@@ -702,7 +704,7 @@
 
     @Override
     public void setKnownContentListener(KnownContent.Listener knownContentListener) {
-        this.knownContentListener = knownContentListener;
+        this.mKnownContentListener = knownContentListener;
     }
 
     @Override
@@ -716,14 +718,14 @@
 
     @Override
     public void reset() {
-        threadUtils.checkNotMainThread();
-        sessionManagerMutation.forceResetHead();
-        sessionCache.reset();
+        mThreadUtils.checkNotMainThread();
+        mSessionManagerMutation.forceResetHead();
+        mSessionCache.reset();
         // Invalidate all sessions currently under construction
         List<InitializableSession> invalidateSessions;
-        synchronized (lock) {
-            invalidateSessions = new ArrayList<>(sessionsUnderConstruction);
-            sessionsUnderConstruction.clear();
+        synchronized (mLock) {
+            invalidateSessions = new ArrayList<>(mSessionsUnderConstruction);
+            mSessionsUnderConstruction.clear();
         }
         for (InitializableSession session : invalidateSessions) {
             ModelProvider modelProvider = session.getModelProvider();
@@ -731,32 +733,32 @@
                 modelProvider.invalidate();
             }
         }
-        contentCache.reset();
-        sharedStateCache.clear();
+        mContentCache.reset();
+        mSharedStateCache.clear();
     }
 
     @Override
     public void dump(Dumper dumper) {
         dumper.title(TAG);
-        dumper.forKey("newSessionCount").value(newSessionCount);
-        dumper.forKey("existingSessionCount").value(existingSessionCount).compactPrevious();
-        dumper.forKey("handleTokenCount").value(handleTokenCount).compactPrevious();
-        dumper.forKey("sharedStateSize").value(sharedStateCache.size()).compactPrevious();
+        dumper.forKey("newSessionCount").value(mNewSessionCount);
+        dumper.forKey("existingSessionCount").value(mExistingSessionCount).compactPrevious();
+        dumper.forKey("handleTokenCount").value(mHandleTokenCount).compactPrevious();
+        dumper.forKey("sharedStateSize").value(mSharedStateCache.size()).compactPrevious();
         dumper.forKey("sharedStateInternerSize")
-                .value(sharedStateInterner.size())
+                .value(mSharedStateInterner.size())
                 .compactPrevious();
         dumper.forKey("sharedStateInternerStats")
-                .value(sharedStateInterner.getStats())
+                .value(mSharedStateInterner.getStats())
                 .compactPrevious();
-        dumper.dump(contentCache);
-        dumper.dump(taskQueue);
-        dumper.dump(sessionCache);
-        dumper.dump(sessionManagerMutation);
+        dumper.dump(mContentCache);
+        dumper.dump(mTaskQueue);
+        dumper.dump(mSessionCache);
+        dumper.dump(mSessionManagerMutation);
     }
 
     private void invalidateSessionInternal(
             ModelProvider modelProvider, Session session, UiContext uiContext) {
-        threadUtils.checkNotMainThread();
+        mThreadUtils.checkNotMainThread();
         Logger.i(TAG, "Invalidate session %s", session.getSessionId());
         modelProvider.invalidate(uiContext);
     }
@@ -764,19 +766,19 @@
     // This is only used in tests to verify the contents of the shared state cache.
     @VisibleForTesting
     Map<String, StreamSharedState> getSharedStateCacheForTest() {
-        return new HashMap<>(sharedStateCache);
+        return new HashMap<>(mSharedStateCache);
     }
 
     // This is only used in tests to access a the associated sessions.
     @VisibleForTesting
     SessionCache getSessionCacheForTest() {
-        return sessionCache;
+        return mSessionCache;
     }
 
     // Called in the integration tests
     @VisibleForTesting
     public boolean isDelayed() {
-        return taskQueue.isDelayed();
+        return mTaskQueue.isDelayed();
     }
 
     @Override
@@ -787,13 +789,13 @@
                 initialize();
                 break;
             case LifecycleEvent.CLEAR_ALL:
-                Logger.i(TAG, "CLEAR_ALL will cancel %s mutations", outstandingMutations.size());
-                outstandingMutations.clear();
+                Logger.i(TAG, "CLEAR_ALL will cancel %s mutations", mOutstandingMutations.size());
+                mOutstandingMutations.clear();
                 break;
             case LifecycleEvent.CLEAR_ALL_WITH_REFRESH:
                 Logger.i(TAG, "CLEAR_ALL_WITH_REFRESH will cancel %s mutations",
-                        outstandingMutations.size());
-                outstandingMutations.clear();
+                        mOutstandingMutations.size());
+                mOutstandingMutations.clear();
                 break;
             default:
                 // Do nothing
@@ -802,21 +804,21 @@
     // TODO: implement longer term fix for reading/saving the consistency token
     @Override
     public void triggerUploadActions(Set<StreamUploadableAction> actions) {
-        threadUtils.checkNotMainThread();
+        mThreadUtils.checkNotMainThread();
 
-        actionUploadRequestManager.triggerUploadActions(
+        mActionUploadRequestManager.triggerUploadActions(
                 actions, getConsistencyToken(), getConsistencyTokenConsumer());
     }
 
     @VisibleForTesting
     ConsistencyToken getConsistencyToken() {
-        threadUtils.checkNotMainThread();
+        mThreadUtils.checkNotMainThread();
 
         // don't bother with reading consistencytoken if we're not uploading actions.
-        if (!uploadingActionsEnabled) {
+        if (!mUploadingActionsEnabled) {
             return ConsistencyToken.getDefaultInstance();
         }
-        Result<List<PayloadWithId>> contentResult = store.getPayloads(
+        Result<List<PayloadWithId>> contentResult = mStore.getPayloads(
                 Collections.singletonList(SessionCache.CONSISTENCY_TOKEN_CONTENT_ID));
         if (contentResult.isSuccessful()) {
             for (PayloadWithId payload : contentResult.getValue()) {
@@ -832,7 +834,7 @@
     Consumer<Result<ConsistencyToken>> getConsistencyTokenConsumer() {
         return result -> {
             if (result.isSuccessful()) {
-                store.editContent()
+                mStore.editContent()
                         .add(SessionCache.CONSISTENCY_TOKEN_CONTENT_ID,
                                 StreamPayload.newBuilder()
                                         .setConsistencyToken(result.getValue())
@@ -850,7 +852,7 @@
                 String contentId = dataOperation.getStreamStructure().getContentId();
                 StreamPayload payload = dataOperation.getStreamPayload();
                 if (payload.hasStreamSharedState()) {
-                    sharedStateCache.put(contentId, payload.getStreamSharedState());
+                    mSharedStateCache.put(contentId, payload.getStreamSharedState());
                 }
             }
         }
@@ -927,14 +929,14 @@
     // sometimes be identical, only the inner content_id differing (see [INTERNAL LINK]).
     @VisibleForTesting
     static class StreamSharedStateInterner implements Interner<StreamSharedState> {
-        private final Interner<PietSharedStateItem> interner = new HashPoolInterner<>();
+        private final Interner<PietSharedStateItem> mInterner = new HashPoolInterner<>();
 
         @SuppressWarnings("ReferenceEquality")
         // Intentional reference comparison for interned != orig
         @Override
         public StreamSharedState intern(StreamSharedState input) {
             PietSharedStateItem orig = input.getPietSharedStateItem();
-            PietSharedStateItem interned = interner.intern(orig);
+            PietSharedStateItem interned = mInterner.intern(orig);
             if (interned != orig) {
                 /*
                  * If interned != orig we have a memoized item and we need to replace the proto with
@@ -947,12 +949,12 @@
 
         @Override
         public void clear() {
-            interner.clear();
+            mInterner.clear();
         }
 
         @Override
         public int size() {
-            return interner.size();
+            return mInterner.size();
         }
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedsessionmanager/internal/ContentCache.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedsessionmanager/internal/ContentCache.java
index 9047475..8c19c86 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedsessionmanager/internal/ContentCache.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedsessionmanager/internal/ContentCache.java
@@ -24,15 +24,15 @@
 public final class ContentCache implements Dumpable {
     private static final String TAG = "ContentCache";
 
-    private final Map<String, StreamPayload> mutationCache;
+    private final Map<String, StreamPayload> mMutationCache;
 
-    private int lookupCount;
-    private int hitCount;
-    private int maxMutationCacheSize;
-    private int mutationsCount;
+    private int mLookupCount;
+    private int mHitCount;
+    private int mMaxMutationCacheSize;
+    private int mMutationsCount;
 
     public ContentCache() {
-        mutationCache = new ConcurrentHashMap<>();
+        mMutationCache = new ConcurrentHashMap<>();
     }
 
     /**
@@ -42,8 +42,8 @@
      * is called.
      */
     void startMutation() {
-        mutationsCount++;
-        mutationCache.clear();
+        mMutationsCount++;
+        mMutationCache.clear();
     }
 
     /**
@@ -52,19 +52,19 @@
      * finished the mutation. At this point it would be safe to clear the cache.
      */
     void finishMutation() {
-        if (mutationCache.size() > maxMutationCacheSize) {
-            maxMutationCacheSize = mutationCache.size();
+        if (mMutationCache.size() > mMaxMutationCacheSize) {
+            mMaxMutationCacheSize = mMutationCache.size();
         }
-        mutationCache.clear();
+        mMutationCache.clear();
     }
 
     /** Return the {@link StreamPayload} or {@code null} if it is not found in the cache. */
     /*@Nullable*/
     public StreamPayload get(String key) {
-        StreamPayload value = mutationCache.get(key);
-        lookupCount++;
+        StreamPayload value = mMutationCache.get(key);
+        mLookupCount++;
         if (value != null) {
-            hitCount++;
+            mHitCount++;
         } else {
             // This is expected on startup.
             Logger.d(TAG, "Mutation Cache didn't contain item %s", key);
@@ -75,26 +75,26 @@
     /** Add a new value to the cache, returning the previous version or {@code null}. */
     /*@Nullable*/
     public StreamPayload put(String key, StreamPayload payload) {
-        return mutationCache.put(key, payload);
+        return mMutationCache.put(key, payload);
     }
 
     /** Returns the current number of items in the cache. */
     public int size() {
-        return mutationCache.size();
+        return mMutationCache.size();
     }
 
     public void reset() {
-        mutationCache.clear();
+        mMutationCache.clear();
     }
 
     @Override
     public void dump(Dumper dumper) {
         dumper.title(TAG);
-        dumper.forKey("mutationCacheSize").value(mutationCache.size());
-        dumper.forKey("mutationsCount").value(mutationsCount).compactPrevious();
-        dumper.forKey("maxMutationCacheSize").value(maxMutationCacheSize).compactPrevious();
-        dumper.forKey("lookupCount").value(lookupCount);
-        dumper.forKey("hits").value(hitCount).compactPrevious();
-        dumper.forKey("misses").value(lookupCount - hitCount).compactPrevious();
+        dumper.forKey("mutationCacheSize").value(mMutationCache.size());
+        dumper.forKey("mutationsCount").value(mMutationsCount).compactPrevious();
+        dumper.forKey("maxMutationCacheSize").value(mMaxMutationCacheSize).compactPrevious();
+        dumper.forKey("lookupCount").value(mLookupCount);
+        dumper.forKey("hits").value(mHitCount).compactPrevious();
+        dumper.forKey("misses").value(mLookupCount - mHitCount).compactPrevious();
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedsessionmanager/internal/HeadAsStructure.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedsessionmanager/internal/HeadAsStructure.java
index 40e166f..20c3430 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedsessionmanager/internal/HeadAsStructure.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedsessionmanager/internal/HeadAsStructure.java
@@ -34,46 +34,46 @@
 public final class HeadAsStructure {
     private static final String TAG = "HeadFilter";
 
-    private final Store store;
-    private final TimingUtils timingUtils;
-    private final ThreadUtils threadUtils;
-    private final Object lock = new Object();
+    private final Store mStore;
+    private final TimingUtils mTimingUtils;
+    private final ThreadUtils mThreadUtils;
+    private final Object mLock = new Object();
     @VisibleForTesting
-    final Map<String, List<TreeNode>> tree = new HashMap<>();
+    final Map<String, List<TreeNode>> mTree = new HashMap<>();
     @VisibleForTesting
-    final Map<String, TreeNode> content = new HashMap<>();
+    final Map<String, TreeNode> mContent = new HashMap<>();
 
     @GuardedBy("lock")
-    private boolean initalized;
+    private boolean mInitalized;
 
     @VisibleForTesting
-    TreeNode root;
+    TreeNode mRoot;
 
     /**
      * Define a Node within the tree formed by $HEAD. This contains both the structure and content.
      * Allowing filtering of either the structure or content.
      */
     public static final class TreeNode {
-        final StreamStructure streamStructure;
-        StreamPayload streamPayload;
+        final StreamStructure mStreamStructure;
+        StreamPayload mStreamPayload;
 
         TreeNode(StreamStructure streamStructure) {
-            this.streamStructure = streamStructure;
+            this.mStreamStructure = streamStructure;
         }
 
         public StreamStructure getStreamStructure() {
-            return streamStructure;
+            return mStreamStructure;
         }
 
         public StreamPayload getStreamPayload() {
-            return streamPayload;
+            return mStreamPayload;
         }
     }
 
     public HeadAsStructure(Store store, TimingUtils timingUtils, ThreadUtils threadUtils) {
-        this.store = store;
-        this.timingUtils = timingUtils;
-        this.threadUtils = threadUtils;
+        this.mStore = store;
+        this.mTimingUtils = timingUtils;
+        this.mThreadUtils = threadUtils;
     }
 
     /**
@@ -83,11 +83,11 @@
      */
     public void initialize(Consumer<Result<Void>> consumer) {
         Logger.i(TAG, "initialize HeadFilter");
-        threadUtils.checkNotMainThread();
-        ElapsedTimeTracker timeTracker = timingUtils.getElapsedTimeTracker(TAG);
+        mThreadUtils.checkNotMainThread();
+        ElapsedTimeTracker timeTracker = mTimingUtils.getElapsedTimeTracker(TAG);
 
-        synchronized (lock) {
-            if (initalized) {
+        synchronized (mLock) {
+            if (mInitalized) {
                 consumer.accept(Result.failure());
                 return;
             }
@@ -101,10 +101,10 @@
                 consumer.accept(Result.failure());
                 return;
             }
-            initalized = true;
+            mInitalized = true;
         }
 
-        timeTracker.stop("task", "HeadFilter.initialize", "content", content.size());
+        timeTracker.stop("task", "HeadFilter.initialize", "content", mContent.size());
         consumer.accept(Result.success(null));
     }
 
@@ -113,7 +113,7 @@
      * {@code T}. The {@code filterPredicate} will filter and transform the node. If {@code
      * filterPredicate} returns null, the value will be skipped.
      *
-     * <p>This method must be called after {@link #initalized}. This method may run on the main
+     * <p>This method must be called after {@link #mInitalized}. This method may run on the main
      * thread.
      */
     // The Nullness checker requires specifying the Nullable vs. NonNull state explicitly since it
@@ -121,14 +121,14 @@
     public <T> Result<List</*@NonNull*/ T>> filter(
             Function<TreeNode, /*@Nullable*/ T> filterPredicate) {
         Logger.i(TAG, "filterHead");
-        synchronized (lock) {
-            if (!initalized) {
+        synchronized (mLock) {
+            if (!mInitalized) {
                 Logger.e(TAG, "HeadFilter has not been initialized");
                 return Result.failure();
             }
         }
 
-        ElapsedTimeTracker timeTracker = timingUtils.getElapsedTimeTracker(TAG);
+        ElapsedTimeTracker timeTracker = mTimingUtils.getElapsedTimeTracker(TAG);
         List</*@NonNull*/ T> filteredList = new ArrayList<>();
         traverseHead(filterPredicate, filteredList);
         Logger.i(TAG, "filterList size %s", filteredList.size());
@@ -138,21 +138,21 @@
 
     private <T> void traverseHead(
             Function<TreeNode, /*@Nullable*/ T> filterPredicate, List</*@NonNull*/ T> results) {
-        TreeNode r = Validators.checkNotNull(root);
+        TreeNode r = Validators.checkNotNull(mRoot);
         traverseNode(r, filterPredicate, results);
     }
 
     private <T> void traverseNode(TreeNode node,
             Function<TreeNode, /*@Nullable*/ T> filterPredicate, List</*@NonNull*/ T> results) {
-        if (node.streamPayload == null) {
-            Logger.w(TAG, "Found unbound node %s", node.streamStructure.getContentId());
+        if (node.mStreamPayload == null) {
+            Logger.w(TAG, "Found unbound node %s", node.mStreamStructure.getContentId());
             return;
         }
         T data = filterPredicate.apply(node);
         if (data != null) {
             results.add(data);
         }
-        List<TreeNode> children = tree.get(node.streamStructure.getContentId());
+        List<TreeNode> children = mTree.get(node.mStreamStructure.getContentId());
         if (children != null) {
             for (TreeNode child : children) {
                 traverseNode(child, filterPredicate, results);
@@ -162,25 +162,26 @@
 
     private boolean bindChildren() {
         Result<List<PayloadWithId>> payloadResult =
-                store.getPayloads(new ArrayList<>(content.keySet()));
+                mStore.getPayloads(new ArrayList<>(mContent.keySet()));
         if (!payloadResult.isSuccessful()) {
             Logger.e(TAG, "Unable to get payloads");
             return false;
         }
         for (PayloadWithId payloadWithId : payloadResult.getValue()) {
-            TreeNode node = content.get(payloadWithId.contentId);
+            TreeNode node = mContent.get(payloadWithId.contentId);
             if (node == null) {
                 // This shouldn't happen
                 Logger.w(TAG, "Unable to find tree content for %s", payloadWithId.contentId);
                 continue;
             }
-            node.streamPayload = payloadWithId.payload;
+            node.mStreamPayload = payloadWithId.payload;
         }
         return true;
     }
 
     private boolean buildTree() {
-        Result<List<StreamStructure>> headResult = store.getStreamStructures(Store.HEAD_SESSION_ID);
+        Result<List<StreamStructure>> headResult =
+                mStore.getStreamStructures(Store.HEAD_SESSION_ID);
         if (!headResult.isSuccessful()) {
             Logger.e(TAG, "Unable to load $HEAD");
             return false;
@@ -202,7 +203,7 @@
                     break;
             }
         }
-        if (root == null) {
+        if (mRoot == null) {
             Logger.e(TAG, "Root was not found");
             return false;
         }
@@ -211,19 +212,19 @@
 
     private void updateOrAppend(StreamStructure structure) {
         String contentId = structure.getContentId();
-        if (content.containsKey(contentId)) {
+        if (mContent.containsKey(contentId)) {
             // this is an update, ignore it
             return;
         }
         TreeNode node = new TreeNode(structure);
-        content.put(contentId, node);
+        mContent.put(contentId, node);
         updateTreeStructure(contentId);
         if (!structure.hasParentContentId()) {
             // this is the root
-            if (root != null) {
+            if (mRoot != null) {
                 Logger.e(TAG, "Found Multiple roots");
             }
-            root = node;
+            mRoot = node;
             return;
         }
 
@@ -235,7 +236,7 @@
     private void remove(StreamStructure structure) {
         String contentId = structure.getContentId();
         String parentId = structure.hasParentContentId() ? structure.getParentContentId() : null;
-        TreeNode node = content.get(contentId);
+        TreeNode node = mContent.get(contentId);
         if (node == null) {
             Logger.w(TAG, "Unable to find StreamStructure %s to remove", contentId);
             return;
@@ -246,21 +247,21 @@
             Logger.w(TAG, "Removing Root is not supported, unable to remove %s", contentId);
             return;
         }
-        List<TreeNode> parentChildren = tree.get(parentId);
+        List<TreeNode> parentChildren = mTree.get(parentId);
         if (parentChildren == null) {
             Logger.w(TAG, "Parent %s not found, unable to remove", parentId, contentId);
         } else if (!parentChildren.remove(node)) {
             Logger.w(TAG, "Removing %s, not found in parent %s", contentId, parentId);
         }
-        tree.remove(contentId);
-        content.remove(contentId);
+        mTree.remove(contentId);
+        mContent.remove(contentId);
     }
 
     private List<TreeNode> updateTreeStructure(String contentId) {
-        List<TreeNode> children = tree.get(contentId);
+        List<TreeNode> children = mTree.get(contentId);
         if (children == null) {
             children = new ArrayList<>();
-            tree.put(contentId, children);
+            mTree.put(contentId, children);
         }
         return children;
     }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedsessionmanager/internal/HeadSessionImpl.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedsessionmanager/internal/HeadSessionImpl.java
index 7a61cd8..db570bf 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedsessionmanager/internal/HeadSessionImpl.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedsessionmanager/internal/HeadSessionImpl.java
@@ -27,37 +27,37 @@
 public class HeadSessionImpl implements Session, Dumpable {
     private static final String TAG = "HeadSessionImpl";
 
-    private final Store store;
-    private final TimingUtils timingUtils;
-    private final SessionContentTracker sessionContentTracker =
+    private final Store mStore;
+    private final TimingUtils mTimingUtils;
+    private final SessionContentTracker mSessionContentTracker =
             new SessionContentTracker(/* supportsClearAll= */ true);
-    private final boolean limitPageUpdatesInHead;
+    private final boolean mLimitPageUpdatesInHead;
 
-    private int schemaVersion;
+    private int mSchemaVersion;
 
     // operation counts for the dumper
-    private int updateCount;
-    private int storeMutationFailures;
+    private int mUpdateCount;
+    private int mStoreMutationFailures;
 
     HeadSessionImpl(Store store, TimingUtils timingUtils, boolean limitPageUpdatesInHead) {
-        this.store = store;
-        this.timingUtils = timingUtils;
-        this.limitPageUpdatesInHead = limitPageUpdatesInHead;
+        this.mStore = store;
+        this.mTimingUtils = timingUtils;
+        this.mLimitPageUpdatesInHead = limitPageUpdatesInHead;
     }
 
     /** Initialize head from the stored stream structures. */
     void initializeSession(List<StreamStructure> streamStructures, int schemaVersion) {
         Logger.i(TAG, "Initialize HEAD %s items", streamStructures.size());
-        this.schemaVersion = schemaVersion;
-        sessionContentTracker.update(streamStructures);
+        this.mSchemaVersion = schemaVersion;
+        mSessionContentTracker.update(streamStructures);
     }
 
     void reset() {
-        sessionContentTracker.clear();
+        mSessionContentTracker.clear();
     }
 
     public int getSchemaVersion() {
-        return schemaVersion;
+        return mSchemaVersion;
     }
 
     @Override
@@ -70,25 +70,25 @@
     public void updateSession(boolean clearHead, List<StreamStructure> streamStructures,
             int schemaVersion,
             /*@Nullable*/ MutationContext mutationContext) {
-        ElapsedTimeTracker timeTracker = timingUtils.getElapsedTimeTracker(TAG);
-        updateCount++;
+        ElapsedTimeTracker timeTracker = mTimingUtils.getElapsedTimeTracker(TAG);
+        mUpdateCount++;
 
         if (clearHead) {
-            this.schemaVersion = schemaVersion;
+            this.mSchemaVersion = schemaVersion;
         }
 
         StreamToken mutationSourceToken =
                 mutationContext != null ? mutationContext.getContinuationToken() : null;
         if (mutationSourceToken != null) {
             String contentId = mutationSourceToken.getContentId();
-            if (mutationSourceToken.hasContentId() && !sessionContentTracker.contains(contentId)) {
+            if (mutationSourceToken.hasContentId() && !mSessionContentTracker.contains(contentId)) {
                 // Make sure that mutationSourceToken is a token in this session, if not, we don't
                 // update the session.
                 timeTracker.stop(
                         "updateSessionIgnored", getSessionId(), "Token Not Found", contentId);
                 Logger.i(TAG, "Token %s not found in session, ignoring update", contentId);
                 return;
-            } else if (limitPageUpdatesInHead) {
+            } else if (mLimitPageUpdatesInHead) {
                 timeTracker.stop("updateSessionIgnored", getSessionId());
                 Logger.i(TAG, "Limited paging updates in HEAD");
                 return;
@@ -99,12 +99,12 @@
         int addFeatureCnt = 0;
         int requiredContentCnt = 0;
         boolean cleared = false;
-        SessionMutation sessionMutation = store.editSession(getSessionId());
+        SessionMutation sessionMutation = mStore.editSession(getSessionId());
         for (StreamStructure streamStructure : streamStructures) {
             String contentId = streamStructure.getContentId();
             switch (streamStructure.getOperation()) {
                 case UPDATE_OR_APPEND:
-                    if (sessionContentTracker.contains(contentId)) {
+                    if (mSessionContentTracker.contains(contentId)) {
                         // this is an update operation so we can ignore it
                         updateCnt++;
                     } else {
@@ -114,7 +114,7 @@
                     break;
                 case REMOVE:
                     Logger.i(TAG, "Removing Item %s from $HEAD", contentId);
-                    if (sessionContentTracker.contains(contentId)) {
+                    if (mSessionContentTracker.contains(contentId)) {
                         sessionMutation.add(streamStructure);
                     } else {
                         Logger.w(TAG, "Remove operation content not found in $HEAD");
@@ -124,7 +124,7 @@
                     cleared = true;
                     break;
                 case REQUIRED_CONTENT:
-                    if (!sessionContentTracker.contains(contentId)) {
+                    if (!mSessionContentTracker.contains(contentId)) {
                         sessionMutation.add(streamStructure);
                         requiredContentCnt++;
                     }
@@ -133,7 +133,7 @@
                     Logger.e(
                             TAG, "Unknown operation, ignoring: %s", streamStructure.getOperation());
             }
-            sessionContentTracker.update(streamStructure);
+            mSessionContentTracker.update(streamStructure);
         }
         boolean success = sessionMutation.commit();
         if (success) {
@@ -141,9 +141,9 @@
                     addFeatureCnt, "updates", updateCnt, "requiredContent", requiredContentCnt);
         } else {
             timeTracker.stop("updateSessionFailure", getSessionId());
-            storeMutationFailures++;
+            mStoreMutationFailures++;
             Logger.e(TAG, "$HEAD session mutation failed");
-            store.switchToEphemeralMode();
+            mStore.switchToEphemeralMode();
         }
     }
 
@@ -160,19 +160,19 @@
 
     @Override
     public Set<String> getContentInSession() {
-        return sessionContentTracker.getContentIds();
+        return mSessionContentTracker.getContentIds();
     }
 
     public boolean isHeadEmpty() {
-        return sessionContentTracker.isEmpty();
+        return mSessionContentTracker.isEmpty();
     }
 
     @Override
     public void dump(Dumper dumper) {
         dumper.title(TAG);
         dumper.forKey("sessionName").value(getSessionId());
-        dumper.forKey("updateCount").value(updateCount).compactPrevious();
-        dumper.forKey("storeMutationFailures").value(storeMutationFailures).compactPrevious();
-        dumper.dump(sessionContentTracker);
+        dumper.forKey("updateCount").value(mUpdateCount).compactPrevious();
+        dumper.forKey("storeMutationFailures").value(mStoreMutationFailures).compactPrevious();
+        dumper.dump(mSessionContentTracker);
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedsessionmanager/internal/SessionCache.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedsessionmanager/internal/SessionCache.java
index 310e1477..621a4ffb6 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedsessionmanager/internal/SessionCache.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedsessionmanager/internal/SessionCache.java
@@ -59,48 +59,48 @@
     public static final String CONSISTENCY_TOKEN_CONTENT_ID = "ct";
 
     // Used to synchronize the stored data
-    private final Object lock = new Object();
+    private final Object mLock = new Object();
 
     // Sessions with ModelProviders (attached).
     @GuardedBy("lock")
-    private final Map<String, Session> attachedSessions = new HashMap<>();
+    private final Map<String, Session> mAttachedSessions = new HashMap<>();
 
     @GuardedBy("lock")
-    private final Map<String, SessionMetadata> sessionsMetadata = new HashMap<>();
+    private final Map<String, SessionMetadata> mSessionsMetadata = new HashMap<>();
 
-    private final HeadSessionImpl head;
+    private final HeadSessionImpl mHead;
 
-    private final Store store;
-    private final TaskQueue taskQueue;
-    private final SessionFactory sessionFactory;
-    private final long lifetimeMs;
-    private final TimingUtils timingUtils;
-    private final ThreadUtils threadUtils;
-    private final Clock clock;
+    private final Store mStore;
+    private final TaskQueue mTaskQueue;
+    private final SessionFactory mSessionFactory;
+    private final long mLifetimeMs;
+    private final TimingUtils mTimingUtils;
+    private final ThreadUtils mThreadUtils;
+    private final Clock mClock;
 
-    private boolean initialized;
+    private boolean mInitialized;
 
     // operation counts for the dumper
-    private int getCount;
-    private int getAttachedCount;
-    private int getAllCount;
-    private int putCount;
-    private int removeCount;
-    private int unboundSessionCount;
-    private int detachedSessionCount;
-    private int expiredSessionsCleared;
+    private int mGetCount;
+    private int mGetAttachedCount;
+    private int mGetAllCount;
+    private int mPutCount;
+    private int mRemoveCount;
+    private int mUnboundSessionCount;
+    private int mDetachedSessionCount;
+    private int mExpiredSessionsCleared;
 
     public SessionCache(Store store, TaskQueue taskQueue, SessionFactory sessionFactory,
             long lifetimeMs, TimingUtils timingUtils, ThreadUtils threadUtil, Clock clock) {
-        this.store = store;
-        this.taskQueue = taskQueue;
-        this.sessionFactory = sessionFactory;
-        this.lifetimeMs = lifetimeMs;
-        this.timingUtils = timingUtils;
-        this.threadUtils = threadUtil;
-        this.clock = clock;
+        this.mStore = store;
+        this.mTaskQueue = taskQueue;
+        this.mSessionFactory = sessionFactory;
+        this.mLifetimeMs = lifetimeMs;
+        this.mTimingUtils = timingUtils;
+        this.mThreadUtils = threadUtil;
+        this.mClock = clock;
 
-        this.head = sessionFactory.getHeadSession();
+        this.mHead = sessionFactory.getHeadSession();
     }
 
     /**
@@ -108,29 +108,29 @@
      * finished running.
      */
     public HeadSessionImpl getHead() {
-        return head;
+        return mHead;
     }
 
     /** Returns {@code true} if HEAD has been initialize, which happens in {@link #initialize()}. */
     public boolean isHeadInitialized() {
-        return initialized;
+        return mInitialized;
     }
 
     /**
      * Returns true if sessionId exists in any of {attached, unbound, head} set, false otherwise.
      */
     public boolean hasSession(String sessionId) {
-        synchronized (lock) {
-            return sessionsMetadata.containsKey(sessionId);
+        synchronized (mLock) {
+            return mSessionsMetadata.containsKey(sessionId);
         }
     }
 
     /** Returns all attached sessions tracked by the SessionCache. This does NOT include head. */
     public List<Session> getAttachedSessions() {
-        getAttachedCount++;
-        synchronized (lock) {
-            Logger.d(TAG, "getAttachedSessions, size=%d", attachedSessions.size());
-            return new ArrayList<>(attachedSessions.values());
+        mGetAttachedCount++;
+        synchronized (mLock) {
+            Logger.d(TAG, "getAttachedSessions, size=%d", mAttachedSessions.size());
+            return new ArrayList<>(mAttachedSessions.values());
         }
     }
 
@@ -142,15 +142,15 @@
      * storage in order to populate the unbound sessions.
      */
     List<Session> getAllSessions() {
-        threadUtils.checkNotMainThread();
-        getAllCount++;
+        mThreadUtils.checkNotMainThread();
+        mGetAllCount++;
 
         // Re-build the unbound sessions (that were thrown away on detach) and add them.
         List<Session> allSessions = new ArrayList<>(populateUnboundSessions());
 
-        allSessions.add(head);
-        synchronized (lock) {
-            allSessions.addAll(attachedSessions.values());
+        allSessions.add(mHead);
+        synchronized (mLock) {
+            allSessions.addAll(mAttachedSessions.values());
         }
 
         Logger.d(TAG, "getAllSessions, size=%d", allSessions.size());
@@ -163,16 +163,16 @@
      */
     /*@Nullable*/
     public Session getAttached(String sessionId) {
-        getCount++;
-        synchronized (lock) {
-            return attachedSessions.get(sessionId);
+        mGetCount++;
+        synchronized (mLock) {
+            return mAttachedSessions.get(sessionId);
         }
     }
 
     /** Returns the last time content was added to HEAD. */
     public long getHeadLastAddedTimeMillis() {
-        synchronized (lock) {
-            SessionMetadata metadata = sessionsMetadata.get(head.getSessionId());
+        synchronized (mLock) {
+            SessionMetadata metadata = mSessionsMetadata.get(mHead.getSessionId());
             if (metadata == null) {
                 Logger.e(TAG, "SessionMetadata missing for HEAD");
                 return 0L;
@@ -186,17 +186,17 @@
             String sessionId, long creationTimeMillis, int schemaVersion, Session session) {
         Logger.d(TAG, "putAttached, sessionId=%s", sessionId);
 
-        threadUtils.checkNotMainThread();
-        putCount++;
-        synchronized (lock) {
-            attachedSessions.put(sessionId, session);
-            sessionsMetadata.put(sessionId,
+        mThreadUtils.checkNotMainThread();
+        mPutCount++;
+        synchronized (mLock) {
+            mAttachedSessions.put(sessionId, session);
+            mSessionsMetadata.put(sessionId,
                     SessionMetadata.newBuilder()
                             .setCreationTimeMillis(creationTimeMillis)
                             .setSchemaVersion(schemaVersion)
                             .build());
-            Logger.d(TAG, "Sessions size: attached=%d, all=%d", attachedSessions.size(),
-                    sessionsMetadata.size());
+            Logger.d(TAG, "Sessions size: attached=%d, all=%d", mAttachedSessions.size(),
+                    mSessionsMetadata.size());
         }
         updatePersistedSessionsMetadata();
     }
@@ -205,12 +205,12 @@
     public void putAttachedAndRetainMetadata(String sessionId, Session session) {
         Logger.d(TAG, "putAttachedAndRetainMetadata, sessionId=%s", sessionId);
 
-        threadUtils.checkNotMainThread();
-        putCount++;
-        synchronized (lock) {
-            attachedSessions.put(sessionId, session);
-            Logger.d(TAG, "Sessions size: attached=%d, all=%d", attachedSessions.size(),
-                    sessionsMetadata.size());
+        mThreadUtils.checkNotMainThread();
+        mPutCount++;
+        synchronized (mLock) {
+            mAttachedSessions.put(sessionId, session);
+            Logger.d(TAG, "Sessions size: attached=%d, all=%d", mAttachedSessions.size(),
+                    mSessionsMetadata.size());
         }
     }
 
@@ -222,47 +222,47 @@
     public void detachModelProvider(String sessionId) {
         Logger.d(TAG, "detachModelProvider, sessionId=%s", sessionId);
 
-        threadUtils.checkNotMainThread();
+        mThreadUtils.checkNotMainThread();
         InitializableSession initializableSession;
-        synchronized (lock) {
-            Session session = attachedSessions.get(sessionId);
+        synchronized (mLock) {
+            Session session = mAttachedSessions.get(sessionId);
             if (!(session instanceof InitializableSession)) {
                 Logger.w(TAG, "Unable to detach session %s", sessionId);
                 return;
             } else {
                 initializableSession = (InitializableSession) session;
             }
-            attachedSessions.remove(sessionId);
-            Logger.d(TAG, "Sessions size: attached=%d, all=%d", attachedSessions.size(),
-                    sessionsMetadata.size());
+            mAttachedSessions.remove(sessionId);
+            Logger.d(TAG, "Sessions size: attached=%d, all=%d", mAttachedSessions.size(),
+                    mSessionsMetadata.size());
         }
 
         initializableSession.bindModelProvider(null, null);
-        detachedSessionCount++;
+        mDetachedSessionCount++;
     }
 
     /** Remove an attached {@link Session} from the SessionCache. */
     public void removeAttached(String sessionId) {
         Logger.d(TAG, "removeAttached, sessionId=%s", sessionId);
 
-        threadUtils.checkNotMainThread();
-        removeCount++;
-        synchronized (lock) {
-            attachedSessions.remove(sessionId);
-            sessionsMetadata.remove(sessionId);
-            Logger.d(TAG, "Sessions size: attached=%d, all=%d", attachedSessions.size(),
-                    sessionsMetadata.size());
+        mThreadUtils.checkNotMainThread();
+        mRemoveCount++;
+        synchronized (mLock) {
+            mAttachedSessions.remove(sessionId);
+            mSessionsMetadata.remove(sessionId);
+            Logger.d(TAG, "Sessions size: attached=%d, all=%d", mAttachedSessions.size(),
+                    mSessionsMetadata.size());
         }
         updatePersistedSessionsMetadata();
     }
 
     /** Initialize the SessionCache from Store. */
     public boolean initialize() {
-        threadUtils.checkNotMainThread();
+        mThreadUtils.checkNotMainThread();
 
         // create the head session from the data in the Store
-        ElapsedTimeTracker headTimeTracker = timingUtils.getElapsedTimeTracker(TAG);
-        Result<List<StreamStructure>> results = store.getStreamStructures(head.getSessionId());
+        ElapsedTimeTracker headTimeTracker = mTimingUtils.getElapsedTimeTracker(TAG);
+        Result<List<StreamStructure>> results = mStore.getStreamStructures(mHead.getSessionId());
         if (!results.isSuccessful()) {
             Logger.w(TAG, "unable to get head stream structures");
             return false;
@@ -270,26 +270,26 @@
 
         List<StreamSession> sessionList = getPersistedSessions();
         int headSchemaVersion = getHeadSchemaVersion(sessionList);
-        head.initializeSession(results.getValue(), headSchemaVersion);
-        initialized = true;
+        mHead.initializeSession(results.getValue(), headSchemaVersion);
+        mInitialized = true;
         headTimeTracker.stop("", "createHead");
 
         initializePersistedSessions(sessionList);
 
         // Ensure that SessionMetadata exists for HEAD.
-        synchronized (lock) {
-            if (!sessionsMetadata.containsKey(head.getSessionId())) {
-                sessionsMetadata.put(head.getSessionId(), SessionMetadata.getDefaultInstance());
+        synchronized (mLock) {
+            if (!mSessionsMetadata.containsKey(mHead.getSessionId())) {
+                mSessionsMetadata.put(mHead.getSessionId(), SessionMetadata.getDefaultInstance());
             }
-            Logger.d(TAG, "initialize, size=%d", sessionsMetadata.size());
+            Logger.d(TAG, "initialize, size=%d", mSessionsMetadata.size());
         }
         return true;
     }
 
     public void reset() {
         List<Session> sessionList;
-        synchronized (lock) {
-            sessionList = new ArrayList<>(attachedSessions.values());
+        synchronized (mLock) {
+            sessionList = new ArrayList<>(mAttachedSessions.values());
         }
         for (Session session : sessionList) {
             ModelProvider modelProvider = session.getModelProvider();
@@ -297,20 +297,20 @@
                 modelProvider.invalidate();
             }
         }
-        synchronized (lock) {
-            attachedSessions.clear();
-            sessionsMetadata.clear();
-            head.reset();
-            sessionsMetadata.put(head.getSessionId(), SessionMetadata.getDefaultInstance());
-            initialized = true;
+        synchronized (mLock) {
+            mAttachedSessions.clear();
+            mSessionsMetadata.clear();
+            mHead.reset();
+            mSessionsMetadata.put(mHead.getSessionId(), SessionMetadata.getDefaultInstance());
+            mInitialized = true;
         }
     }
 
     /** Returns when the specified {@code sessionId} was created. */
     @VisibleForTesting
     long getCreationTimeMillis(String sessionId) {
-        synchronized (lock) {
-            SessionMetadata metadata = sessionsMetadata.get(sessionId);
+        synchronized (mLock) {
+            SessionMetadata metadata = mSessionsMetadata.get(sessionId);
             if (metadata == null) {
                 Logger.e(TAG, "SessionMetadata missing for session %s", sessionId);
                 return 0L;
@@ -324,12 +324,12 @@
      * disk.
      */
     void updateHeadMetadata(long lastAddedTimeMillis, int schemaVersion) {
-        threadUtils.checkNotMainThread();
-        synchronized (lock) {
-            SessionMetadata metadata = sessionsMetadata.get(head.getSessionId());
+        mThreadUtils.checkNotMainThread();
+        synchronized (mLock) {
+            SessionMetadata metadata = mSessionsMetadata.get(mHead.getSessionId());
             SessionMetadata.Builder builder =
                     metadata == null ? SessionMetadata.newBuilder() : metadata.toBuilder();
-            sessionsMetadata.put(head.getSessionId(),
+            mSessionsMetadata.put(mHead.getSessionId(),
                     builder.setLastAddedTimeMillis(lastAddedTimeMillis)
                             .setSchemaVersion(schemaVersion)
                             .build());
@@ -346,36 +346,36 @@
      * <p>NOTE: The head and attached sessions will explicitly not be returned.
      */
     private Collection<Session> populateUnboundSessions() {
-        threadUtils.checkNotMainThread();
+        mThreadUtils.checkNotMainThread();
 
         List<StreamSession> sessionList = getPersistedSessions();
-        HeadSessionImpl headSession = Validators.checkNotNull(head);
+        HeadSessionImpl headSession = Validators.checkNotNull(mHead);
         String headSessionId = headSession.getSessionId();
 
         Map<String, Session> unboundSessions = new HashMap<>();
         for (StreamSession session : sessionList) {
             String sessionId = session.getSessionId();
-            synchronized (lock) {
+            synchronized (mLock) {
                 // We need only unbound sessions, i.e. sessions whose IDs are part of
                 // sessionsMetadata but are not attached or head (those are always stored in
                 // attachedSessions/head respectively so do not need to be restored from persistent
                 // storage.
-                if (attachedSessions.containsKey(sessionId)
-                        || !sessionsMetadata.containsKey(sessionId)
+                if (mAttachedSessions.containsKey(sessionId)
+                        || !mSessionsMetadata.containsKey(sessionId)
                         || sessionId.equals(headSessionId)) {
                     continue;
                 }
             }
             InitializableSession unboundSession;
             // Unbound sessions are sessions that are able to be created through restore
-            unboundSession = sessionFactory.getSession();
+            unboundSession = mSessionFactory.getSession();
             unboundSession.setSessionId(sessionId);
             unboundSessions.put(sessionId, unboundSession);
 
             // Populate the newly created unbound session.
             Logger.i(TAG, "Populate unbound session %s", sessionId);
             Result<List<StreamStructure>> streamStructuresResult =
-                    store.getStreamStructures(sessionId);
+                    mStore.getStreamStructures(sessionId);
             if (streamStructuresResult.isSuccessful()) {
                 unboundSession.populateModelProvider(streamStructuresResult.getValue(),
                         /* cachedBindings= */ false,
@@ -389,9 +389,9 @@
     }
 
     private void initializePersistedSessions(List<StreamSession> sessionList) {
-        threadUtils.checkNotMainThread();
+        mThreadUtils.checkNotMainThread();
 
-        HeadSessionImpl headSession = Validators.checkNotNull(head);
+        HeadSessionImpl headSession = Validators.checkNotNull(mHead);
         String headSessionId = headSession.getSessionId();
         boolean cleanupSessions = false;
         for (StreamSession session : sessionList) {
@@ -401,8 +401,8 @@
                 // update the information stored for the $HEAD record we created previously
                 Logger.i(TAG, "Updating $HEAD state, lastAdded %s",
                         StringFormattingUtils.formatLogDate(metadata.getLastAddedTimeMillis()));
-                synchronized (lock) {
-                    sessionsMetadata.put(sessionId, metadata);
+                synchronized (mLock) {
+                    mSessionsMetadata.put(sessionId, metadata);
                 }
                 continue;
             }
@@ -412,32 +412,32 @@
                 cleanupSessions = true;
                 continue;
             }
-            synchronized (lock) {
-                if (sessionsMetadata.containsKey(session.getSessionId())) {
+            synchronized (mLock) {
+                if (mSessionsMetadata.containsKey(session.getSessionId())) {
                     // Don't replace sessions already found in sessions
                     continue;
                 }
-                sessionsMetadata.put(session.getSessionId(), metadata);
+                mSessionsMetadata.put(session.getSessionId(), metadata);
             }
         }
 
         if (cleanupSessions) {
             // Queue up a task to clear the session journals.
-            taskQueue.execute(Task.CLEAN_UP_SESSION_JOURNALS, TaskType.BACKGROUND,
+            mTaskQueue.execute(Task.CLEAN_UP_SESSION_JOURNALS, TaskType.BACKGROUND,
                     this::cleanupSessionJournals);
         }
         Set<String> reservedContentIds = new HashSet<>();
         reservedContentIds.add(STREAM_SESSION_CONTENT_ID);
         reservedContentIds.add(CONSISTENCY_TOKEN_CONTENT_ID);
-        taskQueue.execute(Task.GARBAGE_COLLECT_CONTENT, TaskType.BACKGROUND,
-                store.triggerContentGc(reservedContentIds, getAccessibleContentSupplier(),
+        mTaskQueue.execute(Task.GARBAGE_COLLECT_CONTENT, TaskType.BACKGROUND,
+                mStore.triggerContentGc(reservedContentIds, getAccessibleContentSupplier(),
                         shouldKeepSharedStates()));
     }
 
     private boolean shouldKeepSharedStates() {
-        synchronized (lock) {
-            for (String sessionId : sessionsMetadata.keySet()) {
-                SessionMetadata metadata = sessionsMetadata.get(sessionId);
+        synchronized (mLock) {
+            for (String sessionId : mSessionsMetadata.keySet()) {
+                SessionMetadata metadata = mSessionsMetadata.get(sessionId);
                 if (metadata.getSchemaVersion()
                         < MIN_SCHEMA_VERSION_FOR_PIET_SHARED_STATE_REQUIRED_CONTENT) {
                     return true;
@@ -450,25 +450,25 @@
 
     private Supplier<Set<String>> getAccessibleContentSupplier() {
         return () -> {
-            threadUtils.checkNotMainThread();
+            mThreadUtils.checkNotMainThread();
             Logger.i(TAG, "Determining accessible content");
 
             // SessionIds should be determined at the time GC runs.
             Set<String> sessionIds;
-            synchronized (lock) {
-                sessionIds = sessionsMetadata.keySet();
+            synchronized (mLock) {
+                sessionIds = mSessionsMetadata.keySet();
             }
 
-            Set<String> accessibleContent = new HashSet<>(head.getContentInSession());
+            Set<String> accessibleContent = new HashSet<>(mHead.getContentInSession());
             for (String sessionId : sessionIds) {
-                if (sessionId.equals(head.getSessionId())) {
+                if (sessionId.equals(mHead.getSessionId())) {
                     continue;
                 }
 
                 SessionContentTracker sessionContentTracker =
                         new SessionContentTracker(/* supportsClearAll= */ false);
                 Result<List<StreamStructure>> streamStructuresResult =
-                        store.getStreamStructures(sessionId);
+                        mStore.getStreamStructures(sessionId);
                 if (streamStructuresResult.isSuccessful()) {
                     sessionContentTracker.update(streamStructuresResult.getValue());
                 } else {
@@ -484,7 +484,7 @@
     List<StreamSession> getPersistedSessions() {
         List<String> sessionIds = new ArrayList<>();
         sessionIds.add(STREAM_SESSION_CONTENT_ID);
-        Result<List<PayloadWithId>> sessionPayloadResult = store.getPayloads(sessionIds);
+        Result<List<PayloadWithId>> sessionPayloadResult = mStore.getPayloads(sessionIds);
         if (!sessionPayloadResult.isSuccessful()) {
             // If we cant read the persisted sessions, report the error and return null. No sessions
             // will be created, this is as if we deleted all existing sessions.  It should be safe
@@ -508,14 +508,14 @@
 
     @VisibleForTesting
     void updatePersistedSessionsMetadata() {
-        threadUtils.checkNotMainThread();
-        ElapsedTimeTracker timeTracker = timingUtils.getElapsedTimeTracker(TAG);
+        mThreadUtils.checkNotMainThread();
+        ElapsedTimeTracker timeTracker = mTimingUtils.getElapsedTimeTracker(TAG);
         StreamSessions.Builder sessionsBuilder = StreamSessions.newBuilder();
         int sessionCount;
-        synchronized (lock) {
-            sessionCount = sessionsMetadata.size();
-            for (String sessionId : sessionsMetadata.keySet()) {
-                SessionMetadata sessionMetadata = sessionsMetadata.get(sessionId);
+        synchronized (mLock) {
+            sessionCount = mSessionsMetadata.size();
+            for (String sessionId : mSessionsMetadata.keySet()) {
+                SessionMetadata sessionMetadata = mSessionsMetadata.get(sessionId);
                 if (sessionMetadata != null) {
                     sessionsBuilder.addStreamSession(
                             StreamSession.newBuilder().setSessionId(sessionId).setSessionMetadata(
@@ -523,7 +523,7 @@
                 }
             }
         }
-        store.editContent()
+        mStore.editContent()
                 .add(STREAM_SESSION_CONTENT_ID,
                         StreamPayload.newBuilder().setStreamSessions(sessionsBuilder).build())
                 .commit();
@@ -537,18 +537,18 @@
      */
     @VisibleForTesting
     void cleanupSessionJournals() {
-        threadUtils.checkNotMainThread();
+        mThreadUtils.checkNotMainThread();
         Logger.i(TAG, "Task: cleanupSessionJournals");
-        ElapsedTimeTracker timeTracker = timingUtils.getElapsedTimeTracker(TAG);
-        int sessionCleared = expiredSessionsCleared;
+        ElapsedTimeTracker timeTracker = mTimingUtils.getElapsedTimeTracker(TAG);
+        int sessionCleared = mExpiredSessionsCleared;
 
-        Result<List<String>> storedSessionsResult = store.getAllSessions();
+        Result<List<String>> storedSessionsResult = mStore.getAllSessions();
         if (storedSessionsResult.isSuccessful()) {
-            synchronized (lock) {
+            synchronized (mLock) {
                 for (String sessionId : storedSessionsResult.getValue()) {
-                    if (!sessionsMetadata.containsKey(sessionId)) {
-                        store.removeSession(sessionId);
-                        expiredSessionsCleared++;
+                    if (!mSessionsMetadata.containsKey(sessionId)) {
+                        mStore.removeSession(sessionId);
+                        mExpiredSessionsCleared++;
                     }
                 }
             }
@@ -558,14 +558,14 @@
             Logger.e(TAG, "Error reading all sessions, Unable to cleanup session journals");
         }
         timeTracker.stop("task", "cleanupSessionJournals", "sessionsCleared",
-                expiredSessionsCleared - sessionCleared);
+                mExpiredSessionsCleared - sessionCleared);
     }
 
     @VisibleForTesting
     boolean isSessionAlive(String sessionId, SessionMetadata metadata) {
         // Today HEAD will does not time out
-        return head.getSessionId().equals(sessionId)
-                || (metadata.getCreationTimeMillis() + lifetimeMs) > clock.currentTimeMillis();
+        return mHead.getSessionId().equals(sessionId)
+                || (metadata.getCreationTimeMillis() + mLifetimeMs) > mClock.currentTimeMillis();
     }
 
     private SessionMetadata getOrCreateSessionMetadata(StreamSession streamSession) {
@@ -575,7 +575,7 @@
 
         // TODO: Log to BasicLoggingApi that SessionMetadata is missing.
         SessionMetadata.Builder metadataBuilder = SessionMetadata.newBuilder();
-        if (streamSession.getSessionId().equals(head.getSessionId())) {
+        if (streamSession.getSessionId().equals(mHead.getSessionId())) {
             metadataBuilder.setLastAddedTimeMillis(streamSession.getLegacyTimeMillis());
         } else {
             metadataBuilder.setCreationTimeMillis(streamSession.getLegacyTimeMillis());
@@ -585,7 +585,7 @@
 
     private int getHeadSchemaVersion(List<StreamSession> sessionList) {
         for (StreamSession streamSession : sessionList) {
-            if (streamSession.getSessionId().equals(head.getSessionId())) {
+            if (streamSession.getSessionId().equals(mHead.getSessionId())) {
                 return streamSession.getSessionMetadata().getSchemaVersion();
             }
         }
@@ -596,16 +596,16 @@
     @Override
     public void dump(Dumper dumper) {
         dumper.title(TAG);
-        synchronized (lock) {
-            dumper.forKey("attached sessions").value(attachedSessions.size());
+        synchronized (mLock) {
+            dumper.forKey("attached sessions").value(mAttachedSessions.size());
         }
-        dumper.forKey("expiredSessionsCleared").value(expiredSessionsCleared).compactPrevious();
-        dumper.forKey("unboundSessionCount").value(unboundSessionCount).compactPrevious();
-        dumper.forKey("detachedSessionCount").value(detachedSessionCount).compactPrevious();
-        dumper.forKey("get").value(getCount);
-        dumper.forKey("getAttached").value(getAttachedCount).compactPrevious();
-        dumper.forKey("getAll").value(getAllCount).compactPrevious();
-        dumper.forKey("put").value(putCount).compactPrevious();
-        dumper.forKey("remove").value(removeCount).compactPrevious();
+        dumper.forKey("expiredSessionsCleared").value(mExpiredSessionsCleared).compactPrevious();
+        dumper.forKey("unboundSessionCount").value(mUnboundSessionCount).compactPrevious();
+        dumper.forKey("detachedSessionCount").value(mDetachedSessionCount).compactPrevious();
+        dumper.forKey("get").value(mGetCount);
+        dumper.forKey("getAttached").value(mGetAttachedCount).compactPrevious();
+        dumper.forKey("getAll").value(mGetAllCount).compactPrevious();
+        dumper.forKey("put").value(mPutCount).compactPrevious();
+        dumper.forKey("remove").value(mRemoveCount).compactPrevious();
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedsessionmanager/internal/SessionContentTracker.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedsessionmanager/internal/SessionContentTracker.java
index e464a679..8c43ec2 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedsessionmanager/internal/SessionContentTracker.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedsessionmanager/internal/SessionContentTracker.java
@@ -17,27 +17,27 @@
 public class SessionContentTracker implements Dumpable {
     private static final String TAG = "SessionContentTracker";
 
-    private final boolean supportsClearAll;
-    private final Set<String> contentIds = new HashSet<>();
+    private final boolean mSupportsClearAll;
+    private final Set<String> mContentIds = new HashSet<>();
 
     SessionContentTracker(boolean supportsClearAll) {
-        this.supportsClearAll = supportsClearAll;
+        this.mSupportsClearAll = supportsClearAll;
     }
 
     public boolean isEmpty() {
-        return contentIds.isEmpty();
+        return mContentIds.isEmpty();
     }
 
     public void clear() {
-        contentIds.clear();
+        mContentIds.clear();
     }
 
     public boolean contains(String contentId) {
-        return contentIds.contains(contentId);
+        return mContentIds.contains(contentId);
     }
 
     public Set<String> getContentIds() {
-        return new HashSet<>(contentIds);
+        return new HashSet<>(mContentIds);
     }
 
     public void update(StreamStructure streamStructure) {
@@ -45,14 +45,14 @@
         switch (streamStructure.getOperation()) {
             case UPDATE_OR_APPEND: // Fall-through
             case REQUIRED_CONTENT:
-                contentIds.add(contentId);
+                mContentIds.add(contentId);
                 break;
             case REMOVE:
-                contentIds.remove(contentId);
+                mContentIds.remove(contentId);
                 break;
             case CLEAR_ALL:
-                if (supportsClearAll) {
-                    contentIds.clear();
+                if (mSupportsClearAll) {
+                    mContentIds.clear();
                 } else {
                     Logger.i(TAG, "CLEAR_ALL not supported.");
                 }
@@ -71,6 +71,6 @@
     @Override
     public void dump(Dumper dumper) {
         dumper.title(TAG);
-        dumper.forKey("contentIds").value(contentIds.size());
+        dumper.forKey("contentIds").value(mContentIds.size());
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedsessionmanager/internal/SessionFactory.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedsessionmanager/internal/SessionFactory.java
index 9dd92e5..0f22071 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedsessionmanager/internal/SessionFactory.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedsessionmanager/internal/SessionFactory.java
@@ -16,34 +16,34 @@
  * com.google.android.libraries.feed.api.internal.sessionmanager.FeedSessionManager}.
  */
 public final class SessionFactory {
-    private final Store store;
-    private final TaskQueue taskQueue;
-    private final TimingUtils timingUtils;
-    private final ThreadUtils threadUtils;
-    private final boolean useTimeScheduler;
-    private final boolean limitPagingUpdates;
-    private final boolean limitPagingUpdatesInHead;
+    private final Store mStore;
+    private final TaskQueue mTaskQueue;
+    private final TimingUtils mTimingUtils;
+    private final ThreadUtils mThreadUtils;
+    private final boolean mUseTimeScheduler;
+    private final boolean mLimitPagingUpdates;
+    private final boolean mLimitPagingUpdatesInHead;
 
     public SessionFactory(Store store, TaskQueue taskQueue, TimingUtils timingUtils,
             ThreadUtils threadUtils, Configuration config) {
-        this.store = store;
-        this.taskQueue = taskQueue;
-        this.timingUtils = timingUtils;
-        this.threadUtils = threadUtils;
-        useTimeScheduler = config.getValueOrDefault(ConfigKey.USE_TIMEOUT_SCHEDULER, false);
-        limitPagingUpdates = config.getValueOrDefault(ConfigKey.LIMIT_PAGE_UPDATES, true);
-        limitPagingUpdatesInHead =
+        this.mStore = store;
+        this.mTaskQueue = taskQueue;
+        this.mTimingUtils = timingUtils;
+        this.mThreadUtils = threadUtils;
+        mUseTimeScheduler = config.getValueOrDefault(ConfigKey.USE_TIMEOUT_SCHEDULER, false);
+        mLimitPagingUpdates = config.getValueOrDefault(ConfigKey.LIMIT_PAGE_UPDATES, true);
+        mLimitPagingUpdatesInHead =
                 config.getValueOrDefault(ConfigKey.LIMIT_PAGE_UPDATES_IN_HEAD, false);
     }
 
     public InitializableSession getSession() {
-        return useTimeScheduler
-                ? new TimeoutSessionImpl(
-                        store, limitPagingUpdates, taskQueue, timingUtils, threadUtils)
-                : new SessionImpl(store, limitPagingUpdates, taskQueue, timingUtils, threadUtils);
+        return mUseTimeScheduler ? new TimeoutSessionImpl(
+                       mStore, mLimitPagingUpdates, mTaskQueue, mTimingUtils, mThreadUtils)
+                                 : new SessionImpl(mStore, mLimitPagingUpdates, mTaskQueue,
+                                         mTimingUtils, mThreadUtils);
     }
 
     public HeadSessionImpl getHeadSession() {
-        return new HeadSessionImpl(store, timingUtils, limitPagingUpdatesInHead);
+        return new HeadSessionImpl(mStore, mTimingUtils, mLimitPagingUpdatesInHead);
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedsessionmanager/internal/SessionImpl.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedsessionmanager/internal/SessionImpl.java
index 4e93c9a7..3b97f9a 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedsessionmanager/internal/SessionImpl.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedsessionmanager/internal/SessionImpl.java
@@ -32,65 +32,65 @@
 public class SessionImpl implements InitializableSession, Dumpable {
     private static final String TAG = "SessionImpl";
 
-    protected final Store store;
-    protected final TaskQueue taskQueue;
-    protected final ThreadUtils threadUtils;
-    protected final TimingUtils timingUtils;
-    private final boolean limitPagingUpdates;
-    private final SessionContentTracker sessionContentTracker =
+    protected final Store mStore;
+    protected final TaskQueue mTaskQueue;
+    protected final ThreadUtils mThreadUtils;
+    protected final TimingUtils mTimingUtils;
+    private final boolean mLimitPagingUpdates;
+    private final SessionContentTracker mSessionContentTracker =
             new SessionContentTracker(/* supportsClearAll= */ false);
 
     // Allow creation of the session without a model provider, this becomes an unbound session
-    /*@Nullable*/ protected ModelProvider modelProvider;
-    /*@Nullable*/ protected ViewDepthProvider viewDepthProvider;
-    protected boolean legacyHeadContent;
+    /*@Nullable*/ protected ModelProvider mModelProvider;
+    /*@Nullable*/ protected ViewDepthProvider mViewDepthProvider;
+    protected boolean mLegacyHeadContent;
 
-    protected String sessionId;
+    protected String mSessionId;
 
     // operation counts for the dumper
-    int updateCount;
+    int mUpdateCount;
 
     SessionImpl(Store store, boolean limitPagingUpdates, TaskQueue taskQueue,
             TimingUtils timingUtils, ThreadUtils threadUtils) {
-        this.store = store;
-        this.taskQueue = taskQueue;
-        this.timingUtils = timingUtils;
-        this.threadUtils = threadUtils;
-        this.limitPagingUpdates = limitPagingUpdates;
+        this.mStore = store;
+        this.mTaskQueue = taskQueue;
+        this.mTimingUtils = timingUtils;
+        this.mThreadUtils = threadUtils;
+        this.mLimitPagingUpdates = limitPagingUpdates;
     }
 
     @Override
     public void bindModelProvider(
             /*@Nullable*/ ModelProvider modelProvider,
             /*@Nullable*/ ViewDepthProvider viewDepthProvider) {
-        this.modelProvider = modelProvider;
-        this.viewDepthProvider = viewDepthProvider;
+        this.mModelProvider = modelProvider;
+        this.mViewDepthProvider = viewDepthProvider;
     }
 
     @Override
     public void setSessionId(String sessionId) {
-        this.sessionId = sessionId;
+        this.mSessionId = sessionId;
     }
 
     @Override
     /*@Nullable*/
     public ModelProvider getModelProvider() {
-        return modelProvider;
+        return mModelProvider;
     }
 
     @Override
     public void populateModelProvider(List<StreamStructure> head, boolean cachedBindings,
             boolean legacyHeadContent, UiContext uiContext) {
         Logger.i(TAG, "PopulateModelProvider %s items", head.size());
-        this.legacyHeadContent = legacyHeadContent;
-        threadUtils.checkNotMainThread();
-        ElapsedTimeTracker timeTracker = timingUtils.getElapsedTimeTracker(TAG);
+        this.mLegacyHeadContent = legacyHeadContent;
+        mThreadUtils.checkNotMainThread();
+        ElapsedTimeTracker timeTracker = mTimingUtils.getElapsedTimeTracker(TAG);
 
-        if (modelProvider != null) {
+        if (mModelProvider != null) {
             ModelMutation modelMutation =
-                    modelProvider.edit()
+                    mModelProvider.edit()
                             .hasCachedBindings(cachedBindings)
-                            .setSessionId(sessionId)
+                            .setSessionId(mSessionId)
                             .setMutationContext(
                                     new MutationContext.Builder().setUiContext(uiContext).build());
 
@@ -99,7 +99,7 @@
                 String contentId = streamStructure.getContentId();
                 switch (streamStructure.getOperation()) {
                     case UPDATE_OR_APPEND:
-                        if (!sessionContentTracker.contains(contentId)) {
+                        if (!mSessionContentTracker.contains(contentId)) {
                             modelMutation.addChild(streamStructure);
                         }
                         break;
@@ -113,25 +113,25 @@
                         Logger.e(TAG, "unsupported StreamDataOperation: %s",
                                 streamStructure.getOperation());
                 }
-                sessionContentTracker.update(streamStructure);
+                mSessionContentTracker.update(streamStructure);
             }
             modelMutation.commit();
         } else {
-            sessionContentTracker.update(head);
+            mSessionContentTracker.update(head);
         }
 
-        timeTracker.stop("populateSession", sessionId, "operations", head.size());
+        timeTracker.stop("populateSession", mSessionId, "operations", head.size());
     }
 
     @Override
     public void updateSession(boolean clearHead, List<StreamStructure> streamStructures,
             int schemaVersion,
             /*@Nullable*/ MutationContext mutationContext) {
-        String localSessionId = Validators.checkNotNull(sessionId);
+        String localSessionId = Validators.checkNotNull(mSessionId);
         if (clearHead) {
             if (shouldInvalidateModelProvider(mutationContext, localSessionId)) {
-                if (modelProvider != null) {
-                    modelProvider.invalidate();
+                if (mModelProvider != null) {
+                    mModelProvider.invalidate();
                     Logger.i(TAG, "Invalidating Model Provider for session %s due to a clear head",
                             localSessionId);
                 }
@@ -140,13 +140,13 @@
             }
             return;
         }
-        updateCount++;
+        mUpdateCount++;
         updateSessionInternal(streamStructures, mutationContext);
     }
 
     protected boolean shouldInvalidateModelProvider(
             /*@Nullable*/ MutationContext mutationContext, String sessionId) {
-        if (modelProvider != null && mutationContext != null
+        if (mModelProvider != null && mutationContext != null
                 && mutationContext.getContinuationToken() != null) {
             return sessionId.equals(mutationContext.getRequestingSessionId());
         }
@@ -160,32 +160,32 @@
 
     void updateSessionInternal(
             List<StreamStructure> streamStructures, /*@Nullable*/ MutationContext mutationContext) {
-        ElapsedTimeTracker timeTracker = timingUtils.getElapsedTimeTracker(TAG);
+        ElapsedTimeTracker timeTracker = mTimingUtils.getElapsedTimeTracker(TAG);
         StreamToken mutationSourceToken =
                 mutationContext != null ? mutationContext.getContinuationToken() : null;
         if (mutationSourceToken != null) {
             String contentId = mutationSourceToken.getContentId();
-            if (!sessionContentTracker.contains(contentId)) {
+            if (!mSessionContentTracker.contains(contentId)) {
                 // Make sure that mutationSourceToken is a token in this session, if not, we don't
                 // update the session.
-                timeTracker.stop("updateSessionIgnored", sessionId, "Token Not Found", contentId);
+                timeTracker.stop("updateSessionIgnored", mSessionId, "Token Not Found", contentId);
                 Logger.i(TAG, "Token %s not found in session, ignoring update", contentId);
                 return;
-            } else if (limitPagingUpdates) {
+            } else if (mLimitPagingUpdates) {
                 String mutationSessionId =
                         Validators.checkNotNull(mutationContext).getRequestingSessionId();
                 if (mutationSessionId == null) {
                     Logger.i(TAG, "Request Session was not set, ignoring update");
                     return;
                 }
-                if (!sessionId.equals(mutationSessionId)) {
+                if (!mSessionId.equals(mutationSessionId)) {
                     Logger.i(TAG, "Limiting Updates, paging request made on another session");
                     return;
                 }
             }
         }
 
-        ModelMutation modelMutation = (modelProvider != null) ? modelProvider.edit() : null;
+        ModelMutation modelMutation = (mModelProvider != null) ? mModelProvider.edit() : null;
         if (modelMutation != null && mutationContext != null) {
             modelMutation.setMutationContext(mutationContext);
             if (mutationContext.getContinuationToken() != null) {
@@ -196,12 +196,12 @@
         int updateCnt = 0;
         int addFeatureCnt = 0;
         int requiredContentCnt = 0;
-        SessionMutation sessionMutation = store.editSession(sessionId);
+        SessionMutation sessionMutation = mStore.editSession(mSessionId);
         for (StreamStructure streamStructure : streamStructures) {
             String contentId = streamStructure.getContentId();
             switch (streamStructure.getOperation()) {
                 case UPDATE_OR_APPEND:
-                    if (sessionContentTracker.contains(contentId)) {
+                    if (mSessionContentTracker.contains(contentId)) {
                         // TODO: This could leave an empty feature if contentKey already exists in
                         // the session with a different parent.
                         if (modelMutation != null) {
@@ -227,7 +227,7 @@
                     Logger.i(TAG, "CLEAR_ALL not support on this session type");
                     break;
                 case REQUIRED_CONTENT:
-                    if (!sessionContentTracker.contains(contentId)) {
+                    if (!mSessionContentTracker.contains(contentId)) {
                         sessionMutation.add(streamStructure);
                         requiredContentCnt++;
                     }
@@ -236,42 +236,42 @@
                     Logger.e(
                             TAG, "Unknown operation, ignoring: %s", streamStructure.getOperation());
             }
-            sessionContentTracker.update(streamStructure);
+            mSessionContentTracker.update(streamStructure);
         }
 
         // Commit the Model Provider mutation after the store is updated.
         int taskType = mutationContext != null && mutationContext.isUserInitiated()
                 ? TaskType.IMMEDIATE
                 : TaskType.USER_FACING;
-        taskQueue.execute(Task.SESSION_MUTATION, taskType, sessionMutation::commit);
+        mTaskQueue.execute(Task.SESSION_MUTATION, taskType, sessionMutation::commit);
         if (modelMutation != null) {
             modelMutation.commit();
         }
-        timeTracker.stop("updateSession", sessionId, "features", addFeatureCnt, "updates",
+        timeTracker.stop("updateSession", mSessionId, "features", addFeatureCnt, "updates",
                 updateCnt, "requiredContent", requiredContentCnt);
     }
 
     @Override
     public String getSessionId() {
-        return Validators.checkNotNull(sessionId);
+        return Validators.checkNotNull(mSessionId);
     }
 
     @Override
     public Set<String> getContentInSession() {
-        return sessionContentTracker.getContentIds();
+        return mSessionContentTracker.getContentIds();
     }
 
     @Override
     public void dump(Dumper dumper) {
         dumper.title(TAG);
-        dumper.forKey("sessionName").value(sessionId);
+        dumper.forKey("sessionName").value(mSessionId);
         dumper.forKey("")
-                .value((modelProvider == null) ? "sessionIsUnbound" : "sessionIsBound")
+                .value((mModelProvider == null) ? "sessionIsUnbound" : "sessionIsBound")
                 .compactPrevious();
-        dumper.forKey("updateCount").value(updateCount).compactPrevious();
-        dumper.dump(sessionContentTracker);
-        if (modelProvider instanceof Dumpable) {
-            dumper.dump((Dumpable) modelProvider);
+        dumper.forKey("updateCount").value(mUpdateCount).compactPrevious();
+        dumper.dump(mSessionContentTracker);
+        if (mModelProvider instanceof Dumpable) {
+            dumper.dump((Dumpable) mModelProvider);
         }
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedsessionmanager/internal/SessionManagerMutation.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedsessionmanager/internal/SessionManagerMutation.java
index 54d7b5c..f259149 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedsessionmanager/internal/SessionManagerMutation.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedsessionmanager/internal/SessionManagerMutation.java
@@ -55,23 +55,23 @@
 public final class SessionManagerMutation implements Dumpable {
     private static final String TAG = "SessionManagerMutation";
 
-    private final Store store;
-    private final SessionCache sessionCache;
-    private final ContentCache contentCache;
-    private final TaskQueue taskQueue;
-    private final SchedulerApi schedulerApi;
-    private final ThreadUtils threadUtils;
-    private final TimingUtils timingUtils;
-    private final Clock clock;
-    private final MainThreadRunner mainThreadRunner;
-    private final BasicLoggingApi basicLoggingApi;
+    private final Store mStore;
+    private final SessionCache mSessionCache;
+    private final ContentCache mContentCache;
+    private final TaskQueue mTaskQueue;
+    private final SchedulerApi mSchedulerApi;
+    private final ThreadUtils mThreadUtils;
+    private final TimingUtils mTimingUtils;
+    private final Clock mClock;
+    private final MainThreadRunner mMainThreadRunner;
+    private final BasicLoggingApi mBasicLoggingApi;
 
     // operation counts for the dumper
-    private int createCount;
-    private int commitCount;
-    private int errorCount;
-    private int contentCommitErrorCount;
-    private int semanticPropertiesCommitErrorCount;
+    private int mCreateCount;
+    private int mCommitCount;
+    private int mErrorCount;
+    private int mContentCommitErrorCount;
+    private int mSemanticPropertiesCommitErrorCount;
 
     /** Listens for errors which need to be reported to a ModelProvider. */
     public interface ModelErrorObserver {
@@ -82,16 +82,16 @@
             TaskQueue taskQueue, SchedulerApi schedulerApi, ThreadUtils threadUtils,
             TimingUtils timingUtils, Clock clock, MainThreadRunner mainThreadRunner,
             BasicLoggingApi basicLoggingApi) {
-        this.store = store;
-        this.sessionCache = sessionCache;
-        this.contentCache = contentCache;
-        this.taskQueue = taskQueue;
-        this.schedulerApi = schedulerApi;
-        this.threadUtils = threadUtils;
-        this.timingUtils = timingUtils;
-        this.clock = clock;
-        this.mainThreadRunner = mainThreadRunner;
-        this.basicLoggingApi = basicLoggingApi;
+        this.mStore = store;
+        this.mSessionCache = sessionCache;
+        this.mContentCache = contentCache;
+        this.mTaskQueue = taskQueue;
+        this.mSchedulerApi = schedulerApi;
+        this.mThreadUtils = threadUtils;
+        this.mTimingUtils = timingUtils;
+        this.mClock = clock;
+        this.mMainThreadRunner = mainThreadRunner;
+        this.mBasicLoggingApi = basicLoggingApi;
     }
 
     /**
@@ -101,14 +101,14 @@
     public Consumer<Result<Model>> createCommitter(String task, MutationContext mutationContext,
             ModelErrorObserver modelErrorObserver,
             KnownContent./*@Nullable*/ Listener knownContentListener) {
-        createCount++;
+        mCreateCount++;
         return new MutationCommitter(task, mutationContext, modelErrorObserver,
-                knownContentListener, mainThreadRunner, basicLoggingApi);
+                knownContentListener, mMainThreadRunner, mBasicLoggingApi);
     }
 
     public void resetHead() {
         HeadMutationCommitter mutation = new HeadMutationCommitter();
-        taskQueue.execute(
+        mTaskQueue.execute(
                 Task.INVALIDATE_HEAD, TaskType.HEAD_INVALIDATE, () -> mutation.resetHead(null));
     }
 
@@ -120,12 +120,12 @@
     @Override
     public void dump(Dumper dumper) {
         dumper.title(TAG);
-        dumper.forKey("mutationsCreated").value(createCount);
-        dumper.forKey("commitCount").value(commitCount).compactPrevious();
-        dumper.forKey("errorCount").value(errorCount).compactPrevious();
-        dumper.forKey("contentCommitErrorCount").value(contentCommitErrorCount).compactPrevious();
+        dumper.forKey("mutationsCreated").value(mCreateCount);
+        dumper.forKey("commitCount").value(mCommitCount).compactPrevious();
+        dumper.forKey("errorCount").value(mErrorCount).compactPrevious();
+        dumper.forKey("contentCommitErrorCount").value(mContentCommitErrorCount).compactPrevious();
         dumper.forKey("semanticPropertiesCommitErrorCount")
-                .value(semanticPropertiesCommitErrorCount)
+                .value(mSemanticPropertiesCommitErrorCount)
                 .compactPrevious();
     }
 
@@ -149,13 +149,13 @@
          */
         @VisibleForTesting
         void resetHead(/*@Nullable*/ String mutationSessionId) {
-            threadUtils.checkNotMainThread();
-            ElapsedTimeTracker timeTracker = timingUtils.getElapsedTimeTracker(TAG);
-            Collection<Session> attachedSessions = sessionCache.getAttachedSessions();
+            mThreadUtils.checkNotMainThread();
+            ElapsedTimeTracker timeTracker = mTimingUtils.getElapsedTimeTracker(TAG);
+            Collection<Session> attachedSessions = mSessionCache.getAttachedSessions();
 
             // If we have old sessions and we received a clear head, let's invalidate the session
             // that initiated the clear.
-            store.clearHead();
+            mStore.clearHead();
             for (Session session : attachedSessions) {
                 ModelProvider modelProvider = session.getModelProvider();
                 if (modelProvider != null && session.invalidateOnResetHead()
@@ -195,7 +195,7 @@
         }
 
         private void invalidateSession(ModelProvider modelProvider, Session session) {
-            threadUtils.checkNotMainThread();
+            mThreadUtils.checkNotMainThread();
             Logger.i(TAG, "Invalidate session %s", session.getSessionId());
             modelProvider.invalidate();
         }
@@ -203,46 +203,46 @@
 
     @VisibleForTesting
     class MutationCommitter extends HeadMutationCommitter implements Consumer<Result<Model>> {
-        private final String task;
-        private final MutationContext mutationContext;
-        private final ModelErrorObserver modelErrorObserver;
-        private final KnownContent./*@Nullable*/ Listener knownContentListener;
+        private final String mTask;
+        private final MutationContext mMutationContext;
+        private final ModelErrorObserver mModelErrorObserver;
+        private final KnownContent./*@Nullable*/ Listener mKnownContentListener;
 
-        private final List<StreamStructure> streamStructures = new ArrayList<>();
-        private final MainThreadRunner mainThreadRunner;
-        private final BasicLoggingApi basicLoggingApi;
+        private final List<StreamStructure> mStreamStructures = new ArrayList<>();
+        private final MainThreadRunner mMainThreadRunner;
+        private final BasicLoggingApi mBasicLoggingApi;
 
         @VisibleForTesting
-        boolean clearedHead = false;
-        private Model model;
+        boolean mClearedHead = false;
+        private Model mModel;
 
         private MutationCommitter(String task, MutationContext mutationContext,
                 ModelErrorObserver modelErrorObserver,
                 KnownContent./*@Nullable*/ Listener knownContentListener,
                 MainThreadRunner mainThreadRunner, BasicLoggingApi basicLoggingApi) {
-            this.task = task;
-            this.mutationContext = mutationContext;
-            this.modelErrorObserver = modelErrorObserver;
-            this.knownContentListener = knownContentListener;
-            this.mainThreadRunner = mainThreadRunner;
-            this.basicLoggingApi = basicLoggingApi;
+            this.mTask = task;
+            this.mMutationContext = mutationContext;
+            this.mModelErrorObserver = modelErrorObserver;
+            this.mKnownContentListener = knownContentListener;
+            this.mMainThreadRunner = mainThreadRunner;
+            this.mBasicLoggingApi = basicLoggingApi;
         }
 
         @Override
         public void accept(Result<Model> updateResults) {
             if (!updateResults.isSuccessful()) {
-                errorCount++;
+                mErrorCount++;
                 Session session = null;
-                String sessionId = mutationContext.getRequestingSessionId();
+                String sessionId = mMutationContext.getRequestingSessionId();
                 if (sessionId != null) {
-                    session = sessionCache.getAttached(sessionId);
+                    session = mSessionCache.getAttached(sessionId);
                 }
-                if (mutationContext.getContinuationToken() != null) {
-                    StreamToken streamToken = mutationContext.getContinuationToken();
+                if (mMutationContext.getContinuationToken() != null) {
+                    StreamToken streamToken = mMutationContext.getContinuationToken();
                     if (session != null && streamToken != null) {
                         Logger.e(TAG, "Error found with a token request %s",
                                 streamToken.getContentId());
-                        modelErrorObserver.onError(session,
+                        mModelErrorObserver.onError(session,
                                 new ModelError(ErrorType.PAGINATION_ERROR,
                                         streamToken.getNextPageToken()));
                     } else {
@@ -250,57 +250,57 @@
                     }
                 } else {
                     Logger.e(TAG, "Update error, the update is being ignored");
-                    modelErrorObserver.onError(
+                    mModelErrorObserver.onError(
                             session, new ModelError(ErrorType.NO_CARDS_ERROR, null));
-                    taskQueue.execute(Task.REQUEST_FAILURE, TaskType.HEAD_RESET, () -> {});
+                    mTaskQueue.execute(Task.REQUEST_FAILURE, TaskType.HEAD_RESET, () -> {});
                 }
                 return;
             }
-            model = updateResults.getValue();
-            for (StreamDataOperation operation : model.streamDataOperations) {
+            mModel = updateResults.getValue();
+            for (StreamDataOperation operation : mModel.streamDataOperations) {
                 if (operation.getStreamStructure().getOperation() == Operation.CLEAR_ALL) {
-                    clearedHead = true;
+                    mClearedHead = true;
                     break;
                 }
             }
             int taskType;
-            if (mutationContext != null && mutationContext.isUserInitiated()) {
+            if (mMutationContext != null && mMutationContext.isUserInitiated()) {
                 taskType = TaskType.IMMEDIATE;
             } else {
-                taskType = clearedHead ? TaskType.HEAD_RESET : TaskType.USER_FACING;
+                taskType = mClearedHead ? TaskType.HEAD_RESET : TaskType.USER_FACING;
             }
-            taskQueue.execute(Task.COMMIT_TASK, taskType, this::commitTask);
+            mTaskQueue.execute(Task.COMMIT_TASK, taskType, this::commitTask);
         }
 
         private void commitTask() {
-            ElapsedTimeTracker timeTracker = timingUtils.getElapsedTimeTracker(TAG);
+            ElapsedTimeTracker timeTracker = mTimingUtils.getElapsedTimeTracker(TAG);
             commitContent();
             commitSessionUpdates();
-            commitCount++;
-            timeTracker.stop("task", "sessionMutation.commitTask:" + task, "mutations",
-                    streamStructures.size(), "userInitiated",
-                    mutationContext != null ? mutationContext.isUserInitiated()
-                                            : "No MutationContext");
+            mCommitCount++;
+            timeTracker.stop("task", "sessionMutation.commitTask:" + mTask, "mutations",
+                    mStreamStructures.size(), "userInitiated",
+                    mMutationContext != null ? mMutationContext.isUserInitiated()
+                                             : "No MutationContext");
         }
 
         private void commitContent() {
-            threadUtils.checkNotMainThread();
-            ElapsedTimeTracker timeTracker = timingUtils.getElapsedTimeTracker(TAG);
+            mThreadUtils.checkNotMainThread();
+            ElapsedTimeTracker timeTracker = mTimingUtils.getElapsedTimeTracker(TAG);
 
-            contentCache.startMutation();
-            ContentMutation contentMutation = store.editContent();
-            SemanticPropertiesMutation semanticPropertiesMutation = store.editSemanticProperties();
-            for (StreamDataOperation dataOperation : model.streamDataOperations) {
+            mContentCache.startMutation();
+            ContentMutation contentMutation = mStore.editContent();
+            SemanticPropertiesMutation semanticPropertiesMutation = mStore.editSemanticProperties();
+            for (StreamDataOperation dataOperation : mModel.streamDataOperations) {
                 Operation operation = dataOperation.getStreamStructure().getOperation();
                 if (operation == Operation.CLEAR_ALL) {
-                    streamStructures.add(dataOperation.getStreamStructure());
-                    resetHead(mutationContext.getRequestingSessionId());
+                    mStreamStructures.add(dataOperation.getStreamStructure());
+                    resetHead(mMutationContext.getRequestingSessionId());
                     continue;
                 }
 
                 if (operation == Operation.UPDATE_OR_APPEND) {
                     if (!validDataOperation(dataOperation)) {
-                        errorCount++;
+                        mErrorCount++;
                         continue;
                     }
                     String contentId = dataOperation.getStreamStructure().getContentId();
@@ -309,9 +309,9 @@
                         // don't add StreamSharedState to the metadata list stored for sessions
                         contentMutation.add(contentId, payload);
                     } else if (payload.hasStreamFeature() || payload.hasStreamToken()) {
-                        contentCache.put(contentId, payload);
+                        mContentCache.put(contentId, payload);
                         contentMutation.add(contentId, payload);
-                        streamStructures.add(dataOperation.getStreamStructure());
+                        mStreamStructures.add(dataOperation.getStreamStructure());
                     } else if (dataOperation.getStreamPayload().hasSemanticData()) {
                         semanticPropertiesMutation.add(
                                 contentId, dataOperation.getStreamPayload().getSemanticData());
@@ -324,84 +324,84 @@
                 if (operation == Operation.REMOVE) {
                     // We don't update the content for REMOVED items, content will be garbage
                     // collected.
-                    streamStructures.add(dataOperation.getStreamStructure());
+                    mStreamStructures.add(dataOperation.getStreamStructure());
                     continue;
                 }
 
                 if (operation == Operation.REQUIRED_CONTENT) {
-                    streamStructures.add(dataOperation.getStreamStructure());
+                    mStreamStructures.add(dataOperation.getStreamStructure());
                     continue;
                 }
 
-                errorCount++;
+                mErrorCount++;
                 Logger.e(TAG, "Unsupported Mutation: %s",
                         dataOperation.getStreamStructure().getOperation());
             }
-            taskQueue.execute(Task.PERSIST_MUTATION, TaskType.BACKGROUND, () -> {
+            mTaskQueue.execute(Task.PERSIST_MUTATION, TaskType.BACKGROUND, () -> {
                 if (contentMutation.commit().getResult() == CommitResult.Result.FAILURE) {
-                    contentCommitErrorCount++;
+                    mContentCommitErrorCount++;
                     Logger.e(TAG, "contentMutation failed");
-                    mainThreadRunner.execute("CONTENT_MUTATION_FAILED", () -> {
-                        basicLoggingApi.onInternalError(InternalFeedError.CONTENT_MUTATION_FAILED);
+                    mMainThreadRunner.execute("CONTENT_MUTATION_FAILED", () -> {
+                        mBasicLoggingApi.onInternalError(InternalFeedError.CONTENT_MUTATION_FAILED);
                     });
                 }
                 if (semanticPropertiesMutation.commit().getResult()
                         == CommitResult.Result.FAILURE) {
-                    semanticPropertiesCommitErrorCount++;
+                    mSemanticPropertiesCommitErrorCount++;
                     Logger.e(TAG, "semanticPropertiesMutation failed");
                 }
-                contentCache.finishMutation();
+                mContentCache.finishMutation();
             });
-            timeTracker.stop("", "contentUpdate", "items", model.streamDataOperations.size());
+            timeTracker.stop("", "contentUpdate", "items", mModel.streamDataOperations.size());
         }
 
         private void commitSessionUpdates() {
-            threadUtils.checkNotMainThread();
-            ElapsedTimeTracker timeTracker = timingUtils.getElapsedTimeTracker(TAG);
+            mThreadUtils.checkNotMainThread();
+            ElapsedTimeTracker timeTracker = mTimingUtils.getElapsedTimeTracker(TAG);
 
             StreamDataProto.StreamToken mutationSourceToken =
-                    (mutationContext != null) ? mutationContext.getContinuationToken() : null;
+                    (mMutationContext != null) ? mMutationContext.getContinuationToken() : null;
             // For sessions we want to add the remove operation if the mutation source was a
             // continuation token.
             if (mutationSourceToken != null) {
                 StreamStructure removeOperation = addTokenRemoveOperation(mutationSourceToken);
                 if (removeOperation != null) {
-                    streamStructures.add(0, removeOperation);
+                    mStreamStructures.add(0, removeOperation);
                 }
             }
-            Collection<Session> updates = sessionCache.getAllSessions();
+            Collection<Session> updates = mSessionCache.getAllSessions();
 
-            HeadSessionImpl head = sessionCache.getHead();
+            HeadSessionImpl head = mSessionCache.getHead();
             for (Session session : updates) {
                 ModelProvider modelProvider = session.getModelProvider();
                 if (modelProvider != null && modelProvider.getCurrentState() == State.INVALIDATED) {
                     Logger.w(TAG, "Removing an invalidate session");
                     // Remove all invalidated sessions
-                    sessionCache.removeAttached(session.getSessionId());
+                    mSessionCache.removeAttached(session.getSessionId());
                     continue;
                 }
                 if (session == head) {
-                    long updateTime = clock.currentTimeMillis();
-                    if (clearedHead) {
-                        session.updateSession(clearedHead, streamStructures, model.schemaVersion,
-                                mutationContext);
-                        sessionCache.updateHeadMetadata(updateTime, model.schemaVersion);
-                        schedulerApi.onReceiveNewContent(updateTime);
-                        if (knownContentListener != null) {
-                            knownContentListener.onNewContentReceived(
+                    long updateTime = mClock.currentTimeMillis();
+                    if (mClearedHead) {
+                        session.updateSession(mClearedHead, mStreamStructures, mModel.schemaVersion,
+                                mMutationContext);
+                        mSessionCache.updateHeadMetadata(updateTime, mModel.schemaVersion);
+                        mSchedulerApi.onReceiveNewContent(updateTime);
+                        if (mKnownContentListener != null) {
+                            mKnownContentListener.onNewContentReceived(
                                     /* isNewRefresh */ true, updateTime);
                         }
                         Logger.i(TAG, "Cleared Head, new creation time %s",
                                 StringFormattingUtils.formatLogDate(updateTime));
                         continue;
-                    } else if (knownContentListener != null) {
-                        knownContentListener.onNewContentReceived(
+                    } else if (mKnownContentListener != null) {
+                        mKnownContentListener.onNewContentReceived(
                                 /* isNewRefresh */ false, updateTime);
                     }
                 }
                 Logger.i(TAG, "Update Session %s", session.getSessionId());
                 session.updateSession(
-                        clearedHead, streamStructures, model.schemaVersion, mutationContext);
+                        mClearedHead, mStreamStructures, mModel.schemaVersion, mMutationContext);
             }
             timeTracker.stop("", "sessionUpdate", "sessions", updates.size());
         }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedsessionmanager/internal/TimeoutSessionImpl.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedsessionmanager/internal/TimeoutSessionImpl.java
index 6d844ea..eb14740 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedsessionmanager/internal/TimeoutSessionImpl.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedsessionmanager/internal/TimeoutSessionImpl.java
@@ -45,17 +45,17 @@
     public void updateSession(boolean clearHead, List<StreamStructure> streamStructures,
             int schemaVersion,
             /*@Nullable*/ MutationContext mutationContext) {
-        String localSessionId = Validators.checkNotNull(sessionId);
+        String localSessionId = Validators.checkNotNull(mSessionId);
         Logger.i(TAG, "updateSession; clearHead(%b), shouldAppend(%b), sessionId(%s)", clearHead,
-                legacyHeadContent, localSessionId);
+                mLegacyHeadContent, localSessionId);
         if (clearHead) {
-            if (!legacyHeadContent) {
+            if (!mLegacyHeadContent) {
                 if (shouldInvalidateModelProvider(mutationContext, localSessionId)) {
-                    if (modelProvider != null) {
+                    if (mModelProvider != null) {
                         if (mutationContext == null) {
-                            modelProvider.invalidate(UiContext.getDefaultInstance());
+                            mModelProvider.invalidate(UiContext.getDefaultInstance());
                         } else {
-                            modelProvider.invalidate(mutationContext.getUiContext());
+                            mModelProvider.invalidate(mutationContext.getUiContext());
                         }
                         Logger.i(TAG,
                                 "Invalidating Model Provider for session %s due to a clear head",
@@ -68,14 +68,14 @@
                 return;
             }
 
-            if (viewDepthProvider != null) {
+            if (mViewDepthProvider != null) {
                 // Append the new items to the existing copy of HEAD, removing the existing items
                 // which have not yet been seen by the user.
                 List<ModelChild> rootChildren = captureRootContent();
                 if (!rootChildren.isEmpty()) {
                     // Calculate the children to remove and append StreamStructure remove operations
                     String lowestChild =
-                            Validators.checkNotNull(viewDepthProvider).getChildViewDepth();
+                            Validators.checkNotNull(mViewDepthProvider).getChildViewDepth();
                     List<StreamStructure> removeOperations = removeItems(lowestChild, rootChildren);
                     Logger.i(TAG, "Removing %d items", removeOperations.size());
                     if (!removeOperations.isEmpty()) {
@@ -85,10 +85,10 @@
                 }
             }
             // Only do this once
-            legacyHeadContent = false;
+            mLegacyHeadContent = false;
         }
 
-        updateCount++;
+        mUpdateCount++;
         updateSessionInternal(streamStructures, mutationContext);
     }
 
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedsessionmanager/internal/testing/AbstractSessionImplTest.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedsessionmanager/internal/testing/AbstractSessionImplTest.java
index e439e8a..7e5b9a9a 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedsessionmanager/internal/testing/AbstractSessionImplTest.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedsessionmanager/internal/testing/AbstractSessionImplTest.java
@@ -34,20 +34,20 @@
     protected static final String TEST_SESSION_ID = "TEST$1";
     protected static final int SCHEMA_VERSION = 1;
 
-    protected final ContentIdGenerators contentIdGenerators = new ContentIdGenerators();
+    protected final ContentIdGenerators mContentIdGenerators = new ContentIdGenerators();
 
     @Mock
-    protected Store store;
-    protected FakeSessionMutation fakeSessionMutation;
-    protected FakeModelProvider fakeModelProvider;
+    protected Store mStore;
+    protected FakeSessionMutation mFakeSessionMutation;
+    protected FakeModelProvider mFakeModelProvider;
 
-    private Boolean sessionMutationResults = true;
+    private Boolean mSessionMutationResults = true;
 
     protected void setUp() {
         initMocks(this);
-        fakeSessionMutation = new FakeSessionMutation();
-        fakeModelProvider = new FakeModelProvider();
-        when(store.editSession(TEST_SESSION_ID)).thenReturn(fakeSessionMutation);
+        mFakeSessionMutation = new FakeSessionMutation();
+        mFakeModelProvider = new FakeModelProvider();
+        when(mStore.editSession(TEST_SESSION_ID)).thenReturn(mFakeSessionMutation);
     }
 
     protected abstract SessionImpl getSessionImpl();
@@ -65,12 +65,12 @@
         session.setSessionId(TEST_SESSION_ID);
         session.populateModelProvider(
                 streamStructures, false, false, UiContext.getDefaultInstance());
-        FakeModelMutation fakeModelMutation = fakeModelProvider.getLatestModelMutation();
-        assertThat(fakeModelMutation.addedChildren).hasSize(featureCnt);
+        FakeModelMutation fakeModelMutation = mFakeModelProvider.getLatestModelMutation();
+        assertThat(fakeModelMutation.mAddedChildren).hasSize(featureCnt);
         assertThat(fakeModelMutation.isCommitted()).isTrue();
         assertThat(session.getContentInSession()).hasSize(featureCnt);
         assertThat(session.getContentInSession())
-                .contains(contentIdGenerators.createFeatureContentId(1));
+                .contains(mContentIdGenerators.createFeatureContentId(1));
     }
 
     @Test
@@ -95,12 +95,12 @@
         // 1 clear, 3 features
         assertThat(streamStructures).hasSize(4);
         session.updateSession(false, streamStructures, SCHEMA_VERSION, null);
-        assertThat(fakeSessionMutation.streamStructures).hasSize(featureCnt);
-        FakeModelMutation fakeModelMutation = fakeModelProvider.getLatestModelMutation();
-        assertThat(fakeModelMutation.addedChildren).hasSize(featureCnt);
+        assertThat(mFakeSessionMutation.streamStructures).hasSize(featureCnt);
+        FakeModelMutation fakeModelMutation = mFakeModelProvider.getLatestModelMutation();
+        assertThat(fakeModelMutation.mAddedChildren).hasSize(featureCnt);
         assertThat(session.getContentInSession()).hasSize(featureCnt);
         assertThat(session.getContentInSession())
-                .contains(contentIdGenerators.createFeatureContentId(1));
+                .contains(mContentIdGenerators.createFeatureContentId(1));
     }
 
     @Test
@@ -115,7 +115,7 @@
         List<StreamStructure> streamStructures = protocolBuilder.buildAsStreamStructure();
 
         StreamToken token = StreamToken.newBuilder()
-                                    .setContentId(contentIdGenerators.createTokenContentId(2))
+                                    .setContentId(mContentIdGenerators.createTokenContentId(2))
                                     .build();
         MutationContext context = new MutationContext.Builder().setContinuationToken(token).build();
 
@@ -132,8 +132,8 @@
         session.bindModelProvider(modelProvider, null);
 
         session.updateSession(false, streamStructures, SCHEMA_VERSION, context);
-        FakeModelMutation fakeModelMutation = fakeModelProvider.getLatestModelMutation();
-        assertThat(fakeModelMutation.mutationContext).isEqualTo(context);
+        FakeModelMutation fakeModelMutation = mFakeModelProvider.getLatestModelMutation();
+        assertThat(fakeModelMutation.mMutationContext).isEqualTo(context);
     }
 
     @Test
@@ -150,7 +150,7 @@
         // The token is not in the session, so we ignore the update
         assertThat(session.getContentInSession()).isEmpty();
         StreamToken token = StreamToken.newBuilder()
-                                    .setContentId(contentIdGenerators.createTokenContentId(2))
+                                    .setContentId(mContentIdGenerators.createTokenContentId(2))
                                     .build();
         MutationContext context = new MutationContext.Builder().setContinuationToken(token).build();
         session.updateSession(false, streamStructures, SCHEMA_VERSION, context);
@@ -168,9 +168,9 @@
         addFeatures(protocolBuilder, featureCnt, 1);
         List<StreamStructure> streamStructures = protocolBuilder.buildAsStreamStructure();
 
-        sessionMutationResults = false;
+        mSessionMutationResults = false;
         session.updateSession(false, streamStructures, SCHEMA_VERSION, null);
-        FakeModelMutation fakeModelMutation = fakeModelProvider.getLatestModelMutation();
+        FakeModelMutation fakeModelMutation = mFakeModelProvider.getLatestModelMutation();
         assertThat(fakeModelMutation.isCommitted())
                 .isTrue(); // Optimistic write will still call this
     }
@@ -184,20 +184,20 @@
         InternalProtocolBuilder protocolBuilder = new InternalProtocolBuilder();
         int featureCnt = 2;
         addFeatures(protocolBuilder, featureCnt, 1);
-        protocolBuilder.removeFeature(contentIdGenerators.createFeatureContentId(1),
-                contentIdGenerators.createRootContentId(0));
+        protocolBuilder.removeFeature(mContentIdGenerators.createFeatureContentId(1),
+                mContentIdGenerators.createRootContentId(0));
         List<StreamStructure> streamStructures = protocolBuilder.buildAsStreamStructure();
         session.updateSession(false, streamStructures, SCHEMA_VERSION, null);
-        FakeModelMutation fakeModelMutation = fakeModelProvider.getLatestModelMutation();
-        assertThat(fakeModelMutation.removedChildren).hasSize(1);
+        FakeModelMutation fakeModelMutation = mFakeModelProvider.getLatestModelMutation();
+        assertThat(fakeModelMutation.mRemovedChildren).hasSize(1);
         assertThat(session.getContentInSession()).hasSize(1);
     }
 
     protected void addFeatures(
             InternalProtocolBuilder protocolBuilder, int featureCnt, int startId) {
         for (int i = 0; i < featureCnt; i++) {
-            protocolBuilder.addFeature(contentIdGenerators.createFeatureContentId(startId++),
-                    contentIdGenerators.createRootContentId(0));
+            protocolBuilder.addFeature(mContentIdGenerators.createFeatureContentId(startId++),
+                    mContentIdGenerators.createRootContentId(0));
         }
     }
 
@@ -213,7 +213,7 @@
 
         @Override
         public Boolean commit() {
-            return sessionMutationResults;
+            return mSessionMutationResults;
         }
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedstore/ContentStorageDirectImpl.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedstore/ContentStorageDirectImpl.java
index 441799a..f562074a 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedstore/ContentStorageDirectImpl.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedstore/ContentStorageDirectImpl.java
@@ -25,12 +25,12 @@
 public final class ContentStorageDirectImpl
         extends MainThreadCaller implements ContentStorageDirect {
     private static final String LOCATION = "ContentStorage.";
-    private final ContentStorage contentStorage;
+    private final ContentStorage mContentStorage;
 
     public ContentStorageDirectImpl(
             ContentStorage contentStorage, MainThreadRunner mainThreadRunner) {
         super(mainThreadRunner);
-        this.contentStorage = contentStorage;
+        this.mContentStorage = contentStorage;
     }
 
     @Override
@@ -40,24 +40,24 @@
         }
 
         return mainThreadCaller(LOCATION + "get",
-                (consumer) -> contentStorage.get(keys, consumer), Result.failure());
+                (consumer) -> mContentStorage.get(keys, consumer), Result.failure());
     }
 
     @Override
     public Result<Map<String, byte[]>> getAll(String prefix) {
         return mainThreadCaller(LOCATION + "getAll",
-                (consumer) -> contentStorage.getAll(prefix, consumer), Result.failure());
+                (consumer) -> mContentStorage.getAll(prefix, consumer), Result.failure());
     }
 
     @Override
     public CommitResult commit(ContentMutation mutation) {
         return mainThreadCaller(LOCATION + "commit",
-                (consumer) -> contentStorage.commit(mutation, consumer), CommitResult.FAILURE);
+                (consumer) -> mContentStorage.commit(mutation, consumer), CommitResult.FAILURE);
     }
 
     @Override
     public Result<List<String>> getAllKeys() {
         return mainThreadCaller(
-                LOCATION + "getAllKeys", contentStorage::getAllKeys, Result.failure());
+                LOCATION + "getAllKeys", mContentStorage::getAllKeys, Result.failure());
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedstore/FeedStore.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedstore/FeedStore.java
index 86d2146e..9855528 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedstore/FeedStore.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedstore/FeedStore.java
@@ -63,202 +63,203 @@
     private static final String TAG = "FeedStore";
 
     // Permanent reference to the persistent store (used for setting off cleanup)
-    private final PersistentFeedStore persistentStore;
-    private final MainThreadRunner mainThreadRunner;
+    private final PersistentFeedStore mPersistentStore;
+    private final MainThreadRunner mMainThreadRunner;
     // The current store
-    private ClearableStore delegate;
+    private ClearableStore mDelegate;
 
-    private final TaskQueue taskQueue;
+    private final TaskQueue mTaskQueue;
 
     // Needed for switching to ephemeral mode
-    private final FeedStoreHelper storeHelper = new FeedStoreHelper();
-    private final BasicLoggingApi basicLoggingApi;
-    private final Clock clock;
-    private final TimingUtils timingUtils;
-    private final ThreadUtils threadUtils;
+    private final FeedStoreHelper mStoreHelper = new FeedStoreHelper();
+    private final BasicLoggingApi mBasicLoggingApi;
+    private final Clock mClock;
+    private final TimingUtils mTimingUtils;
+    private final ThreadUtils mThreadUtils;
 
-    private boolean isEphemeralMode;
+    private boolean mIsEphemeralMode;
 
-    protected final ContentStorageDirect contentStorage;
-    protected final JournalStorageDirect journalStorage;
+    protected final ContentStorageDirect mContentStorage;
+    protected final JournalStorageDirect mJournalStorage;
 
     public FeedStore(Configuration configuration, TimingUtils timingUtils,
             FeedExtensionRegistry extensionRegistry, ContentStorageDirect contentStorage,
             JournalStorageDirect journalStorage, ThreadUtils threadUtils, TaskQueue taskQueue,
             Clock clock, BasicLoggingApi basicLoggingApi, MainThreadRunner mainThreadRunner) {
-        this.taskQueue = taskQueue;
-        this.clock = clock;
-        this.timingUtils = timingUtils;
-        this.threadUtils = threadUtils;
-        this.basicLoggingApi = basicLoggingApi;
-        this.mainThreadRunner = mainThreadRunner;
-        this.contentStorage = contentStorage;
-        this.journalStorage = journalStorage;
+        this.mTaskQueue = taskQueue;
+        this.mClock = clock;
+        this.mTimingUtils = timingUtils;
+        this.mThreadUtils = threadUtils;
+        this.mBasicLoggingApi = basicLoggingApi;
+        this.mMainThreadRunner = mainThreadRunner;
+        this.mContentStorage = contentStorage;
+        this.mJournalStorage = journalStorage;
 
-        this.persistentStore = new PersistentFeedStore(configuration, this.timingUtils,
-                extensionRegistry, contentStorage, journalStorage, this.taskQueue, threadUtils,
-                this.clock, this.storeHelper, basicLoggingApi, mainThreadRunner);
-        delegate = persistentStore;
+        this.mPersistentStore = new PersistentFeedStore(configuration, this.mTimingUtils,
+                extensionRegistry, contentStorage, journalStorage, this.mTaskQueue, threadUtils,
+                this.mClock, this.mStoreHelper, basicLoggingApi, mainThreadRunner);
+        mDelegate = mPersistentStore;
     }
 
     @Override
     public Result<List<PayloadWithId>> getPayloads(List<String> contentIds) {
-        return delegate.getPayloads(contentIds);
+        return mDelegate.getPayloads(contentIds);
     }
 
     @Override
     public Result<List<StreamSharedState>> getSharedStates() {
-        return delegate.getSharedStates();
+        return mDelegate.getSharedStates();
     }
 
     @Override
     public Result<List<StreamStructure>> getStreamStructures(String sessionId) {
-        return delegate.getStreamStructures(sessionId);
+        return mDelegate.getStreamStructures(sessionId);
     }
 
     @Override
     public Result<List<String>> getAllSessions() {
-        return delegate.getAllSessions();
+        return mDelegate.getAllSessions();
     }
 
     @Override
     public Result<List<SemanticPropertiesWithId>> getSemanticProperties(List<String> contentIds) {
-        return delegate.getSemanticProperties(contentIds);
+        return mDelegate.getSemanticProperties(contentIds);
     }
 
     @Override
     public Result<List<StreamLocalAction>> getAllDismissLocalActions() {
-        return delegate.getAllDismissLocalActions();
+        return mDelegate.getAllDismissLocalActions();
     }
 
     @Override
     public Result<Set<StreamUploadableAction>> getAllUploadableActions() {
-        return delegate.getAllUploadableActions();
+        return mDelegate.getAllUploadableActions();
     }
 
     @Override
     public Result<String> createNewSession() {
-        return delegate.createNewSession();
+        return mDelegate.createNewSession();
     }
 
     @Override
     public void removeSession(String sessionId) {
-        delegate.removeSession(sessionId);
+        mDelegate.removeSession(sessionId);
     }
 
     @Override
     public void clearHead() {
-        delegate.clearHead();
+        mDelegate.clearHead();
     }
 
     @Override
     public ContentMutation editContent() {
-        return delegate.editContent();
+        return mDelegate.editContent();
     }
 
     @Override
     public SessionMutation editSession(String sessionId) {
-        return delegate.editSession(sessionId);
+        return mDelegate.editSession(sessionId);
     }
 
     @Override
     public SemanticPropertiesMutation editSemanticProperties() {
-        return delegate.editSemanticProperties();
+        return mDelegate.editSemanticProperties();
     }
 
     @Override
     public LocalActionMutation editLocalActions() {
-        return delegate.editLocalActions();
+        return mDelegate.editLocalActions();
     }
 
     @Override
     public UploadableActionMutation editUploadableActions() {
-        return delegate.editUploadableActions();
+        return mDelegate.editUploadableActions();
     }
 
     @Override
     public Runnable triggerContentGc(Set<String> reservedContentIds,
             Supplier<Set<String>> accessibleContent, boolean keepSharedStates) {
-        return delegate.triggerContentGc(reservedContentIds, accessibleContent, keepSharedStates);
+        return mDelegate.triggerContentGc(reservedContentIds, accessibleContent, keepSharedStates);
     }
 
     @Override
     public Runnable triggerLocalActionGc(
             List<StreamLocalAction> actions, List<String> validContentIds) {
-        return delegate.triggerLocalActionGc(actions, validContentIds);
+        return mDelegate.triggerLocalActionGc(actions, validContentIds);
     }
 
     @Override
     public boolean isEphemeralMode() {
-        return isEphemeralMode;
+        return mIsEphemeralMode;
     }
 
     @Override
     public void switchToEphemeralMode() {
         // This should be called on a background thread because it's called during error handling.
-        threadUtils.checkNotMainThread();
-        if (!isEphemeralMode) {
-            persistentStore.switchToEphemeralMode();
-            delegate = new EphemeralFeedStore(clock, timingUtils, storeHelper);
+        mThreadUtils.checkNotMainThread();
+        if (!mIsEphemeralMode) {
+            mPersistentStore.switchToEphemeralMode();
+            mDelegate = new EphemeralFeedStore(mClock, mTimingUtils, mStoreHelper);
 
-            taskQueue.execute(Task.CLEAR_PERSISTENT_STORE_TASK, TaskType.BACKGROUND, () -> {
-                ElapsedTimeTracker tracker = timingUtils.getElapsedTimeTracker(TAG);
+            mTaskQueue.execute(Task.CLEAR_PERSISTENT_STORE_TASK, TaskType.BACKGROUND, () -> {
+                ElapsedTimeTracker tracker = mTimingUtils.getElapsedTimeTracker(TAG);
                 // Try to just wipe content + sessions
-                boolean clearSuccess = persistentStore.clearNonActionContent();
+                boolean clearSuccess = mPersistentStore.clearNonActionContent();
                 // If that fails, wipe everything.
                 if (!clearSuccess) {
-                    persistentStore.clearAll();
+                    mPersistentStore.clearAll();
                 }
                 tracker.stop("clearPersistentStore", "completed");
             });
 
-            isEphemeralMode = true;
-            synchronized (observers) {
-                for (StoreListener listener : observers) {
+            mIsEphemeralMode = true;
+            synchronized (mObservers) {
+                for (StoreListener listener : mObservers) {
                     listener.onSwitchToEphemeralMode();
                 }
             }
-            mainThreadRunner.execute("log ephemeral switch",
-                    () -> basicLoggingApi.onInternalError(InternalFeedError.SWITCH_TO_EPHEMERAL));
+            mMainThreadRunner.execute("log ephemeral switch",
+                    () -> mBasicLoggingApi.onInternalError(InternalFeedError.SWITCH_TO_EPHEMERAL));
         }
     }
 
     @Override
     public void reset() {
-        persistentStore.clearNonActionContent();
+        mPersistentStore.clearNonActionContent();
     }
 
     @Override
     public void onLifecycleEvent(@LifecycleEvent String event) {
-        if (LifecycleEvent.ENTER_BACKGROUND.equals(event) && isEphemeralMode) {
-            taskQueue.execute(
+        if (LifecycleEvent.ENTER_BACKGROUND.equals(event) && mIsEphemeralMode) {
+            mTaskQueue.execute(
                     Task.DUMP_EPHEMERAL_ACTIONS, TaskType.BACKGROUND, this::dumpEphemeralActions);
         }
     }
 
     private void dumpEphemeralActions() {
         // Get all action-related content (actions + semantic data)
-        Result<List<StreamLocalAction>> dismissActionsResult = delegate.getAllDismissLocalActions();
+        Result<List<StreamLocalAction>> dismissActionsResult =
+                mDelegate.getAllDismissLocalActions();
         if (!dismissActionsResult.isSuccessful()) {
             Logger.e(TAG, "Error retrieving actions when trying to dump ephemeral actions.");
             return;
         }
         List<StreamLocalAction> dismissActions = dismissActionsResult.getValue();
-        LocalActionMutation localActionMutation = persistentStore.editLocalActions();
+        LocalActionMutation localActionMutation = mPersistentStore.editLocalActions();
         List<String> dismissActionContentIds = new ArrayList<>(dismissActions.size());
         for (StreamLocalAction dismiss : dismissActions) {
             dismissActionContentIds.add(dismiss.getFeatureContentId());
             localActionMutation.add(dismiss.getAction(), dismiss.getFeatureContentId());
         }
         Result<List<SemanticPropertiesWithId>> semanticPropertiesResult =
-                delegate.getSemanticProperties(dismissActionContentIds);
+                mDelegate.getSemanticProperties(dismissActionContentIds);
         if (!semanticPropertiesResult.isSuccessful()) {
             Logger.e(TAG,
                     "Error retrieving semantic properties when trying to dump ephemeral actions.");
             return;
         }
         SemanticPropertiesMutation semanticPropertiesMutation =
-                persistentStore.editSemanticProperties();
+                mPersistentStore.editSemanticProperties();
         for (SemanticPropertiesWithId semanticProperties : semanticPropertiesResult.getValue()) {
             semanticPropertiesMutation.add(semanticProperties.contentId,
                     ByteString.copyFrom(semanticProperties.semanticData));
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedstore/JournalStorageDirectImpl.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedstore/JournalStorageDirectImpl.java
index 9de9ad2..d517f24 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedstore/JournalStorageDirectImpl.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedstore/JournalStorageDirectImpl.java
@@ -23,41 +23,41 @@
 public final class JournalStorageDirectImpl
         extends MainThreadCaller implements JournalStorageDirect {
     private static final String LOCATION = "JournalStorage.";
-    private final JournalStorage journalStorage;
+    private final JournalStorage mJournalStorage;
 
     public JournalStorageDirectImpl(
             JournalStorage journalStorage, MainThreadRunner mainThreadRunner) {
         super(mainThreadRunner);
-        this.journalStorage = journalStorage;
+        this.mJournalStorage = journalStorage;
     }
 
     @Override
     public Result<List<byte[]>> read(String journalName) {
         return mainThreadCaller(LOCATION + "read",
-                (consumer) -> journalStorage.read(journalName, consumer), Result.failure());
+                (consumer) -> mJournalStorage.read(journalName, consumer), Result.failure());
     }
 
     @Override
     public CommitResult commit(JournalMutation mutation) {
         return mainThreadCaller(LOCATION + "commit",
-                (consumer) -> journalStorage.commit(mutation, consumer), CommitResult.FAILURE);
+                (consumer) -> mJournalStorage.commit(mutation, consumer), CommitResult.FAILURE);
     }
 
     @Override
     public Result<Boolean> exists(String journalName) {
         return mainThreadCaller(LOCATION + "exists",
-                (consumer) -> journalStorage.exists(journalName, consumer), Result.failure());
+                (consumer) -> mJournalStorage.exists(journalName, consumer), Result.failure());
     }
 
     @Override
     public Result<List<String>> getAllJournals() {
         return mainThreadCaller(
-                LOCATION + "getAllJournals", journalStorage::getAllJournals, Result.failure());
+                LOCATION + "getAllJournals", mJournalStorage::getAllJournals, Result.failure());
     }
 
     @Override
     public CommitResult deleteAll() {
         return mainThreadCaller(
-                LOCATION + "deleteAll", journalStorage::deleteAll, CommitResult.FAILURE);
+                LOCATION + "deleteAll", mJournalStorage::deleteAll, CommitResult.FAILURE);
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedstore/internal/ContentGc.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedstore/internal/ContentGc.java
index 68c0857a..646bf85 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedstore/internal/ContentGc.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedstore/internal/ContentGc.java
@@ -32,50 +32,50 @@
 public final class ContentGc {
     private static final String TAG = "ContentGc";
 
-    private final Supplier<Set<String>> accessibleContentSupplier;
-    private final Set<String> reservedContentIds;
-    private final Supplier<Set<StreamLocalAction>> actionsSupplier;
-    private final ContentStorageDirect contentStorageDirect;
-    private final TimingUtils timingUtils;
-    private final TaskQueue taskQueue;
-    private final boolean keepSharedStates;
-    private final long maxAllowedGcAttempts;
+    private final Supplier<Set<String>> mAccessibleContentSupplier;
+    private final Set<String> mReservedContentIds;
+    private final Supplier<Set<StreamLocalAction>> mActionsSupplier;
+    private final ContentStorageDirect mContentStorageDirect;
+    private final TimingUtils mTimingUtils;
+    private final TaskQueue mTaskQueue;
+    private final boolean mKeepSharedStates;
+    private final long mMaxAllowedGcAttempts;
 
-    private int contentGcAttempts;
+    private int mContentGcAttempts;
 
     ContentGc(Configuration configuration, Supplier<Set<String>> accessibleContentSupplier,
             Set<String> reservedContentIds, Supplier<Set<StreamLocalAction>> actionsSupplier,
             ContentStorageDirect contentStorageDirect, TaskQueue taskQueue, TimingUtils timingUtils,
             boolean keepSharedStates) {
-        this.accessibleContentSupplier = accessibleContentSupplier;
-        this.reservedContentIds = reservedContentIds;
-        this.actionsSupplier = actionsSupplier;
-        this.contentStorageDirect = contentStorageDirect;
-        this.taskQueue = taskQueue;
-        this.timingUtils = timingUtils;
-        this.keepSharedStates = keepSharedStates;
-        maxAllowedGcAttempts = configuration.getValueOrDefault(ConfigKey.MAXIMUM_GC_ATTEMPTS, 10L);
+        this.mAccessibleContentSupplier = accessibleContentSupplier;
+        this.mReservedContentIds = reservedContentIds;
+        this.mActionsSupplier = actionsSupplier;
+        this.mContentStorageDirect = contentStorageDirect;
+        this.mTaskQueue = taskQueue;
+        this.mTimingUtils = timingUtils;
+        this.mKeepSharedStates = keepSharedStates;
+        mMaxAllowedGcAttempts = configuration.getValueOrDefault(ConfigKey.MAXIMUM_GC_ATTEMPTS, 10L);
     }
 
     void gc() {
-        if (taskQueue.hasBacklog() && contentGcAttempts < maxAllowedGcAttempts) {
-            Logger.i(TAG, "Re-enqueuing triggerContentGc; attempts(%d)", contentGcAttempts);
-            contentGcAttempts++;
-            taskQueue.execute(Task.GARBAGE_COLLECT_CONTENT, TaskType.BACKGROUND, this::gc);
+        if (mTaskQueue.hasBacklog() && mContentGcAttempts < mMaxAllowedGcAttempts) {
+            Logger.i(TAG, "Re-enqueuing triggerContentGc; attempts(%d)", mContentGcAttempts);
+            mContentGcAttempts++;
+            mTaskQueue.execute(Task.GARBAGE_COLLECT_CONTENT, TaskType.BACKGROUND, this::gc);
             return;
         }
 
-        ElapsedTimeTracker tracker = timingUtils.getElapsedTimeTracker(TAG);
+        ElapsedTimeTracker tracker = mTimingUtils.getElapsedTimeTracker(TAG);
         Set<String> population = getPopulation();
         // remove the items in the population that are accessible, reserved, or semantic properties
         // either accessible or associated with an action
         Set<String> accessibleContent = getAccessible();
         population.removeAll(accessibleContent);
-        population.removeAll(reservedContentIds);
+        population.removeAll(mReservedContentIds);
         population.removeAll(getAccessibleSemanticProperties(accessibleContent));
         population.removeAll(getLocalActionSemanticProperties(getLocalActions()));
         filterUploadableActions(population);
-        if (keepSharedStates) {
+        if (mKeepSharedStates) {
             filterSharedStates(population);
         } else {
             population.removeAll(getAccessibleSharedStates(accessibleContent));
@@ -87,13 +87,13 @@
     }
 
     private void removeUnAccessible(Set<String> unAccessible) {
-        ElapsedTimeTracker tracker = timingUtils.getElapsedTimeTracker(TAG);
+        ElapsedTimeTracker tracker = mTimingUtils.getElapsedTimeTracker(TAG);
         ContentMutation.Builder mutationBuilder = new ContentMutation.Builder();
         for (String key : unAccessible) {
             Logger.i(TAG, "Removing %s", key);
             mutationBuilder.delete(key);
         }
-        CommitResult result = contentStorageDirect.commit(mutationBuilder.build());
+        CommitResult result = mContentStorageDirect.commit(mutationBuilder.build());
         if (result == CommitResult.FAILURE) {
             Logger.e(TAG, "Content Modification failed removing unaccessible items.");
         }
@@ -110,7 +110,7 @@
 
     private void filterPrefix(Set<String> population, String prefix) {
         int size = population.size();
-        ElapsedTimeTracker tracker = timingUtils.getElapsedTimeTracker(TAG);
+        ElapsedTimeTracker tracker = mTimingUtils.getElapsedTimeTracker(TAG);
         Iterator<String> i = population.iterator();
         while (i.hasNext()) {
             String key = i.next();
@@ -122,23 +122,23 @@
     }
 
     private Set<String> getAccessible() {
-        ElapsedTimeTracker tracker = timingUtils.getElapsedTimeTracker(TAG);
-        Set<String> accessibleContent = accessibleContentSupplier.get();
+        ElapsedTimeTracker tracker = mTimingUtils.getElapsedTimeTracker(TAG);
+        Set<String> accessibleContent = mAccessibleContentSupplier.get();
         tracker.stop("", "getAccessible", "accessableContent", accessibleContent.size());
         return accessibleContent;
     }
 
     private Set<StreamLocalAction> getLocalActions() {
-        ElapsedTimeTracker tracker = timingUtils.getElapsedTimeTracker(TAG);
-        Set<StreamLocalAction> actions = actionsSupplier.get();
+        ElapsedTimeTracker tracker = mTimingUtils.getElapsedTimeTracker(TAG);
+        Set<StreamLocalAction> actions = mActionsSupplier.get();
         tracker.stop("", "getLocalActions", "actionCount", actions.size());
         return actions;
     }
 
     private Set<String> getPopulation() {
-        ElapsedTimeTracker tracker = timingUtils.getElapsedTimeTracker(TAG);
+        ElapsedTimeTracker tracker = mTimingUtils.getElapsedTimeTracker(TAG);
         Set<String> population = new HashSet<>();
-        Result<List<String>> result = contentStorageDirect.getAllKeys();
+        Result<List<String>> result = mContentStorageDirect.getAllKeys();
         if (result.isSuccessful()) {
             population.addAll(result.getValue());
         } else {
@@ -149,7 +149,7 @@
     }
 
     private Set<String> getAccessibleSemanticProperties(Set<String> accessibleContent) {
-        ElapsedTimeTracker tracker = timingUtils.getElapsedTimeTracker(TAG);
+        ElapsedTimeTracker tracker = mTimingUtils.getElapsedTimeTracker(TAG);
         Set<String> semanticPropertiesKeys = new HashSet<>();
         for (String accessibleContentId : accessibleContent) {
             String semanticPropertyKey = SEMANTIC_PROPERTIES_PREFIX + accessibleContentId;
@@ -161,7 +161,7 @@
     }
 
     private Set<String> getAccessibleSharedStates(Set<String> accessibleContent) {
-        ElapsedTimeTracker tracker = timingUtils.getElapsedTimeTracker(TAG);
+        ElapsedTimeTracker tracker = mTimingUtils.getElapsedTimeTracker(TAG);
         Set<String> sharedStateKeys = new HashSet<>();
         for (String accessibleContentId : accessibleContent) {
             String sharedStateKey = SHARED_STATE_PREFIX + accessibleContentId;
@@ -173,7 +173,7 @@
     }
 
     private Set<String> getLocalActionSemanticProperties(Set<StreamLocalAction> actions) {
-        ElapsedTimeTracker tracker = timingUtils.getElapsedTimeTracker(TAG);
+        ElapsedTimeTracker tracker = mTimingUtils.getElapsedTimeTracker(TAG);
         Set<String> semanticPropertiesKeys = new HashSet<>();
         for (StreamLocalAction action : actions) {
             String semanticPropertyKey = SEMANTIC_PROPERTIES_PREFIX + action.getFeatureContentId();
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedstore/internal/EphemeralFeedStore.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedstore/internal/EphemeralFeedStore.java
index b6bab6c..54f9016 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedstore/internal/EphemeralFeedStore.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedstore/internal/EphemeralFeedStore.java
@@ -39,28 +39,28 @@
     private static final String TAG = "EphemeralFeedStore";
     private static final Runnable EMPTY_RUNNABLE = () -> {};
 
-    private final Clock clock;
-    private final TimingUtils timingUtils;
-    private final FeedStoreHelper storeHelper;
+    private final Clock mClock;
+    private final TimingUtils mTimingUtils;
+    private final FeedStoreHelper mStoreHelper;
 
-    private final Map<String, PayloadWithId> payloadWithIdMap = new HashMap<>();
-    private final Map<String, StreamSharedState> sharedStateMap = new HashMap<>();
-    private final Map<String, ByteString> semanticPropertiesMap = new HashMap<>();
-    private final Map<Integer, List<StreamLocalAction>> actionsMap = new HashMap<>();
-    private final Map<String, Set<StreamUploadableAction>> uploadableActionsMap = new HashMap<>();
-    private final Map<String, List<StreamStructure>> sessionsMap = new HashMap<>();
+    private final Map<String, PayloadWithId> mPayloadWithIdMap = new HashMap<>();
+    private final Map<String, StreamSharedState> mSharedStateMap = new HashMap<>();
+    private final Map<String, ByteString> mSemanticPropertiesMap = new HashMap<>();
+    private final Map<Integer, List<StreamLocalAction>> mActionsMap = new HashMap<>();
+    private final Map<String, Set<StreamUploadableAction>> mUploadableActionsMap = new HashMap<>();
+    private final Map<String, List<StreamStructure>> mSessionsMap = new HashMap<>();
 
     public EphemeralFeedStore(Clock clock, TimingUtils timingUtils, FeedStoreHelper storeHelper) {
-        this.clock = clock;
-        this.timingUtils = timingUtils;
-        this.storeHelper = storeHelper;
+        this.mClock = clock;
+        this.mTimingUtils = timingUtils;
+        this.mStoreHelper = storeHelper;
     }
 
     @Override
     public Result<List<PayloadWithId>> getPayloads(List<String> contentIds) {
         List<PayloadWithId> payloads = new ArrayList<>(contentIds.size());
         for (String contentId : contentIds) {
-            PayloadWithId payload = payloadWithIdMap.get(contentId);
+            PayloadWithId payload = mPayloadWithIdMap.get(contentId);
             if (payload != null) {
                 payloads.add(payload);
             }
@@ -71,12 +71,12 @@
     @Override
     public Result<List<StreamSharedState>> getSharedStates() {
         return Result.success(
-                Collections.unmodifiableList(new ArrayList<>(sharedStateMap.values())));
+                Collections.unmodifiableList(new ArrayList<>(mSharedStateMap.values())));
     }
 
     @Override
     public Result<List<StreamStructure>> getStreamStructures(String sessionId) {
-        List<StreamStructure> streamStructures = sessionsMap.get(sessionId);
+        List<StreamStructure> streamStructures = mSessionsMap.get(sessionId);
         if (streamStructures == null) {
             streamStructures = Collections.emptyList();
         }
@@ -85,7 +85,7 @@
 
     @Override
     public Result<List<String>> getAllSessions() {
-        Set<String> sessions = sessionsMap.keySet();
+        Set<String> sessions = mSessionsMap.keySet();
         ArrayList<String> returnValues = new ArrayList<>();
         for (String sessionId : sessions) {
             if (!HEAD_SESSION_ID.equals(sessionId)) {
@@ -100,7 +100,7 @@
         List<SemanticPropertiesWithId> semanticPropertiesWithIds =
                 new ArrayList<>(contentIds.size());
         for (String contentId : contentIds) {
-            ByteString semanticProperties = semanticPropertiesMap.get(contentId);
+            ByteString semanticProperties = mSemanticPropertiesMap.get(contentId);
             if (semanticProperties != null) {
                 // TODO: switch SemanticPropertiesWithId to use byte array directly
                 semanticPropertiesWithIds.add(
@@ -112,7 +112,7 @@
 
     @Override
     public Result<List<StreamLocalAction>> getAllDismissLocalActions() {
-        List<StreamLocalAction> dismissActions = actionsMap.get(ActionType.DISMISS);
+        List<StreamLocalAction> dismissActions = mActionsMap.get(ActionType.DISMISS);
         if (dismissActions == null) {
             dismissActions = Collections.emptyList();
         }
@@ -122,7 +122,7 @@
     @Override
     public Result<Set<StreamUploadableAction>> getAllUploadableActions() {
         Set<StreamUploadableAction> uploadableActions = Collections.emptySet();
-        for (Set<StreamUploadableAction> actions : uploadableActionsMap.values()) {
+        for (Set<StreamUploadableAction> actions : mUploadableActionsMap.values()) {
             uploadableActions.addAll(actions);
         }
         return Result.success(uploadableActions);
@@ -130,10 +130,10 @@
 
     @Override
     public Result<String> createNewSession() {
-        ElapsedTimeTracker tracker = timingUtils.getElapsedTimeTracker(TAG);
-        String sessionId = storeHelper.getNewStreamSessionId();
+        ElapsedTimeTracker tracker = mTimingUtils.getElapsedTimeTracker(TAG);
+        String sessionId = mStoreHelper.getNewStreamSessionId();
         Result<List<StreamStructure>> streamStructuresResult = getStreamStructures(HEAD_SESSION_ID);
-        sessionsMap.put(sessionId, new ArrayList<>(streamStructuresResult.getValue()));
+        mSessionsMap.put(sessionId, new ArrayList<>(streamStructuresResult.getValue()));
         tracker.stop("createNewSession", sessionId);
         return Result.success(sessionId);
     }
@@ -143,15 +143,15 @@
         if (sessionId.equals(HEAD_SESSION_ID)) {
             throw new IllegalStateException("Unable to delete the $HEAD session");
         }
-        ElapsedTimeTracker tracker = timingUtils.getElapsedTimeTracker(TAG);
-        sessionsMap.remove(sessionId);
+        ElapsedTimeTracker tracker = mTimingUtils.getElapsedTimeTracker(TAG);
+        mSessionsMap.remove(sessionId);
         tracker.stop("removeSession", sessionId);
     }
 
     @Override
     public void clearHead() {
-        ElapsedTimeTracker tracker = timingUtils.getElapsedTimeTracker(TAG);
-        sessionsMap.remove(HEAD_SESSION_ID);
+        ElapsedTimeTracker tracker = mTimingUtils.getElapsedTimeTracker(TAG);
+        mSessionsMap.remove(HEAD_SESSION_ID);
         tracker.stop("", "clearHead");
     }
 
@@ -161,15 +161,15 @@
     }
 
     private CommitResult commitContentMutation(List<PayloadWithId> mutations) {
-        ElapsedTimeTracker tracker = timingUtils.getElapsedTimeTracker(TAG);
+        ElapsedTimeTracker tracker = mTimingUtils.getElapsedTimeTracker(TAG);
 
         for (PayloadWithId mutation : mutations) {
             String contentId = mutation.contentId;
             if (mutation.payload.hasStreamSharedState()) {
                 StreamSharedState streamSharedState = mutation.payload.getStreamSharedState();
-                sharedStateMap.put(contentId, streamSharedState);
+                mSharedStateMap.put(contentId, streamSharedState);
             } else {
-                payloadWithIdMap.put(contentId, mutation);
+                mPayloadWithIdMap.put(contentId, mutation);
             }
         }
         tracker.stop("task", "commitContentMutation", "mutations", mutations.size());
@@ -184,11 +184,11 @@
 
     private Boolean commitSessionMutation(
             String sessionId, List<StreamStructure> streamStructures) {
-        ElapsedTimeTracker tracker = timingUtils.getElapsedTimeTracker(TAG);
-        List<StreamStructure> sessionStructures = sessionsMap.get(sessionId);
+        ElapsedTimeTracker tracker = mTimingUtils.getElapsedTimeTracker(TAG);
+        List<StreamStructure> sessionStructures = mSessionsMap.get(sessionId);
         if (sessionStructures == null) {
             sessionStructures = new ArrayList<>();
-            sessionsMap.put(sessionId, sessionStructures);
+            mSessionsMap.put(sessionId, sessionStructures);
         }
         sessionStructures.addAll(streamStructures);
         tracker.stop("", "commitSessionMutation", "mutations", streamStructures.size());
@@ -202,8 +202,8 @@
 
     private CommitResult commitSemanticPropertiesMutation(
             Map<String, ByteString> semanticPropertiesMap) {
-        ElapsedTimeTracker tracker = timingUtils.getElapsedTimeTracker(TAG);
-        this.semanticPropertiesMap.putAll(semanticPropertiesMap);
+        ElapsedTimeTracker tracker = mTimingUtils.getElapsedTimeTracker(TAG);
+        this.mSemanticPropertiesMap.putAll(semanticPropertiesMap);
         tracker.stop(
                 "", "commitSemanticPropertiesMutation", "mutations", semanticPropertiesMap.size());
         return CommitResult.SUCCESS;
@@ -216,19 +216,19 @@
 
     private CommitResult commitUploadableActionMutation(
             Map<String, FeedUploadableActionMutation.FeedUploadableActionChanges> actions) {
-        ElapsedTimeTracker tracker = timingUtils.getElapsedTimeTracker(TAG);
+        ElapsedTimeTracker tracker = mTimingUtils.getElapsedTimeTracker(TAG);
         CommitResult commitResult = CommitResult.SUCCESS;
         for (Map.Entry<String, FeedUploadableActionMutation.FeedUploadableActionChanges> entry :
                 actions.entrySet()) {
             String contentId = entry.getKey();
             FeedUploadableActionMutation.FeedUploadableActionChanges changes = entry.getValue();
-            Set<StreamUploadableAction> actionsSet = uploadableActionsMap.get(contentId);
+            Set<StreamUploadableAction> actionsSet = mUploadableActionsMap.get(contentId);
             if (actionsSet == null) {
                 actionsSet = new HashSet<>();
             }
             actionsSet.removeAll(changes.removeActions());
             actionsSet.addAll(changes.upsertActions());
-            uploadableActionsMap.put(contentId, actionsSet);
+            mUploadableActionsMap.put(contentId, actionsSet);
         }
         tracker.stop("task", "commitUploadableActionMutation", "actions", actions.size());
         return commitResult;
@@ -240,14 +240,14 @@
     }
 
     private CommitResult commitLocalActionMutation(Map<Integer, List<String>> actions) {
-        ElapsedTimeTracker tracker = timingUtils.getElapsedTimeTracker(TAG);
+        ElapsedTimeTracker tracker = mTimingUtils.getElapsedTimeTracker(TAG);
         CommitResult commitResult = CommitResult.SUCCESS;
         for (Map.Entry<Integer, List<String>> entry : actions.entrySet()) {
             Integer actionType = entry.getKey();
-            List<StreamLocalAction> actionsList = actionsMap.get(actionType);
+            List<StreamLocalAction> actionsList = mActionsMap.get(actionType);
             if (actionsList == null) {
                 actionsList = new ArrayList<>();
-                actionsMap.put(actionType, actionsList);
+                mActionsMap.put(actionType, actionsList);
             }
             for (String contentId : entry.getValue()) {
                 StreamLocalAction action =
@@ -255,7 +255,7 @@
                                 .setAction(actionType)
                                 .setFeatureContentId(contentId)
                                 .setTimestampSeconds(
-                                        TimeUnit.MILLISECONDS.toSeconds(clock.currentTimeMillis()))
+                                        TimeUnit.MILLISECONDS.toSeconds(mClock.currentTimeMillis()))
                                 .build();
                 actionsList.add(action);
             }
@@ -303,11 +303,11 @@
 
     @Override
     public boolean clearAll() {
-        payloadWithIdMap.clear();
-        actionsMap.clear();
-        semanticPropertiesMap.clear();
-        sessionsMap.clear();
-        sharedStateMap.clear();
+        mPayloadWithIdMap.clear();
+        mActionsMap.clear();
+        mSemanticPropertiesMap.clear();
+        mSessionsMap.clear();
+        mSharedStateMap.clear();
         return true;
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedstore/internal/FeedContentMutation.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedstore/internal/FeedContentMutation.java
index b2a288f..37c3e71 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedstore/internal/FeedContentMutation.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedstore/internal/FeedContentMutation.java
@@ -15,21 +15,21 @@
 
 /** This class will mutate the Content stored in the FeedStore. */
 public final class FeedContentMutation implements ContentMutation {
-    private final List<PayloadWithId> mutations = new ArrayList<>();
-    private final Committer<CommitResult, List<PayloadWithId>> committer;
+    private final List<PayloadWithId> mMutations = new ArrayList<>();
+    private final Committer<CommitResult, List<PayloadWithId>> mCommitter;
 
     FeedContentMutation(Committer<CommitResult, List<PayloadWithId>> committer) {
-        this.committer = committer;
+        this.mCommitter = committer;
     }
 
     @Override
     public ContentMutation add(String contentId, StreamPayload payload) {
-        mutations.add(new PayloadWithId(contentId, payload));
+        mMutations.add(new PayloadWithId(contentId, payload));
         return this;
     }
 
     @Override
     public CommitResult commit() {
-        return committer.commit(mutations);
+        return mCommitter.commit(mMutations);
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedstore/internal/FeedLocalActionMutation.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedstore/internal/FeedLocalActionMutation.java
index 941bad09..a1981c5 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedstore/internal/FeedLocalActionMutation.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedstore/internal/FeedLocalActionMutation.java
@@ -18,27 +18,27 @@
 public final class FeedLocalActionMutation implements LocalActionMutation {
     private static final String TAG = "FeedLocalActionMutation";
 
-    private final Map<Integer, List<String>> actions = new HashMap<>();
-    private final Committer<CommitResult, Map<Integer, List<String>>> committer;
+    private final Map<Integer, List<String>> mActions = new HashMap<>();
+    private final Committer<CommitResult, Map<Integer, List<String>>> mCommitter;
 
     FeedLocalActionMutation(Committer<CommitResult, Map<Integer, List<String>>> committer) {
-        this.committer = committer;
+        this.mCommitter = committer;
     }
 
     @Override
     public LocalActionMutation add(int action, String contentId) {
-        /*@Nullable*/ List<String> actionsForType = actions.get(action);
+        /*@Nullable*/ List<String> actionsForType = mActions.get(action);
         if (actionsForType == null) {
             actionsForType = new ArrayList<>();
         }
         actionsForType.add(contentId);
-        actions.put(action, actionsForType);
+        mActions.put(action, actionsForType);
         Logger.i(TAG, "Added action %d with content id %s", action, contentId);
         return this;
     }
 
     @Override
     public CommitResult commit() {
-        return committer.commit(actions);
+        return mCommitter.commit(mActions);
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedstore/internal/FeedSemanticPropertiesMutation.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedstore/internal/FeedSemanticPropertiesMutation.java
index 8af9953..79a969f 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedstore/internal/FeedSemanticPropertiesMutation.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedstore/internal/FeedSemanticPropertiesMutation.java
@@ -14,21 +14,21 @@
 
 /** Implementation of the {@link SemanticPropertiesMutation}. */
 public final class FeedSemanticPropertiesMutation implements SemanticPropertiesMutation {
-    private final Map<String, ByteString> semanticPropertiesMap = new HashMap<>();
-    private final Committer<CommitResult, Map<String, ByteString>> committer;
+    private final Map<String, ByteString> mSemanticPropertiesMap = new HashMap<>();
+    private final Committer<CommitResult, Map<String, ByteString>> mCommitter;
 
     FeedSemanticPropertiesMutation(Committer<CommitResult, Map<String, ByteString>> committer) {
-        this.committer = committer;
+        this.mCommitter = committer;
     }
 
     @Override
     public SemanticPropertiesMutation add(String contentId, ByteString semanticData) {
-        semanticPropertiesMap.put(contentId, semanticData);
+        mSemanticPropertiesMap.put(contentId, semanticData);
         return this;
     }
 
     @Override
     public CommitResult commit() {
-        return committer.commit(semanticPropertiesMap);
+        return mCommitter.commit(mSemanticPropertiesMap);
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedstore/internal/FeedSessionMutation.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedstore/internal/FeedSessionMutation.java
index adcf33d..f490de5 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedstore/internal/FeedSessionMutation.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedstore/internal/FeedSessionMutation.java
@@ -13,21 +13,21 @@
 
 /** Implementation of the {@link SessionMutation}. */
 public final class FeedSessionMutation implements SessionMutation {
-    private final List<StreamStructure> streamStructures = new ArrayList<>();
-    private final Committer<Boolean, List<StreamStructure>> committer;
+    private final List<StreamStructure> mStreamStructures = new ArrayList<>();
+    private final Committer<Boolean, List<StreamStructure>> mCommitter;
 
     FeedSessionMutation(Committer<Boolean, List<StreamStructure>> committer) {
-        this.committer = committer;
+        this.mCommitter = committer;
     }
 
     @Override
     public SessionMutation add(StreamStructure streamStructure) {
-        streamStructures.add(streamStructure);
+        mStreamStructures.add(streamStructure);
         return this;
     }
 
     @Override
     public Boolean commit() {
-        return committer.commit(streamStructures);
+        return mCommitter.commit(mStreamStructures);
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedstore/internal/FeedUploadableActionMutation.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedstore/internal/FeedUploadableActionMutation.java
index 2631d63..82a718fd 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedstore/internal/FeedUploadableActionMutation.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedstore/internal/FeedUploadableActionMutation.java
@@ -19,68 +19,68 @@
 public final class FeedUploadableActionMutation implements UploadableActionMutation {
     private static final String TAG = "FeedUploadableActionMutation";
 
-    private final Map<String, FeedUploadableActionChanges> actions = new HashMap<>();
-    private final Committer<CommitResult, Map<String, FeedUploadableActionChanges>> committer;
+    private final Map<String, FeedUploadableActionChanges> mActions = new HashMap<>();
+    private final Committer<CommitResult, Map<String, FeedUploadableActionChanges>> mCommitter;
 
     FeedUploadableActionMutation(
             Committer<CommitResult, Map<String, FeedUploadableActionChanges>> committer) {
-        this.committer = committer;
+        this.mCommitter = committer;
     }
 
     @Override
     public UploadableActionMutation upsert(StreamUploadableAction action, String contentId) {
-        /*@Nullable*/ FeedUploadableActionChanges actionsForId = actions.get(contentId);
+        /*@Nullable*/ FeedUploadableActionChanges actionsForId = mActions.get(contentId);
         if (actionsForId == null) {
             actionsForId = new FeedUploadableActionChanges();
         }
         actionsForId.upsertAction(action);
-        actions.put(contentId, actionsForId);
+        mActions.put(contentId, actionsForId);
         Logger.i(TAG, "Added action %d", action);
         return this;
     }
 
     @Override
     public UploadableActionMutation remove(StreamUploadableAction action, String contentId) {
-        /*@Nullable*/ FeedUploadableActionChanges actionsForId = actions.get(contentId);
+        /*@Nullable*/ FeedUploadableActionChanges actionsForId = mActions.get(contentId);
         if (actionsForId == null) {
             actionsForId = new FeedUploadableActionChanges();
         }
         actionsForId.removeAction(action);
-        actions.put(contentId, actionsForId);
+        mActions.put(contentId, actionsForId);
         Logger.i(TAG, "Added action %d", action);
         return this;
     }
 
     @Override
     public CommitResult commit() {
-        return committer.commit(actions);
+        return mCommitter.commit(mActions);
     }
 
     public static class FeedUploadableActionChanges {
-        private final Set<StreamUploadableAction> upsertActions;
-        private final Set<StreamUploadableAction> removeActions;
+        private final Set<StreamUploadableAction> mUpsertActions;
+        private final Set<StreamUploadableAction> mRemoveActions;
 
         FeedUploadableActionChanges() {
-            this.upsertActions = new HashSet<>();
-            this.removeActions = new HashSet<>();
+            this.mUpsertActions = new HashSet<>();
+            this.mRemoveActions = new HashSet<>();
         }
 
         void upsertAction(StreamUploadableAction action) {
-            upsertActions.add(action);
-            removeActions.remove(action);
+            mUpsertActions.add(action);
+            mRemoveActions.remove(action);
         }
 
         void removeAction(StreamUploadableAction action) {
-            removeActions.add(action);
-            upsertActions.remove(action);
+            mRemoveActions.add(action);
+            mUpsertActions.remove(action);
         }
 
         public Set<StreamUploadableAction> upsertActions() {
-            return upsertActions;
+            return mUpsertActions;
         }
 
         public Set<StreamUploadableAction> removeActions() {
-            return removeActions;
+            return mRemoveActions;
         }
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedstore/internal/LocalActionGc.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedstore/internal/LocalActionGc.java
index 96cc12c7..0f1b574 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedstore/internal/LocalActionGc.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedstore/internal/LocalActionGc.java
@@ -18,45 +18,45 @@
 public final class LocalActionGc {
     private static final String TAG = "LocalActionGc";
 
-    private final List<StreamLocalAction> actions;
-    private final List<String> validContentIds;
-    private final JournalStorageDirect journalStorageDirect;
-    private final TimingUtils timingUtils;
-    private final String journalName;
+    private final List<StreamLocalAction> mActions;
+    private final List<String> mValidContentIds;
+    private final JournalStorageDirect mJournalStorageDirect;
+    private final TimingUtils mTimingUtils;
+    private final String mJournalName;
 
     LocalActionGc(List<StreamLocalAction> actions, List<String> validContentIds,
             JournalStorageDirect journalStorageDirect, TimingUtils timingUtils,
             String journalName) {
-        this.actions = actions;
-        this.validContentIds = validContentIds;
-        this.journalStorageDirect = journalStorageDirect;
-        this.timingUtils = timingUtils;
-        this.journalName = journalName;
+        this.mActions = actions;
+        this.mValidContentIds = validContentIds;
+        this.mJournalStorageDirect = journalStorageDirect;
+        this.mTimingUtils = timingUtils;
+        this.mJournalName = journalName;
     }
 
     /**
-     * Cleans up the store based on {@link #actions} and {@link #validContentIds}. Any valid actions
-     * will be copied over to a new copy of the action journal.
+     * Cleans up the store based on {@link #mActions} and {@link #mValidContentIds}. Any valid
+     * actions will be copied over to a new copy of the action journal.
      */
     void gc() {
-        ElapsedTimeTracker tracker = timingUtils.getElapsedTimeTracker(TAG);
-        List<StreamLocalAction> validActions = new ArrayList<>(validContentIds.size());
+        ElapsedTimeTracker tracker = mTimingUtils.getElapsedTimeTracker(TAG);
+        List<StreamLocalAction> validActions = new ArrayList<>(mValidContentIds.size());
 
-        for (StreamLocalAction action : actions) {
-            if (validContentIds.contains(action.getFeatureContentId())) {
+        for (StreamLocalAction action : mActions) {
+            if (mValidContentIds.contains(action.getFeatureContentId())) {
                 validActions.add(action);
             }
         }
 
-        Builder mutationBuilder = new Builder(journalName);
+        Builder mutationBuilder = new Builder(mJournalName);
         mutationBuilder.delete();
 
         for (StreamLocalAction action : validActions) {
             mutationBuilder.append(action.toByteArray());
         }
-        CommitResult result = journalStorageDirect.commit(mutationBuilder.build());
+        CommitResult result = mJournalStorageDirect.commit(mutationBuilder.build());
         if (result == CommitResult.SUCCESS) {
-            tracker.stop("gcMutation", actions.size() - validActions.size());
+            tracker.stop("gcMutation", mActions.size() - validActions.size());
         } else {
             tracker.stop("gcMutation failed");
         }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedstore/internal/PersistentFeedStore.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedstore/internal/PersistentFeedStore.java
index 51031b1..2c5833a 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedstore/internal/PersistentFeedStore.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedstore/internal/PersistentFeedStore.java
@@ -69,51 +69,51 @@
 public final class PersistentFeedStore implements ClearableStore, Dumpable {
     private static final String TAG = "PersistentFeedStore";
 
-    private final Configuration configuration;
-    private final TimingUtils timingUtils;
-    private final FeedExtensionRegistry extensionRegistry;
-    private final ContentStorageDirect contentStorageDirect;
-    private final JournalStorageDirect journalStorageDirect;
-    private final TaskQueue taskQueue;
-    private final ThreadUtils threadUtils;
-    private final Clock clock;
-    private final FeedStoreHelper storeHelper;
-    private final BasicLoggingApi basicLoggingApi;
-    private final MainThreadRunner mainThreadRunner;
+    private final Configuration mConfiguration;
+    private final TimingUtils mTimingUtils;
+    private final FeedExtensionRegistry mExtensionRegistry;
+    private final ContentStorageDirect mContentStorageDirect;
+    private final JournalStorageDirect mJournalStorageDirect;
+    private final TaskQueue mTaskQueue;
+    private final ThreadUtils mThreadUtils;
+    private final Clock mClock;
+    private final FeedStoreHelper mStoreHelper;
+    private final BasicLoggingApi mBasicLoggingApi;
+    private final MainThreadRunner mMainThreadRunner;
 
     // We use a common string interner pool because the same content IDs are reused across different
     // protos. The actual proto interners below are backed by thisl common pool.
-    private final InternerWithStats<String> contentIdStringInterner =
+    private final InternerWithStats<String> mContentIdStringInterner =
             new InternerWithStats<>(new WeakPoolInterner<>());
-    private final Interner<StreamStructure> streamStructureInterner =
-            new StreamStructureInterner(contentIdStringInterner);
-    private final Interner<StreamPayload> streamPayloadInterner =
-            new StreamPayloadInterner(contentIdStringInterner);
+    private final Interner<StreamStructure> mStreamStructureInterner =
+            new StreamStructureInterner(mContentIdStringInterner);
+    private final Interner<StreamPayload> mStreamPayloadInterner =
+            new StreamPayloadInterner(mContentIdStringInterner);
 
     public PersistentFeedStore(Configuration configuration, TimingUtils timingUtils,
             FeedExtensionRegistry extensionRegistry, ContentStorageDirect contentStorageDirect,
             JournalStorageDirect journalStorageDirect, TaskQueue taskQueue, ThreadUtils threadUtils,
             Clock clock, FeedStoreHelper storeHelper, BasicLoggingApi basicLoggingApi,
             MainThreadRunner mainThreadRunner) {
-        this.configuration = configuration;
-        this.timingUtils = timingUtils;
-        this.extensionRegistry = extensionRegistry;
-        this.contentStorageDirect = contentStorageDirect;
-        this.journalStorageDirect = journalStorageDirect;
-        this.taskQueue = taskQueue;
-        this.threadUtils = threadUtils;
-        this.clock = clock;
-        this.storeHelper = storeHelper;
-        this.basicLoggingApi = basicLoggingApi;
-        this.mainThreadRunner = mainThreadRunner;
+        this.mConfiguration = configuration;
+        this.mTimingUtils = timingUtils;
+        this.mExtensionRegistry = extensionRegistry;
+        this.mContentStorageDirect = contentStorageDirect;
+        this.mJournalStorageDirect = journalStorageDirect;
+        this.mTaskQueue = taskQueue;
+        this.mThreadUtils = threadUtils;
+        this.mClock = clock;
+        this.mStoreHelper = storeHelper;
+        this.mBasicLoggingApi = basicLoggingApi;
+        this.mMainThreadRunner = mainThreadRunner;
     }
 
     @Override
     public Result<List<PayloadWithId>> getPayloads(List<String> contentIds) {
-        threadUtils.checkNotMainThread();
-        ElapsedTimeTracker tracker = timingUtils.getElapsedTimeTracker(TAG);
+        mThreadUtils.checkNotMainThread();
+        ElapsedTimeTracker tracker = mTimingUtils.getElapsedTimeTracker(TAG);
         List<PayloadWithId> payloads = new ArrayList<>(contentIds.size());
-        Result<Map<String, byte[]>> contentResult = contentStorageDirect.get(contentIds);
+        Result<Map<String, byte[]>> contentResult = mContentStorageDirect.get(contentIds);
         if (!contentResult.isSuccessful()) {
             Logger.e(TAG, "Unsuccessful fetching payloads for content ids %s", contentIds);
             tracker.stop("getPayloads failed", "items", contentIds);
@@ -122,13 +122,13 @@
 
         for (Map.Entry<String, byte[]> entry : contentResult.getValue().entrySet()) {
             try {
-                StreamPayload streamPayload = streamPayloadInterner.intern(StreamPayload.parseFrom(
-                        entry.getValue(), extensionRegistry.getExtensionRegistry()));
+                StreamPayload streamPayload = mStreamPayloadInterner.intern(StreamPayload.parseFrom(
+                        entry.getValue(), mExtensionRegistry.getExtensionRegistry()));
                 payloads.add(new PayloadWithId(entry.getKey(), streamPayload));
             } catch (InvalidProtocolBufferException e) {
                 Logger.e(TAG, "Couldn't parse content proto for id %s", entry.getKey());
-                mainThreadRunner.execute("ITEM_NOT_PARSED", () -> {
-                    basicLoggingApi.onInternalError(InternalFeedError.ITEM_NOT_PARSED);
+                mMainThreadRunner.execute("ITEM_NOT_PARSED", () -> {
+                    mBasicLoggingApi.onInternalError(InternalFeedError.ITEM_NOT_PARSED);
                 });
             }
         }
@@ -138,9 +138,9 @@
 
     @Override
     public Result<List<StreamSharedState>> getSharedStates() {
-        threadUtils.checkNotMainThread();
-        ElapsedTimeTracker tracker = timingUtils.getElapsedTimeTracker(TAG);
-        Result<Map<String, byte[]>> bytesResult = contentStorageDirect.getAll(SHARED_STATE_PREFIX);
+        mThreadUtils.checkNotMainThread();
+        ElapsedTimeTracker tracker = mTimingUtils.getElapsedTimeTracker(TAG);
+        Result<Map<String, byte[]>> bytesResult = mContentStorageDirect.getAll(SHARED_STATE_PREFIX);
         if (!bytesResult.isSuccessful()) {
             Logger.e(TAG, "Error fetching shared states");
             tracker.stop("getSharedStates", "failed");
@@ -163,10 +163,10 @@
 
     @Override
     public Result<List<StreamStructure>> getStreamStructures(String sessionId) {
-        threadUtils.checkNotMainThread();
-        ElapsedTimeTracker tracker = timingUtils.getElapsedTimeTracker(TAG);
+        mThreadUtils.checkNotMainThread();
+        ElapsedTimeTracker tracker = mTimingUtils.getElapsedTimeTracker(TAG);
         List<StreamStructure> streamStructures;
-        Result<List<byte[]>> operationsResult = journalStorageDirect.read(sessionId);
+        Result<List<byte[]>> operationsResult = mJournalStorageDirect.read(sessionId);
         if (!operationsResult.isSuccessful()) {
             Logger.e(TAG, "Error fetching stream structures for session %s", sessionId);
             tracker.stop("getStreamStructures failed", "session", sessionId);
@@ -180,7 +180,7 @@
             }
             try {
                 streamStructures.add(
-                        streamStructureInterner.intern(StreamStructure.parseFrom(bytes)));
+                        mStreamStructureInterner.intern(StreamStructure.parseFrom(bytes)));
             } catch (InvalidProtocolBufferException e) {
                 Logger.e(TAG, e, "Error parsing stream structure.");
             }
@@ -191,11 +191,11 @@
 
     @Override
     public Result<List<String>> getAllSessions() {
-        threadUtils.checkNotMainThread();
-        ElapsedTimeTracker tracker = timingUtils.getElapsedTimeTracker(TAG);
+        mThreadUtils.checkNotMainThread();
+        ElapsedTimeTracker tracker = mTimingUtils.getElapsedTimeTracker(TAG);
         List<String> sessions;
 
-        Result<List<String>> namesResult = journalStorageDirect.getAllJournals();
+        Result<List<String>> namesResult = mJournalStorageDirect.getAllJournals();
         if (!namesResult.isSuccessful()) {
             Logger.e(TAG, "Error fetching all journals");
             tracker.stop("getAllSessions failed");
@@ -221,15 +221,15 @@
 
     @Override
     public Result<List<SemanticPropertiesWithId>> getSemanticProperties(List<String> contentIds) {
-        threadUtils.checkNotMainThread();
-        ElapsedTimeTracker tracker = timingUtils.getElapsedTimeTracker(TAG);
+        mThreadUtils.checkNotMainThread();
+        ElapsedTimeTracker tracker = mTimingUtils.getElapsedTimeTracker(TAG);
         List<SemanticPropertiesWithId> semanticPropertiesWithIds =
                 new ArrayList<>(contentIds.size());
         List<String> contentIdKeys = new ArrayList<>(contentIds.size());
         for (String contentId : contentIds) {
             contentIdKeys.add(SEMANTIC_PROPERTIES_PREFIX + contentId);
         }
-        Result<Map<String, byte[]>> mapResult = contentStorageDirect.get(contentIdKeys);
+        Result<Map<String, byte[]>> mapResult = mContentStorageDirect.get(contentIdKeys);
 
         if (mapResult.isSuccessful()) {
             for (Map.Entry<String, byte[]> entry : mapResult.getValue().entrySet()) {
@@ -250,10 +250,10 @@
 
     @Override
     public Result<List<StreamLocalAction>> getAllDismissLocalActions() {
-        threadUtils.checkNotMainThread();
-        ElapsedTimeTracker tracker = timingUtils.getElapsedTimeTracker(TAG);
+        mThreadUtils.checkNotMainThread();
+        ElapsedTimeTracker tracker = mTimingUtils.getElapsedTimeTracker(TAG);
 
-        Result<List<byte[]>> listResult = journalStorageDirect.read(DISMISS_ACTION_JOURNAL);
+        Result<List<byte[]>> listResult = mJournalStorageDirect.read(DISMISS_ACTION_JOURNAL);
         if (!listResult.isSuccessful()) {
             Logger.e(TAG, "Error retrieving dismiss journal");
             tracker.stop("getAllDismissLocalActions failed");
@@ -278,10 +278,10 @@
 
     @Override
     public Result<Set<StreamUploadableAction>> getAllUploadableActions() {
-        threadUtils.checkNotMainThread();
-        ElapsedTimeTracker tracker = timingUtils.getElapsedTimeTracker(TAG);
+        mThreadUtils.checkNotMainThread();
+        ElapsedTimeTracker tracker = mTimingUtils.getElapsedTimeTracker(TAG);
         Result<Map<String, byte[]>> bytesResult =
-                contentStorageDirect.getAll(UPLOADABLE_ACTION_PREFIX);
+                mContentStorageDirect.getAll(UPLOADABLE_ACTION_PREFIX);
         if (!bytesResult.isSuccessful()) {
             Logger.e(TAG, "Error fetching shared states");
             tracker.stop("getAllUploadableActions", "failed");
@@ -304,11 +304,11 @@
 
     @Override
     public Result<String> createNewSession() {
-        threadUtils.checkNotMainThread();
+        mThreadUtils.checkNotMainThread();
 
-        ElapsedTimeTracker tracker = timingUtils.getElapsedTimeTracker(TAG);
-        String sessionId = storeHelper.getNewStreamSessionId();
-        journalStorageDirect.commit(
+        ElapsedTimeTracker tracker = mTimingUtils.getElapsedTimeTracker(TAG);
+        String sessionId = mStoreHelper.getNewStreamSessionId();
+        mJournalStorageDirect.commit(
                 new JournalMutation.Builder(HEAD_SESSION_ID).copy(sessionId).build());
         tracker.stop("createNewSession", sessionId);
         return Result.success(sessionId);
@@ -316,46 +316,46 @@
 
     @Override
     public void removeSession(String sessionId) {
-        threadUtils.checkNotMainThread();
-        ElapsedTimeTracker tracker = timingUtils.getElapsedTimeTracker(TAG);
+        mThreadUtils.checkNotMainThread();
+        ElapsedTimeTracker tracker = mTimingUtils.getElapsedTimeTracker(TAG);
         if (sessionId.equals(HEAD_SESSION_ID)) {
             throw new IllegalStateException("Unable to delete the $HEAD session");
         }
-        journalStorageDirect.commit(new JournalMutation.Builder(sessionId).delete().build());
+        mJournalStorageDirect.commit(new JournalMutation.Builder(sessionId).delete().build());
         tracker.stop("removeSession", sessionId);
     }
 
     @Override
     public void clearHead() {
-        threadUtils.checkNotMainThread();
-        ElapsedTimeTracker tracker = timingUtils.getElapsedTimeTracker(TAG);
-        journalStorageDirect.commit(
+        mThreadUtils.checkNotMainThread();
+        ElapsedTimeTracker tracker = mTimingUtils.getElapsedTimeTracker(TAG);
+        mJournalStorageDirect.commit(
                 new JournalMutation.Builder(HEAD_SESSION_ID).delete().append(new byte[0]).build());
         tracker.stop("", "clearHead");
     }
 
     @Override
     public ContentMutation editContent() {
-        threadUtils.checkNotMainThread();
+        mThreadUtils.checkNotMainThread();
         return new FeedContentMutation(this::commitContentMutation);
     }
 
     @Override
     public SessionMutation editSession(String sessionId) {
-        threadUtils.checkNotMainThread();
+        mThreadUtils.checkNotMainThread();
         return new FeedSessionMutation(
                 feedSessionMutation -> commitSessionMutation(sessionId, feedSessionMutation));
     }
 
     @Override
     public SemanticPropertiesMutation editSemanticProperties() {
-        threadUtils.checkNotMainThread();
+        mThreadUtils.checkNotMainThread();
         return new FeedSemanticPropertiesMutation(this::commitSemanticPropertiesMutation);
     }
 
     @Override
     public LocalActionMutation editLocalActions() {
-        threadUtils.checkNotMainThread();
+        mThreadUtils.checkNotMainThread();
         return new FeedLocalActionMutation(this::commitLocalActionMutation);
     }
 
@@ -379,15 +379,15 @@
             }
         };
 
-        return new ContentGc(configuration, accessibleContent, reservedContentIds,
-                dismissActionSupplier, contentStorageDirect, taskQueue, timingUtils,
+        return new ContentGc(mConfiguration, accessibleContent, reservedContentIds,
+                dismissActionSupplier, mContentStorageDirect, mTaskQueue, mTimingUtils,
                 keepSharedStates)::gc;
     }
 
     @Override
     public Runnable triggerLocalActionGc(
             List<StreamLocalAction> actions, List<String> validContentIds) {
-        return new LocalActionGc(actions, validContentIds, journalStorageDirect, timingUtils,
+        return new LocalActionGc(actions, validContentIds, mJournalStorageDirect, mTimingUtils,
                 DISMISS_ACTION_JOURNAL)::gc;
     }
 
@@ -415,14 +415,14 @@
 
     private CommitResult commitSemanticPropertiesMutation(
             Map<String, ByteString> semanticPropertiesMap) {
-        threadUtils.checkNotMainThread();
-        ElapsedTimeTracker tracker = timingUtils.getElapsedTimeTracker(TAG);
+        mThreadUtils.checkNotMainThread();
+        ElapsedTimeTracker tracker = mTimingUtils.getElapsedTimeTracker(TAG);
         Builder mutationBuilder = new Builder();
         for (Map.Entry<String, ByteString> entry : semanticPropertiesMap.entrySet()) {
             mutationBuilder.upsert(
                     SEMANTIC_PROPERTIES_PREFIX + entry.getKey(), entry.getValue().toByteArray());
         }
-        CommitResult commitResult = contentStorageDirect.commit(mutationBuilder.build());
+        CommitResult commitResult = mContentStorageDirect.commit(mutationBuilder.build());
         tracker.stop("task", "commitSemanticPropertiesMutation", "mutations",
                 semanticPropertiesMap.size());
         return commitResult;
@@ -430,8 +430,8 @@
 
     private Boolean commitSessionMutation(
             String sessionId, List<StreamStructure> streamStructures) {
-        threadUtils.checkNotMainThread();
-        ElapsedTimeTracker tracker = timingUtils.getElapsedTimeTracker(TAG);
+        mThreadUtils.checkNotMainThread();
+        ElapsedTimeTracker tracker = mTimingUtils.getElapsedTimeTracker(TAG);
         JournalMutation.Builder mutation = new JournalMutation.Builder(sessionId);
         if (streamStructures.isEmpty()) {
             // allow an empty journal to be created
@@ -440,7 +440,7 @@
         for (StreamStructure streamStructure : streamStructures) {
             mutation.append(streamStructure.toByteArray());
         }
-        CommitResult mutationResult = journalStorageDirect.commit(mutation.build());
+        CommitResult mutationResult = mJournalStorageDirect.commit(mutation.build());
         boolean result = CommitResult.SUCCESS.equals(mutationResult);
         tracker.stop("", "commitSessionMutation", "mutations", streamStructures.size());
         Logger.i(TAG, "commitSessionMutation - Success %s, Update Session %s, stream structures %s",
@@ -449,7 +449,7 @@
     }
 
     private CommitResult commitContentMutation(List<PayloadWithId> mutations) {
-        ElapsedTimeTracker tracker = timingUtils.getElapsedTimeTracker(TAG);
+        ElapsedTimeTracker tracker = mTimingUtils.getElapsedTimeTracker(TAG);
 
         Builder contentMutationBuilder = new Builder();
         for (PayloadWithId mutation : mutations) {
@@ -467,13 +467,13 @@
 
         // Block waiting for the response from storage, to make this method synchronous.
         // TODO: handle errors
-        CommitResult commitResult = contentStorageDirect.commit(contentMutationBuilder.build());
+        CommitResult commitResult = mContentStorageDirect.commit(contentMutationBuilder.build());
         tracker.stop("task", "commitContentMutation", "mutations", mutations.size());
         return commitResult;
     }
 
     private CommitResult commitLocalActionMutation(Map<Integer, List<String>> actions) {
-        ElapsedTimeTracker tracker = timingUtils.getElapsedTimeTracker(TAG);
+        ElapsedTimeTracker tracker = mTimingUtils.getElapsedTimeTracker(TAG);
 
         CommitResult commitResult = CommitResult.SUCCESS;
         for (Map.Entry<Integer, List<String>> entry : actions.entrySet()) {
@@ -492,7 +492,7 @@
                                 .setAction(actionType)
                                 .setFeatureContentId(contentId)
                                 .setTimestampSeconds(
-                                        TimeUnit.MILLISECONDS.toSeconds(clock.currentTimeMillis()))
+                                        TimeUnit.MILLISECONDS.toSeconds(mClock.currentTimeMillis()))
                                 .build();
                 byte[] actionBytes = action.toByteArray();
                 Logger.i(TAG, "Adding StreamLocalAction bytes %s (length %d) to journal %s",
@@ -500,7 +500,7 @@
                         journalName);
                 builder.append(actionBytes);
             }
-            commitResult = journalStorageDirect.commit(builder.build());
+            commitResult = mJournalStorageDirect.commit(builder.build());
             if (commitResult == CommitResult.FAILURE) {
                 Logger.e(TAG, "Error committing action for type %s", actionType);
                 break;
@@ -513,7 +513,7 @@
 
     private CommitResult commitUploadableActionMutation(
             Map<String, FeedUploadableActionMutation.FeedUploadableActionChanges> actions) {
-        ElapsedTimeTracker tracker = timingUtils.getElapsedTimeTracker(TAG);
+        ElapsedTimeTracker tracker = mTimingUtils.getElapsedTimeTracker(TAG);
 
         Builder contentMutationBuilder = new Builder();
         for (Map.Entry<String, FeedUploadableActionMutation.FeedUploadableActionChanges> entry :
@@ -530,7 +530,7 @@
             }
         }
 
-        CommitResult commitResult = contentStorageDirect.commit(contentMutationBuilder.build());
+        CommitResult commitResult = mContentStorageDirect.commit(contentMutationBuilder.build());
         tracker.stop("task", "commitUploadableActionMutation", "actions", actions.size());
         return commitResult;
     }
@@ -538,21 +538,21 @@
     @Override
     public void dump(Dumper dumper) {
         dumper.title(TAG);
-        if (contentStorageDirect instanceof Dumpable) {
-            dumper.dump((Dumpable) contentStorageDirect);
+        if (mContentStorageDirect instanceof Dumpable) {
+            dumper.dump((Dumpable) mContentStorageDirect);
         } else {
             dumper.forKey("contentStorageDirect").value("not dumpable");
         }
-        if (journalStorageDirect instanceof Dumpable) {
-            dumper.dump((Dumpable) journalStorageDirect);
+        if (mJournalStorageDirect instanceof Dumpable) {
+            dumper.dump((Dumpable) mJournalStorageDirect);
         } else {
             dumper.forKey("journalStorage").value("not dumpable");
         }
         dumper.forKey("contentIdStringInternerSize")
-                .value(contentIdStringInterner.size())
+                .value(mContentIdStringInterner.size())
                 .compactPrevious();
         dumper.forKey("contentIdStringInternerStats")
-                .value(contentIdStringInterner.getStats())
+                .value(mContentIdStringInterner.getStats())
                 .compactPrevious();
     }
 
@@ -572,7 +572,7 @@
      * @return whether the clear succeeded
      */
     private boolean clearJournalStorage() {
-        Result<List<String>> allJournalsResult = journalStorageDirect.getAllJournals();
+        Result<List<String>> allJournalsResult = mJournalStorageDirect.getAllJournals();
         if (!allJournalsResult.isSuccessful()) {
             Logger.e(TAG, "Error clearing all contents. Could not fetch all journals.");
             return false;
@@ -582,7 +582,7 @@
             if (DISMISS_ACTION_JOURNAL.equals(journal)) {
                 continue;
             }
-            CommitResult result = journalStorageDirect.commit(
+            CommitResult result = mJournalStorageDirect.commit(
                     new JournalMutation.Builder(journal).delete().build());
             if (result != CommitResult.SUCCESS) {
                 Logger.e(TAG, "Error clearing all contents. Could not delete journal %s", journal);
@@ -598,7 +598,7 @@
      * @return whether the clear succeeded
      */
     private boolean clearContentStorage() {
-        Result<List<String>> results = contentStorageDirect.getAllKeys();
+        Result<List<String>> results = mContentStorageDirect.getAllKeys();
         if (!results.isSuccessful()) {
             Logger.e(TAG, "Error clearing all contents. Could not fetch all content.");
             return false;
@@ -610,7 +610,7 @@
             }
             contentMutationBuilder.delete(key);
         }
-        CommitResult result = contentStorageDirect.commit(contentMutationBuilder.build());
+        CommitResult result = mContentStorageDirect.commit(contentMutationBuilder.build());
         if (result != CommitResult.SUCCESS) {
             Logger.e(TAG, "Error clearing all contents. Could not commit content deletions.");
             return false;
@@ -621,12 +621,12 @@
     /** Wipes all content and journals */
     @Override
     public boolean clearAll() {
-        threadUtils.checkNotMainThread();
+        mThreadUtils.checkNotMainThread();
 
         boolean success = true;
         // Run clear on both content and journal
-        CommitResult result = contentStorageDirect.commit(new Builder().deleteAll().build());
-        CommitResult journalResult = journalStorageDirect.deleteAll();
+        CommitResult result = mContentStorageDirect.commit(new Builder().deleteAll().build());
+        CommitResult journalResult = mJournalStorageDirect.deleteAll();
 
         // Confirm results were successful
         if (result != CommitResult.SUCCESS) {
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedstore/testing/AbstractFeedStoreTest.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedstore/testing/AbstractFeedStoreTest.java
index a6b1af8a..1214f3a4 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedstore/testing/AbstractFeedStoreTest.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedstore/testing/AbstractFeedStoreTest.java
@@ -39,8 +39,8 @@
 
 /** Tests of the {@link FeedStore} classes. */
 public abstract class AbstractFeedStoreTest {
-    protected final FakeClock fakeClock = new FakeClock();
-    protected final TimingUtils timingUtils = new TimingUtils();
+    protected final FakeClock mFakeClock = new FakeClock();
+    protected final TimingUtils mTimingUtils = new TimingUtils();
 
     private static final long START_TIME = 50;
     private static final long START_TIME_MILLIS = TimeUnit.SECONDS.toMillis(START_TIME);
@@ -48,21 +48,21 @@
     private static final long THREE_DAYS_AFTER_START_TIME_MILLIS =
             TimeUnit.SECONDS.toMillis(THREE_DAYS_AFTER_START_TIME);
 
-    private static final ContentIdGenerators idGenerators = new ContentIdGenerators();
+    private static final ContentIdGenerators sIdGenerators = new ContentIdGenerators();
     private static final int PAYLOAD_ID = 12345;
     private static final int OPERATION_ID = 67890;
     private static final String PAYLOAD_CONTENT_ID =
-            idGenerators.createFeatureContentId(PAYLOAD_ID);
+            sIdGenerators.createFeatureContentId(PAYLOAD_ID);
     private static final String OPERATION_CONTENT_ID =
-            idGenerators.createFeatureContentId(OPERATION_ID);
+            sIdGenerators.createFeatureContentId(OPERATION_ID);
     private static final Builder STREAM_PAYLOAD = StreamPayload.newBuilder().setStreamFeature(
             StreamFeature.newBuilder()
                     .setContentId(PAYLOAD_CONTENT_ID)
-                    .setParentId(idGenerators.createRootContentId(0)));
+                    .setParentId(sIdGenerators.createRootContentId(0)));
     private static final StreamStructure STREAM_STRUCTURE =
             StreamStructure.newBuilder()
                     .setContentId(OPERATION_CONTENT_ID)
-                    .setParentContentId(idGenerators.createRootContentId(0))
+                    .setParentContentId(sIdGenerators.createRootContentId(0))
                     .setOperation(Operation.UPDATE_OR_APPEND)
                     .build();
     private static final StreamDataOperation STREAM_DATA_OPERATION =
@@ -70,7 +70,7 @@
                     .setStreamStructure(STREAM_STRUCTURE)
                     .setStreamPayload(STREAM_PAYLOAD)
                     .build();
-    private final MainThreadRunner mainThreadRunner = FakeMainThreadRunner.runTasksImmediately();
+    private final MainThreadRunner mMainThreadRunner = FakeMainThreadRunner.runTasksImmediately();
 
     /**
      * Provides an instance of the store
@@ -81,7 +81,7 @@
 
     @Test
     public void testMinimalStore() {
-        Store store = getStore(mainThreadRunner);
+        Store store = getStore(mMainThreadRunner);
         Result<List<String>> result = store.getAllSessions();
         assertThat(result.isSuccessful()).isTrue();
         assertThat(result.getValue()).isEmpty();
@@ -89,14 +89,14 @@
 
     @Test
     public void testContentMutation() {
-        Store store = getStore(mainThreadRunner);
+        Store store = getStore(mMainThreadRunner);
         ContentMutation contentMutation = store.editContent();
         assertThat(contentMutation).isNotNull();
     }
 
     @Test
     public void addStructureOperationToSession() {
-        Store store = getStore(mainThreadRunner);
+        Store store = getStore(mMainThreadRunner);
         SessionMutation mutation = store.editSession(Store.HEAD_SESSION_ID);
         mutation.add(STREAM_DATA_OPERATION.getStreamStructure());
         mutation.commit();
@@ -112,7 +112,7 @@
 
     @Test
     public void addContentOperationToSession() {
-        Store store = getStore(mainThreadRunner);
+        Store store = getStore(mMainThreadRunner);
         ContentMutation mutation = store.editContent();
         mutation.add(PAYLOAD_CONTENT_ID, STREAM_DATA_OPERATION.getStreamPayload());
         CommitResult result = mutation.commit();
@@ -122,7 +122,7 @@
 
     @Test
     public void createNewSession() {
-        Store store = getStore(mainThreadRunner);
+        Store store = getStore(mMainThreadRunner);
         SessionMutation mutation = store.editSession(Store.HEAD_SESSION_ID);
         mutation.add(STREAM_STRUCTURE);
         mutation.commit();
@@ -142,7 +142,7 @@
 
     @Test
     public void removeSession() {
-        Store store = getStore(mainThreadRunner);
+        Store store = getStore(mMainThreadRunner);
         SessionMutation mutation = store.editSession(Store.HEAD_SESSION_ID);
         mutation.add(STREAM_STRUCTURE);
         mutation.commit();
@@ -161,7 +161,7 @@
 
     @Test
     public void clearHead() {
-        Store store = getStore(mainThreadRunner);
+        Store store = getStore(mMainThreadRunner);
         SessionMutation mutation = store.editSession(Store.HEAD_SESSION_ID);
         mutation.add(STREAM_STRUCTURE);
         mutation.commit();
@@ -177,7 +177,7 @@
 
     @Test
     public void getSessions() {
-        Store store = getStore(mainThreadRunner);
+        Store store = getStore(mMainThreadRunner);
         SessionMutation mutation = store.editSession(Store.HEAD_SESSION_ID);
         mutation.add(STREAM_STRUCTURE);
         mutation.commit();
@@ -213,7 +213,7 @@
                         .setStreamFeature(
                                 StreamFeature.newBuilder().setContentId(PAYLOAD_CONTENT_ID))
                         .build();
-        Store store = getStore(mainThreadRunner);
+        Store store = getStore(mMainThreadRunner);
 
         CommitResult commitResult =
                 store.editContent().add(PAYLOAD_CONTENT_ID, streamPayload).commit();
@@ -231,7 +231,7 @@
     public void getSharedStates() {
         StreamSharedState streamSharedState =
                 StreamSharedState.newBuilder().setContentId(PAYLOAD_CONTENT_ID).build();
-        Store store = getStore(mainThreadRunner);
+        Store store = getStore(mMainThreadRunner);
         store.editContent()
                 .add(String.valueOf(PAYLOAD_ID),
                         StreamPayload.newBuilder().setStreamSharedState(streamSharedState).build())
@@ -248,7 +248,7 @@
         List<String> contentIds = new ArrayList<>();
         contentIds.add(PAYLOAD_CONTENT_ID);
 
-        Store store = getStore(mainThreadRunner);
+        Store store = getStore(mMainThreadRunner);
         Result<List<PayloadWithId>> payloadsResult = store.getPayloads(contentIds);
         assertThat(payloadsResult.isSuccessful()).isTrue();
         List<PayloadWithId> payloads = payloadsResult.getValue();
@@ -259,7 +259,7 @@
     public void deleteHead_notAllowed() {
         RunnableSubject
                 .assertThatRunnable(() -> {
-                    Store store = getStore(mainThreadRunner);
+                    Store store = getStore(mMainThreadRunner);
                     store.removeSession(Store.HEAD_SESSION_ID);
                 })
                 .throwsAnExceptionOfType(IllegalStateException.class);
@@ -267,14 +267,14 @@
 
     @Test
     public void editSemanticProperties() {
-        Store store = getStore(mainThreadRunner);
+        Store store = getStore(mMainThreadRunner);
         assertThat(store.editSemanticProperties()).isNotNull();
     }
 
     @Test
     public void getSemanticProperties() {
         ByteString semanticData = ByteString.copyFromUtf8("helloWorld");
-        Store store = getStore(mainThreadRunner);
+        Store store = getStore(mMainThreadRunner);
         store.editSemanticProperties().add(PAYLOAD_CONTENT_ID, semanticData).commit();
         Result<List<SemanticPropertiesWithId>> semanticPropertiesResult =
                 store.getSemanticProperties(Collections.singletonList(PAYLOAD_CONTENT_ID));
@@ -288,7 +288,7 @@
     @Test
     public void getSemanticProperties_requestDifferentKey() {
         ByteString semanticData = ByteString.copyFromUtf8("helloWorld");
-        Store store = getStore(mainThreadRunner);
+        Store store = getStore(mMainThreadRunner);
         store.editSemanticProperties().add(PAYLOAD_CONTENT_ID, semanticData).commit();
         Result<List<SemanticPropertiesWithId>> semanticPropertiesResult =
                 store.getSemanticProperties(Collections.singletonList(OPERATION_CONTENT_ID));
@@ -299,7 +299,7 @@
 
     @Test
     public void getSemanticProperties_doesNotExist() {
-        Store store = getStore(mainThreadRunner);
+        Store store = getStore(mMainThreadRunner);
         Result<List<SemanticPropertiesWithId>> semanticPropertiesResult =
                 store.getSemanticProperties(Collections.singletonList(PAYLOAD_CONTENT_ID));
         assertThat(semanticPropertiesResult.isSuccessful()).isTrue();
@@ -309,8 +309,8 @@
 
     @Test
     public void getDismissActions() {
-        fakeClock.set(START_TIME_MILLIS);
-        Store store = getStore(mainThreadRunner);
+        mFakeClock.set(START_TIME_MILLIS);
+        Store store = getStore(mMainThreadRunner);
         store.editLocalActions().add(ActionType.DISMISS, OPERATION_CONTENT_ID).commit();
         Result<List<StreamLocalAction>> dismissActionsResult = store.getAllDismissLocalActions();
         assertThat(dismissActionsResult.isSuccessful()).isTrue();
@@ -323,8 +323,8 @@
 
     @Test
     public void getDismissActions_notIncludedInSessions() {
-        fakeClock.set(START_TIME_MILLIS);
-        Store store = getStore(mainThreadRunner);
+        mFakeClock.set(START_TIME_MILLIS);
+        Store store = getStore(mMainThreadRunner);
         store.editLocalActions().add(ActionType.DISMISS, OPERATION_CONTENT_ID).commit();
         Result<List<String>> allSessionsResult = store.getAllSessions();
         assertThat(allSessionsResult.isSuccessful()).isTrue();
@@ -334,8 +334,8 @@
 
     @Test
     public void getDismissActions_multipleDismisses() {
-        fakeClock.set(START_TIME_MILLIS);
-        Store store = getStore(mainThreadRunner);
+        mFakeClock.set(START_TIME_MILLIS);
+        Store store = getStore(mMainThreadRunner);
         store.editLocalActions()
                 .add(ActionType.DISMISS, OPERATION_CONTENT_ID)
                 .add(ActionType.DISMISS, PAYLOAD_CONTENT_ID)
@@ -354,10 +354,10 @@
 
     @Test
     public void getDismissActions_expired() {
-        fakeClock.set(START_TIME_MILLIS);
-        Store store = getStore(mainThreadRunner);
+        mFakeClock.set(START_TIME_MILLIS);
+        Store store = getStore(mMainThreadRunner);
         store.editLocalActions().add(ActionType.DISMISS, OPERATION_CONTENT_ID).commit();
-        fakeClock.set(THREE_DAYS_AFTER_START_TIME_MILLIS);
+        mFakeClock.set(THREE_DAYS_AFTER_START_TIME_MILLIS);
         Result<List<StreamLocalAction>> dismissActionsResult = store.getAllDismissLocalActions();
         assertThat(dismissActionsResult.isSuccessful()).isTrue();
         List<StreamLocalAction> dismissActions = dismissActionsResult.getValue();
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedstore/testing/DelegatingContentStorage.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedstore/testing/DelegatingContentStorage.java
index b5f7c3b..b5622be 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedstore/testing/DelegatingContentStorage.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedstore/testing/DelegatingContentStorage.java
@@ -19,49 +19,49 @@
  * interfaces.
  */
 public class DelegatingContentStorage implements ContentStorage, ContentStorageDirect {
-    private final ContentStorageDirect delegate;
+    private final ContentStorageDirect mDelegate;
 
     public DelegatingContentStorage(ContentStorageDirect delegate) {
-        this.delegate = delegate;
+        this.mDelegate = delegate;
     }
 
     @Override
     public void get(List<String> keys, Consumer<Result<Map<String, byte[]>>> consumer) {
-        consumer.accept(delegate.get(keys));
+        consumer.accept(mDelegate.get(keys));
     }
 
     @Override
     public Result<Map<String, byte[]>> get(List<String> keys) {
-        return delegate.get(keys);
+        return mDelegate.get(keys);
     }
 
     @Override
     public void getAll(String prefix, Consumer<Result<Map<String, byte[]>>> consumer) {
-        consumer.accept(delegate.getAll(prefix));
+        consumer.accept(mDelegate.getAll(prefix));
     }
 
     @Override
     public Result<Map<String, byte[]>> getAll(String prefix) {
-        return delegate.getAll(prefix);
+        return mDelegate.getAll(prefix);
     }
 
     @Override
     public void getAllKeys(Consumer<Result<List<String>>> consumer) {
-        consumer.accept(delegate.getAllKeys());
+        consumer.accept(mDelegate.getAllKeys());
     }
 
     @Override
     public Result<List<String>> getAllKeys() {
-        return delegate.getAllKeys();
+        return mDelegate.getAllKeys();
     }
 
     @Override
     public void commit(ContentMutation mutation, Consumer<CommitResult> consumer) {
-        consumer.accept(delegate.commit(mutation));
+        consumer.accept(mDelegate.commit(mutation));
     }
 
     @Override
     public CommitResult commit(ContentMutation mutation) {
-        return delegate.commit(mutation);
+        return mDelegate.commit(mutation);
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedstore/testing/DelegatingJournalStorage.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedstore/testing/DelegatingJournalStorage.java
index 929aa80..88d4503e 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedstore/testing/DelegatingJournalStorage.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedstore/testing/DelegatingJournalStorage.java
@@ -18,59 +18,59 @@
  * interfaces.
  */
 public class DelegatingJournalStorage implements JournalStorage, JournalStorageDirect {
-    private final JournalStorageDirect delegate;
+    private final JournalStorageDirect mDelegate;
 
     public DelegatingJournalStorage(JournalStorageDirect delegate) {
-        this.delegate = delegate;
+        this.mDelegate = delegate;
     }
 
     @Override
     public void read(String journalName, Consumer<Result<List<byte[]>>> consumer) {
-        consumer.accept(delegate.read(journalName));
+        consumer.accept(mDelegate.read(journalName));
     }
 
     @Override
     public Result<List<byte[]>> read(String journalName) {
-        return delegate.read(journalName);
+        return mDelegate.read(journalName);
     }
 
     @Override
     public void commit(JournalMutation mutation, Consumer<CommitResult> consumer) {
-        consumer.accept(delegate.commit(mutation));
+        consumer.accept(mDelegate.commit(mutation));
     }
 
     @Override
     public CommitResult commit(JournalMutation mutation) {
-        return delegate.commit(mutation);
+        return mDelegate.commit(mutation);
     }
 
     @Override
     public void exists(String journalName, Consumer<Result<Boolean>> consumer) {
-        consumer.accept(delegate.exists(journalName));
+        consumer.accept(mDelegate.exists(journalName));
     }
 
     @Override
     public Result<Boolean> exists(String journalName) {
-        return delegate.exists(journalName);
+        return mDelegate.exists(journalName);
     }
 
     @Override
     public void getAllJournals(Consumer<Result<List<String>>> consumer) {
-        consumer.accept(delegate.getAllJournals());
+        consumer.accept(mDelegate.getAllJournals());
     }
 
     @Override
     public Result<List<String>> getAllJournals() {
-        return delegate.getAllJournals();
+        return mDelegate.getAllJournals();
     }
 
     @Override
     public void deleteAll(Consumer<CommitResult> consumer) {
-        consumer.accept(delegate.deleteAll());
+        consumer.accept(mDelegate.deleteAll());
     }
 
     @Override
     public CommitResult deleteAll() {
-        return delegate.deleteAll();
+        return mDelegate.deleteAll();
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedstore/testing/DelegatingStore.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedstore/testing/DelegatingStore.java
index 209aa3e..b1783fc 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedstore/testing/DelegatingStore.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/feedstore/testing/DelegatingStore.java
@@ -25,116 +25,116 @@
 
 /** Class which allows spying on a Store implementation */
 public class DelegatingStore implements Store {
-    private final Store store;
+    private final Store mStore;
 
     public DelegatingStore(Store store) {
-        this.store = store;
+        this.mStore = store;
     }
 
     @Override
     public Result<List<PayloadWithId>> getPayloads(List<String> contentIds) {
-        return store.getPayloads(contentIds);
+        return mStore.getPayloads(contentIds);
     }
 
     @Override
     public Result<List<StreamSharedState>> getSharedStates() {
-        return store.getSharedStates();
+        return mStore.getSharedStates();
     }
 
     @Override
     public Result<List<StreamStructure>> getStreamStructures(String sessionId) {
-        return store.getStreamStructures(sessionId);
+        return mStore.getStreamStructures(sessionId);
     }
 
     @Override
     public Result<List<String>> getAllSessions() {
-        return store.getAllSessions();
+        return mStore.getAllSessions();
     }
 
     @Override
     public Result<List<SemanticPropertiesWithId>> getSemanticProperties(List<String> contentIds) {
-        return store.getSemanticProperties(contentIds);
+        return mStore.getSemanticProperties(contentIds);
     }
 
     @Override
     public Result<List<StreamLocalAction>> getAllDismissLocalActions() {
-        return store.getAllDismissLocalActions();
+        return mStore.getAllDismissLocalActions();
     }
 
     @Override
     public Result<Set<StreamUploadableAction>> getAllUploadableActions() {
-        return store.getAllUploadableActions();
+        return mStore.getAllUploadableActions();
     }
 
     @Override
     public Result<String> createNewSession() {
-        return store.createNewSession();
+        return mStore.createNewSession();
     }
 
     @Override
     public void removeSession(String sessionId) {
-        store.removeSession(sessionId);
+        mStore.removeSession(sessionId);
     }
 
     @Override
     public void clearHead() {
-        store.clearHead();
+        mStore.clearHead();
     }
 
     @Override
     public ContentMutation editContent() {
-        return store.editContent();
+        return mStore.editContent();
     }
 
     @Override
     public SessionMutation editSession(String sessionId) {
-        return store.editSession(sessionId);
+        return mStore.editSession(sessionId);
     }
 
     @Override
     public SemanticPropertiesMutation editSemanticProperties() {
-        return store.editSemanticProperties();
+        return mStore.editSemanticProperties();
     }
 
     @Override
     public LocalActionMutation editLocalActions() {
-        return store.editLocalActions();
+        return mStore.editLocalActions();
     }
 
     @Override
     public UploadableActionMutation editUploadableActions() {
-        return store.editUploadableActions();
+        return mStore.editUploadableActions();
     }
 
     @Override
     public Runnable triggerContentGc(Set<String> reservedContentIds,
             Supplier<Set<String>> accessibleContent, boolean keepSharedStates) {
-        return store.triggerContentGc(reservedContentIds, accessibleContent, keepSharedStates);
+        return mStore.triggerContentGc(reservedContentIds, accessibleContent, keepSharedStates);
     }
 
     @Override
     public Runnable triggerLocalActionGc(
             List<StreamLocalAction> actions, List<String> validContentIds) {
-        return store.triggerLocalActionGc(actions, validContentIds);
+        return mStore.triggerLocalActionGc(actions, validContentIds);
     }
 
     @Override
     public void switchToEphemeralMode() {
-        store.switchToEphemeralMode();
+        mStore.switchToEphemeralMode();
     }
 
     @Override
     public boolean isEphemeralMode() {
-        return store.isEphemeralMode();
+        return mStore.isEphemeralMode();
     }
 
     @Override
     public void registerObserver(StoreListener observer) {
-        store.registerObserver(observer);
+        mStore.registerObserver(observer);
     }
 
     @Override
     public void unregisterObserver(StoreListener observer) {
-        store.unregisterObserver(observer);
+        mStore.unregisterObserver(observer);
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/hostimpl/network/NetworkClientWrapper.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/hostimpl/network/NetworkClientWrapper.java
index 10d7515..33f23fc 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/hostimpl/network/NetworkClientWrapper.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/hostimpl/network/NetworkClientWrapper.java
@@ -15,29 +15,29 @@
 public final class NetworkClientWrapper implements NetworkClient {
     private static final String TAG = "NetworkClientWrapper";
 
-    private final NetworkClient directNetworkClient;
-    private final ThreadUtils threadUtils;
-    private final MainThreadRunner mainThreadRunner;
+    private final NetworkClient mDirectNetworkClient;
+    private final ThreadUtils mThreadUtils;
+    private final MainThreadRunner mMainThreadRunner;
 
     public NetworkClientWrapper(NetworkClient directNetworkClient, ThreadUtils threadUtils,
             MainThreadRunner mainThreadRunner) {
-        this.directNetworkClient = directNetworkClient;
-        this.threadUtils = threadUtils;
-        this.mainThreadRunner = mainThreadRunner;
+        this.mDirectNetworkClient = directNetworkClient;
+        this.mThreadUtils = threadUtils;
+        this.mMainThreadRunner = mainThreadRunner;
     }
 
     @Override
     public void send(HttpRequest request, Consumer<HttpResponse> responseConsumer) {
-        if (threadUtils.isMainThread()) {
-            directNetworkClient.send(request, responseConsumer);
+        if (mThreadUtils.isMainThread()) {
+            mDirectNetworkClient.send(request, responseConsumer);
             return;
         }
-        mainThreadRunner.execute(
-                TAG + " send", () -> directNetworkClient.send(request, responseConsumer));
+        mMainThreadRunner.execute(
+                TAG + " send", () -> mDirectNetworkClient.send(request, responseConsumer));
     }
 
     @Override
     public void close() throws Exception {
-        directNetworkClient.close();
+        mDirectNetworkClient.close();
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/hostimpl/scheduler/SchedulerApiWrapper.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/hostimpl/scheduler/SchedulerApiWrapper.java
index e2abd78..8352162 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/hostimpl/scheduler/SchedulerApiWrapper.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/hostimpl/scheduler/SchedulerApiWrapper.java
@@ -15,27 +15,27 @@
 /** Wrapper class which will call the {@link SchedulerApi} on the main thread. */
 public final class SchedulerApiWrapper implements SchedulerApi {
     private static final String TAG = "SchedulerApiWrapper";
-    private final SchedulerApi directSchedulerApi;
-    private final ThreadUtils threadUtils;
-    private final MainThreadRunner mainThreadRunner;
+    private final SchedulerApi mDirectSchedulerApi;
+    private final ThreadUtils mThreadUtils;
+    private final MainThreadRunner mMainThreadRunner;
 
     public SchedulerApiWrapper(SchedulerApi directSchedulerApi, ThreadUtils threadUtils,
             MainThreadRunner mainThreadRunner) {
         Logger.i(TAG, "Create SchedulerApiMainThreadWrapper");
-        this.directSchedulerApi = directSchedulerApi;
-        this.threadUtils = threadUtils;
-        this.mainThreadRunner = mainThreadRunner;
+        this.mDirectSchedulerApi = directSchedulerApi;
+        this.mThreadUtils = threadUtils;
+        this.mMainThreadRunner = mainThreadRunner;
     }
 
     @RequestBehavior
     @Override
     public int shouldSessionRequestData(SessionState sessionState) {
-        if (threadUtils.isMainThread()) {
-            return directSchedulerApi.shouldSessionRequestData(sessionState);
+        if (mThreadUtils.isMainThread()) {
+            return mDirectSchedulerApi.shouldSessionRequestData(sessionState);
         }
         SimpleSettableFuture<Integer> future = new SimpleSettableFuture<>();
-        mainThreadRunner.execute(TAG + " shouldSessionRequestData",
-                () -> future.put(directSchedulerApi.shouldSessionRequestData(sessionState)));
+        mMainThreadRunner.execute(TAG + " shouldSessionRequestData",
+                () -> future.put(mDirectSchedulerApi.shouldSessionRequestData(sessionState)));
         try {
             return future.get();
         } catch (InterruptedException | ExecutionException e) {
@@ -46,21 +46,21 @@
 
     @Override
     public void onReceiveNewContent(long contentCreationDateTimeMs) {
-        if (threadUtils.isMainThread()) {
-            directSchedulerApi.onReceiveNewContent(contentCreationDateTimeMs);
+        if (mThreadUtils.isMainThread()) {
+            mDirectSchedulerApi.onReceiveNewContent(contentCreationDateTimeMs);
             return;
         }
-        mainThreadRunner.execute(TAG + " onReceiveNewContent",
-                () -> { directSchedulerApi.onReceiveNewContent(contentCreationDateTimeMs); });
+        mMainThreadRunner.execute(TAG + " onReceiveNewContent",
+                () -> { mDirectSchedulerApi.onReceiveNewContent(contentCreationDateTimeMs); });
     }
 
     @Override
     public void onRequestError(int networkResponseCode) {
-        if (threadUtils.isMainThread()) {
-            directSchedulerApi.onRequestError(networkResponseCode);
+        if (mThreadUtils.isMainThread()) {
+            mDirectSchedulerApi.onRequestError(networkResponseCode);
             return;
         }
-        mainThreadRunner.execute(TAG + " onRequestError",
-                () -> { directSchedulerApi.onRequestError(networkResponseCode); });
+        mMainThreadRunner.execute(TAG + " onRequestError",
+                () -> { mDirectSchedulerApi.onRequestError(networkResponseCode); });
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/hostimpl/storage/PersistentContentStorage.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/hostimpl/storage/PersistentContentStorage.java
index dc95bd9..419a248 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/hostimpl/storage/PersistentContentStorage.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/hostimpl/storage/PersistentContentStorage.java
@@ -40,22 +40,22 @@
     private static final String TAG = "PersistentContent";
     private static final String CONTENT_DIR = "content";
 
-    private final Context context;
-    private final ThreadUtils threadUtils;
-    private final Executor executor;
+    private final Context mContext;
+    private final ThreadUtils mThreadUtils;
+    private final Executor mExecutor;
 
-    private File contentDir;
+    private File mContentDir;
 
     public PersistentContentStorage(Context context, Executor executor, ThreadUtils threadUtils) {
-        this.context = context;
-        this.executor = executor;
-        this.threadUtils = threadUtils;
+        this.mContext = context;
+        this.mExecutor = executor;
+        this.mThreadUtils = threadUtils;
     }
 
     @Override
     public void get(List<String> keys, Consumer<Result<Map<String, byte[]>>> consumer) {
-        threadUtils.checkMainThread();
-        executor.execute(() -> consumer.accept(get(keys)));
+        mThreadUtils.checkMainThread();
+        mExecutor.execute(() -> consumer.accept(get(keys)));
     }
 
     @Override
@@ -64,7 +64,7 @@
 
         Map<String, byte[]> valueMap = new HashMap<>(keys.size());
         for (String key : keys) {
-            File keyFile = new File(contentDir, key);
+            File keyFile = new File(mContentDir, key);
             if (keyFile.exists()) {
                 try {
                     valueMap.put(key, getFileContents(keyFile));
@@ -79,15 +79,15 @@
 
     @Override
     public void getAll(String prefix, Consumer<Result<Map<String, byte[]>>> consumer) {
-        threadUtils.checkMainThread();
-        executor.execute(() -> consumer.accept(getAll(prefix)));
+        mThreadUtils.checkMainThread();
+        mExecutor.execute(() -> consumer.accept(getAll(prefix)));
     }
 
     @Override
     public Result<Map<String, byte[]>> getAll(String prefix) {
         initializeContentDir();
 
-        File[] files = contentDir.listFiles();
+        File[] files = mContentDir.listFiles();
 
         Map<String, byte[]> allFilesMap = new HashMap<>();
 
@@ -108,7 +108,7 @@
     }
 
     private byte[] getFileContents(File keyFile) throws IOException {
-        threadUtils.checkNotMainThread();
+        mThreadUtils.checkNotMainThread();
 
         ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
 
@@ -128,8 +128,8 @@
 
     @Override
     public void commit(ContentMutation mutation, Consumer<CommitResult> consumer) {
-        threadUtils.checkMainThread();
-        executor.execute(() -> consumer.accept(commit(mutation)));
+        mThreadUtils.checkMainThread();
+        mExecutor.execute(() -> consumer.accept(commit(mutation)));
     }
 
     @Override
@@ -163,13 +163,13 @@
 
     @Override
     public void getAllKeys(Consumer<Result<List<String>>> consumer) {
-        threadUtils.checkMainThread();
+        mThreadUtils.checkMainThread();
         consumer.accept(getAllKeys());
     }
 
     @Override
     public Result<List<String>> getAllKeys() {
-        String[] filenames = contentDir.list();
+        String[] filenames = mContentDir.list();
         if (filenames != null) {
             return Result.success(Arrays.asList(filenames));
         } else {
@@ -178,11 +178,11 @@
     }
 
     private boolean deleteAll() {
-        threadUtils.checkNotMainThread();
+        mThreadUtils.checkNotMainThread();
 
         boolean success = true;
 
-        File[] files = contentDir.listFiles();
+        File[] files = mContentDir.listFiles();
         if (files != null) {
             // Delete all files in the content directory
             for (File file : files) {
@@ -193,13 +193,13 @@
                 }
             }
         }
-        return contentDir.delete() && success;
+        return mContentDir.delete() && success;
     }
 
     private boolean deleteByPrefix(DeleteByPrefix operation) {
-        threadUtils.checkNotMainThread();
+        mThreadUtils.checkNotMainThread();
 
-        File[] files = contentDir.listFiles();
+        File[] files = mContentDir.listFiles();
 
         if (files != null) {
             for (File file : files) {
@@ -218,9 +218,9 @@
     }
 
     private boolean delete(Delete operation) {
-        threadUtils.checkNotMainThread();
+        mThreadUtils.checkNotMainThread();
 
-        File file = new File(contentDir, operation.getKey());
+        File file = new File(mContentDir, operation.getKey());
         boolean result = file.delete();
         if (!result) {
             Logger.e(TAG, "Error deleting key %s", operation.getKey());
@@ -229,9 +229,9 @@
     }
 
     private boolean upsert(Upsert operation) {
-        threadUtils.checkNotMainThread();
+        mThreadUtils.checkNotMainThread();
 
-        File file = new File(contentDir, operation.getKey());
+        File file = new File(mContentDir, operation.getKey());
         try (FileOutputStream fos = new FileOutputStream(file)) {
             fos.write(operation.getValue());
             return true;
@@ -243,13 +243,13 @@
     }
 
     private void initializeContentDir() {
-        threadUtils.checkNotMainThread();
+        mThreadUtils.checkNotMainThread();
 
-        if (contentDir == null) {
-            contentDir = context.getDir(CONTENT_DIR, Context.MODE_PRIVATE);
+        if (mContentDir == null) {
+            mContentDir = mContext.getDir(CONTENT_DIR, Context.MODE_PRIVATE);
         }
-        if (!contentDir.exists()) {
-            contentDir.mkdir();
+        if (!mContentDir.exists()) {
+            mContentDir.mkdir();
         }
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/hostimpl/storage/PersistentJournalStorage.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/hostimpl/storage/PersistentJournalStorage.java
index 57935ed1..237e09e 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/hostimpl/storage/PersistentJournalStorage.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/hostimpl/storage/PersistentJournalStorage.java
@@ -61,35 +61,36 @@
     private static final String ASTERISK = "_ATK_";
     private static final int MAX_BYTE_SIZE = 1000000;
 
-    private final Context context;
-    private final ThreadUtils threadUtils;
-    private final Executor executor;
-    /*@Nullable*/ private final String persistenceDir;
-    private File journalDir;
+    private final Context mContext;
+    private final ThreadUtils mThreadUtils;
+    private final Executor mExecutor;
+    /*@Nullable*/ private final String mPersistenceDir;
+    private File mJournalDir;
 
     /**
      * The schema of existing content. If this does not match {@code SCHEMA_VERSION}, all existing
      * content will be wiped so there are no version mismatches where data cannot be read / written
      * correctly.
      */
-    private int existingSchema;
+    private int mExistingSchema;
 
     public PersistentJournalStorage(Context context, Executor executorService,
             ThreadUtils threadUtils,
             /*@Nullable*/ String persistenceDir) {
-        this.context = context;
-        this.executor = executorService;
-        this.threadUtils = threadUtils;
+        this.mContext = context;
+        this.mExecutor = executorService;
+        this.mThreadUtils = threadUtils;
         // TODO: See https://goto.google.com/tiktok-conformance-violations/SHARED_PREFS
-        this.existingSchema = context.getSharedPreferences(SHARED_PREFERENCES, Context.MODE_PRIVATE)
-                                      .getInt(SCHEMA_KEY, 0);
-        this.persistenceDir = persistenceDir;
+        this.mExistingSchema =
+                context.getSharedPreferences(SHARED_PREFERENCES, Context.MODE_PRIVATE)
+                        .getInt(SCHEMA_KEY, 0);
+        this.mPersistenceDir = persistenceDir;
     }
 
     @Override
     public void read(String journalName, Consumer<Result<List<byte[]>>> consumer) {
-        threadUtils.checkMainThread();
-        executor.execute(() -> consumer.accept(read(journalName)));
+        mThreadUtils.checkMainThread();
+        mExecutor.execute(() -> consumer.accept(read(journalName)));
     }
 
     @Override
@@ -98,7 +99,7 @@
 
         String sanitizedJournalName = sanitize(journalName);
         if (!sanitizedJournalName.isEmpty()) {
-            File journal = new File(journalDir, sanitizedJournalName);
+            File journal = new File(mJournalDir, sanitizedJournalName);
             try {
                 return Result.success(getJournalContents(journal));
             } catch (IOException e) {
@@ -110,7 +111,7 @@
     }
 
     private List<byte[]> getJournalContents(File journal) throws IOException {
-        threadUtils.checkNotMainThread();
+        mThreadUtils.checkNotMainThread();
 
         List<byte[]> journalContents = new ArrayList<>();
         if (journal.exists()) {
@@ -148,8 +149,8 @@
 
     @Override
     public void commit(JournalMutation mutation, Consumer<CommitResult> consumer) {
-        threadUtils.checkMainThread();
-        executor.execute(() -> consumer.accept(commit(mutation)));
+        mThreadUtils.checkMainThread();
+        mExecutor.execute(() -> consumer.accept(commit(mutation)));
     }
 
     @Override
@@ -158,7 +159,7 @@
 
         String sanitizedJournalName = sanitize(mutation.getJournalName());
         if (!sanitizedJournalName.isEmpty()) {
-            File journal = new File(journalDir, sanitizedJournalName);
+            File journal = new File(mJournalDir, sanitizedJournalName);
 
             for (JournalOperation operation : mutation.getOperations()) {
                 if (operation.getType() == APPEND) {
@@ -185,9 +186,9 @@
 
     @Override
     public void deleteAll(Consumer<CommitResult> consumer) {
-        threadUtils.checkMainThread();
+        mThreadUtils.checkMainThread();
 
-        executor.execute(() -> consumer.accept(deleteAllInitialized()));
+        mExecutor.execute(() -> consumer.accept(deleteAllInitialized()));
     }
 
     @Override
@@ -199,7 +200,7 @@
     private CommitResult deleteAllInitialized() {
         boolean success = true;
 
-        File[] files = journalDir.listFiles();
+        File[] files = mJournalDir.listFiles();
         if (files != null) {
             // Delete all files in the journal directory
             for (File file : files) {
@@ -210,12 +211,12 @@
                 }
             }
         }
-        success &= journalDir.delete();
+        success &= mJournalDir.delete();
         return success ? CommitResult.SUCCESS : CommitResult.FAILURE;
     }
 
     private boolean delete(File journal) {
-        threadUtils.checkNotMainThread();
+        mThreadUtils.checkNotMainThread();
 
         if (!journal.exists()) {
             // If the file doesn't exist, let's call it deleted.
@@ -229,7 +230,7 @@
     }
 
     private boolean copy(Copy operation, File journal) {
-        threadUtils.checkNotMainThread();
+        mThreadUtils.checkNotMainThread();
 
         try {
             if (!journal.exists()) {
@@ -256,7 +257,7 @@
         InputStream inputStream = null;
         OutputStream outputStream = null;
         try {
-            File destination = new File(journalDir, destinationFileName);
+            File destination = new File(mJournalDir, destinationFileName);
             inputStream = new FileInputStream(journal);
             outputStream = new FileOutputStream(destination);
             byte[] bytes = new byte[512];
@@ -275,7 +276,7 @@
     }
 
     private boolean append(Append operation, File journal) {
-        threadUtils.checkNotMainThread();
+        mThreadUtils.checkNotMainThread();
 
         if (!journal.exists()) {
             try {
@@ -308,8 +309,8 @@
 
     @Override
     public void exists(String journalName, Consumer<Result<Boolean>> consumer) {
-        threadUtils.checkMainThread();
-        executor.execute(() -> consumer.accept(exists(journalName)));
+        mThreadUtils.checkMainThread();
+        mExecutor.execute(() -> consumer.accept(exists(journalName)));
     }
 
     @Override
@@ -318,7 +319,7 @@
 
         String sanitizedJournalName = sanitize(journalName);
         if (!sanitizedJournalName.isEmpty()) {
-            File journal = new File(journalDir, sanitizedJournalName);
+            File journal = new File(mJournalDir, sanitizedJournalName);
             return Result.success(journal.exists());
         }
         return Result.failure();
@@ -326,15 +327,15 @@
 
     @Override
     public void getAllJournals(Consumer<Result<List<String>>> consumer) {
-        threadUtils.checkMainThread();
-        executor.execute(() -> consumer.accept(getAllJournals()));
+        mThreadUtils.checkMainThread();
+        mExecutor.execute(() -> consumer.accept(getAllJournals()));
     }
 
     @Override
     public Result<List<String>> getAllJournals() {
         initializeJournalDir();
 
-        File[] files = journalDir.listFiles();
+        File[] files = mJournalDir.listFiles();
         List<String> journals = new ArrayList<>();
         if (files != null) {
             for (File file : files) {
@@ -349,9 +350,9 @@
 
     private void initializeJournalDir() {
         // if we've set the journalDir then just verify that it exists
-        if (journalDir != null) {
-            if (!journalDir.exists()) {
-                if (!journalDir.mkdir()) {
+        if (mJournalDir != null) {
+            if (!mJournalDir.exists()) {
+                if (!mJournalDir.mkdir()) {
                     Logger.w(TAG, "Jardin journal directory already exists");
                 }
             }
@@ -359,30 +360,30 @@
         }
 
         // Create the root directory persistent files
-        if (persistenceDir != null) {
-            File persistenceRoot = context.getDir(persistenceDir, Context.MODE_PRIVATE);
+        if (mPersistenceDir != null) {
+            File persistenceRoot = mContext.getDir(mPersistenceDir, Context.MODE_PRIVATE);
             if (!persistenceRoot.exists()) {
                 if (!persistenceRoot.mkdir()) {
                     Logger.w(TAG, "persistenceDir directory already exists");
                 }
             }
-            journalDir = new File(persistenceRoot, JOURNAL_DIR);
+            mJournalDir = new File(persistenceRoot, JOURNAL_DIR);
         } else {
-            journalDir = context.getDir(JOURNAL_DIR, Context.MODE_PRIVATE);
+            mJournalDir = mContext.getDir(JOURNAL_DIR, Context.MODE_PRIVATE);
         }
-        if (existingSchema != SCHEMA_VERSION) {
+        if (mExistingSchema != SCHEMA_VERSION) {
             // For schema mismatch, delete everything.
             CommitResult result = deleteAllInitialized();
             if (result == CommitResult.SUCCESS
-                    && context.getSharedPreferences(SHARED_PREFERENCES, Context.MODE_PRIVATE)
+                    && mContext.getSharedPreferences(SHARED_PREFERENCES, Context.MODE_PRIVATE)
                                .edit()
                                .putInt(SCHEMA_KEY, SCHEMA_VERSION)
                                .commit()) {
-                existingSchema = SCHEMA_VERSION;
+                mExistingSchema = SCHEMA_VERSION;
             }
         }
-        if (!journalDir.exists()) {
-            if (!journalDir.mkdir()) {
+        if (!mJournalDir.exists()) {
+            if (!mJournalDir.mkdir()) {
                 Logger.w(TAG, "journal directory already exists");
             }
         }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/hostimpl/storage/testing/InMemoryContentStorage.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/hostimpl/storage/testing/InMemoryContentStorage.java
index 4a81804..89702ca 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/hostimpl/storage/testing/InMemoryContentStorage.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/hostimpl/storage/testing/InMemoryContentStorage.java
@@ -32,20 +32,20 @@
 public final class InMemoryContentStorage implements ContentStorageDirect, Dumpable {
     private static final String TAG = "InMemoryContentStorage";
 
-    private final Map<String, byte[]> store = new HashMap<>();
+    private final Map<String, byte[]> mStore = new HashMap<>();
 
-    private int getCount;
-    private int getAllCount;
-    private int insertCount;
-    private int updateCount;
+    private int mGetCount;
+    private int mGetAllCount;
+    private int mInsertCount;
+    private int mUpdateCount;
 
     @Override
     public Result<Map<String, byte[]>> get(List<String> keys) {
-        getCount++;
+        mGetCount++;
 
         Map<String, byte[]> valueMap = new HashMap<>(keys.size());
         for (String key : keys) {
-            byte[] value = store.get(key);
+            byte[] value = mStore.get(key);
             if (value == null || value.length == 0) {
                 Logger.w(TAG, "Didn't find value for %s, not adding to map", key);
             } else {
@@ -57,9 +57,9 @@
 
     @Override
     public Result<Map<String, byte[]>> getAll(String prefix) {
-        getAllCount++;
+        mGetAllCount++;
         Map<String, byte[]> results = new HashMap<>();
-        for (Entry<String, byte[]> entry : store.entrySet()) {
+        for (Entry<String, byte[]> entry : mStore.entrySet()) {
             if (entry.getKey().startsWith(prefix)) {
                 results.put(entry.getKey(), entry.getValue());
             }
@@ -98,27 +98,27 @@
 
     @Override
     public Result<List<String>> getAllKeys() {
-        return Result.success(new ArrayList<>(store.keySet()));
+        return Result.success(new ArrayList<>(mStore.keySet()));
     }
 
     private boolean deleteAll() {
-        store.clear();
+        mStore.clear();
         return true;
     }
 
     private boolean deleteByPrefix(DeleteByPrefix operation) {
         List<String> keysToRemove = new ArrayList<>();
-        for (String key : store.keySet()) {
+        for (String key : mStore.keySet()) {
             if (key.startsWith(operation.getPrefix())) {
                 keysToRemove.add(key);
             }
         }
-        store.keySet().removeAll(keysToRemove);
+        mStore.keySet().removeAll(keysToRemove);
         return true;
     }
 
     private boolean delete(Delete operation) {
-        store.remove(operation.getKey());
+        mStore.remove(operation.getKey());
         return true;
     }
 
@@ -138,11 +138,11 @@
             Logger.e(TAG, "Invalid ContentMutation: empty value");
             return false;
         }
-        byte[] currentValue = store.put(key, value);
+        byte[] currentValue = mStore.put(key, value);
         if (currentValue == null) {
-            insertCount++;
+            mInsertCount++;
         } else {
-            updateCount++;
+            mUpdateCount++;
         }
         return true;
     }
@@ -150,10 +150,10 @@
     @Override
     public void dump(Dumper dumper) {
         dumper.title(TAG);
-        dumper.forKey("contentItems").value(store.size());
-        dumper.forKey("getCount").value(getCount);
-        dumper.forKey("getAllCount").value(getAllCount).compactPrevious();
-        dumper.forKey("insertCount").value(insertCount).compactPrevious();
-        dumper.forKey("updateCount").value(updateCount).compactPrevious();
+        dumper.forKey("contentItems").value(mStore.size());
+        dumper.forKey("getCount").value(mGetCount);
+        dumper.forKey("getAllCount").value(mGetAllCount).compactPrevious();
+        dumper.forKey("insertCount").value(mInsertCount).compactPrevious();
+        dumper.forKey("updateCount").value(mUpdateCount).compactPrevious();
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/hostimpl/storage/testing/InMemoryJournalStorage.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/hostimpl/storage/testing/InMemoryJournalStorage.java
index e144023..0139034 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/hostimpl/storage/testing/InMemoryJournalStorage.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/hostimpl/storage/testing/InMemoryJournalStorage.java
@@ -30,20 +30,20 @@
 public final class InMemoryJournalStorage implements JournalStorageDirect, Dumpable {
     private static final String TAG = "InMemoryJournalStorage";
 
-    private final Map<String, List<byte[]>> journals;
-    private int readCount;
-    private int appendCount;
-    private int copyCount;
-    private int deleteCount;
+    private final Map<String, List<byte[]>> mJournals;
+    private int mReadCount;
+    private int mAppendCount;
+    private int mCopyCount;
+    private int mDeleteCount;
 
     public InMemoryJournalStorage() {
-        journals = new HashMap<>();
+        mJournals = new HashMap<>();
     }
 
     @Override
     public Result<List<byte[]>> read(String journalName) {
-        readCount++;
-        List<byte[]> journal = journals.get(journalName);
+        mReadCount++;
+        List<byte[]> journal = mJournals.get(journalName);
         if (journal == null) {
             journal = new ArrayList<>();
         }
@@ -77,65 +77,65 @@
 
     @Override
     public Result<Boolean> exists(String journalName) {
-        return Result.success(journals.containsKey(journalName));
+        return Result.success(mJournals.containsKey(journalName));
     }
 
     @Override
     public Result<List<String>> getAllJournals() {
-        return Result.success(new ArrayList<>(journals.keySet()));
+        return Result.success(new ArrayList<>(mJournals.keySet()));
     }
 
     @Override
     public CommitResult deleteAll() {
-        journals.clear();
+        mJournals.clear();
         return CommitResult.SUCCESS;
     }
 
     private boolean append(byte[] value, String journalName) {
-        List<byte[]> journal = journals.get(journalName);
+        List<byte[]> journal = mJournals.get(journalName);
         if (value == null) {
             Logger.e(TAG, "Journal not found: %s", journalName);
             return false;
         }
         if (journal == null) {
             journal = new ArrayList<>();
-            journals.put(journalName, journal);
+            mJournals.put(journalName, journal);
         }
-        appendCount++;
+        mAppendCount++;
         journal.add(value);
         return true;
     }
 
     private boolean copy(String fromJournalName, String toJournalName) {
-        copyCount++;
-        List<byte[]> toJournal = journals.get(toJournalName);
+        mCopyCount++;
+        List<byte[]> toJournal = mJournals.get(toJournalName);
         if (toJournal != null) {
             Logger.e(TAG, "Copy destination journal already present: %s", toJournalName);
             return false;
         }
-        List<byte[]> journal = journals.get(fromJournalName);
+        List<byte[]> journal = mJournals.get(fromJournalName);
         if (journal != null) {
             // TODO: Compact before copying?
-            journals.put(toJournalName, new ArrayList<>(journal));
+            mJournals.put(toJournalName, new ArrayList<>(journal));
         }
         return true;
     }
 
     private boolean delete(String journalName) {
-        deleteCount++;
-        journals.remove(journalName);
+        mDeleteCount++;
+        mJournals.remove(journalName);
         return true;
     }
 
     @Override
     public void dump(Dumper dumper) {
         dumper.title(TAG);
-        dumper.forKey("readCount").value(readCount);
-        dumper.forKey("appendCount").value(appendCount).compactPrevious();
-        dumper.forKey("copyCount").value(copyCount).compactPrevious();
-        dumper.forKey("deleteCount").value(deleteCount).compactPrevious();
-        dumper.forKey("sessions").value(journals.size());
-        for (Entry<String, List<byte[]>> entry : journals.entrySet()) {
+        dumper.forKey("readCount").value(mReadCount);
+        dumper.forKey("appendCount").value(mAppendCount).compactPrevious();
+        dumper.forKey("copyCount").value(mCopyCount).compactPrevious();
+        dumper.forKey("deleteCount").value(mDeleteCount).compactPrevious();
+        dumper.forKey("sessions").value(mJournals.size());
+        for (Entry<String, List<byte[]>> entry : mJournals.entrySet()) {
             Dumper childDumper = dumper.getChildDumper();
             childDumper.title("Session");
             childDumper.forKey("name").value(entry.getKey());
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/mocknetworkclient/MockServerNetworkClient.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/mocknetworkclient/MockServerNetworkClient.java
index f5963ee..6e99c468 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/mocknetworkclient/MockServerNetworkClient.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/mocknetworkclient/MockServerNetworkClient.java
@@ -34,21 +34,21 @@
 public final class MockServerNetworkClient implements NetworkClient {
     private static final String TAG = "MockServerNetworkClient";
 
-    private final Context context;
-    private final Response initialResponse;
-    private final List<ConditionalResponse> conditionalResponses;
-    private final ExtensionRegistryLite extensionRegistry;
-    private final long responseDelay;
+    private final Context mContext;
+    private final Response mInitialResponse;
+    private final List<ConditionalResponse> mConditionalResponses;
+    private final ExtensionRegistryLite mExtensionRegistry;
+    private final long mResponseDelay;
 
     public MockServerNetworkClient(
             Context context, MockServer mockServer, long responseDelayMillis) {
-        this.context = context;
-        initialResponse = mockServer.getInitialResponse();
-        conditionalResponses = mockServer.getConditionalResponsesList();
+        this.mContext = context;
+        mInitialResponse = mockServer.getInitialResponse();
+        mConditionalResponses = mockServer.getConditionalResponsesList();
 
-        extensionRegistry = ExtensionRegistryLite.newInstance();
-        extensionRegistry.add(FeedRequest.feedRequest);
-        responseDelay = responseDelayMillis;
+        mExtensionRegistry = ExtensionRegistryLite.newInstance();
+        mExtensionRegistry.add(FeedRequest.feedRequest);
+        mResponseDelay = responseDelayMillis;
     }
 
     @Override
@@ -64,7 +64,7 @@
                     ? request.getExtension(FeedRequest.feedRequest).getFeedQuery().getPageToken()
                     : null;
             if (requestToken != null) {
-                for (ConditionalResponse response : conditionalResponses) {
+                for (ConditionalResponse response : mConditionalResponses) {
                     if (!response.hasContinuationToken()) {
                         Logger.w(TAG, "Conditional response without a token");
                         continue;
@@ -75,7 +75,7 @@
                     }
                 }
             }
-            delayedAccept(createHttpResponse(initialResponse), responseConsumer);
+            delayedAccept(createHttpResponse(mInitialResponse), responseConsumer);
         } catch (IOException e) {
             // TODO : handle errors here
             Logger.e(TAG, e.getMessage());
@@ -84,18 +84,18 @@
     }
 
     private boolean isAirplaneModeOn() {
-        return Settings.System.getInt(context.getContentResolver(), Global.AIRPLANE_MODE_ON, 0)
+        return Settings.System.getInt(mContext.getContentResolver(), Global.AIRPLANE_MODE_ON, 0)
                 != 0;
     }
 
     private void delayedAccept(HttpResponse httpResponse, Consumer<HttpResponse> responseConsumer) {
-        if (responseDelay <= 0) {
+        if (mResponseDelay <= 0) {
             responseConsumer.accept(httpResponse);
             return;
         }
 
         new Handler(Looper.getMainLooper())
-                .postDelayed(() -> responseConsumer.accept(httpResponse), responseDelay);
+                .postDelayed(() -> responseConsumer.accept(httpResponse), mResponseDelay);
     }
 
     // TODO Fix nullness violation: incompatible types in argument.
@@ -112,7 +112,7 @@
         } else {
             rawRequest = httpRequest.getBody();
         }
-        return Request.parseFrom(rawRequest, extensionRegistry);
+        return Request.parseFrom(rawRequest, mExtensionRegistry);
     }
 
     @Override
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/AdapterFactory.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/AdapterFactory.java
index 9560c03..e03131b 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/AdapterFactory.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/AdapterFactory.java
@@ -22,11 +22,11 @@
     private static final int DEFAULT_POOL_SIZE = 100;
     private static final int DEFAULT_NUM_POOLS = 10;
 
-    private final Context context;
-    private final AdapterParameters parameters;
-    private final AdapterKeySupplier<A, M> keySupplier;
-    private final Statistics statistics;
-    private final RecyclerPool<A> recyclingPool;
+    private final Context mContext;
+    private final AdapterParameters mParameters;
+    private final AdapterKeySupplier<A, M> mKeySupplier;
+    private final Statistics mStatistics;
+    private final RecyclerPool<A> mRecyclingPool;
 
     /** Provides Adapter class level details to the factory. */
     interface AdapterKeySupplier<A extends ElementAdapter<?, M>, M> {
@@ -59,64 +59,64 @@
     @SuppressWarnings("nullness")
     AdapterFactory(
             Context context, AdapterParameters parameters, AdapterKeySupplier<A, M> keySupplier) {
-        this.context = context;
-        this.parameters = parameters;
-        this.keySupplier = keySupplier;
-        this.statistics = new Statistics(keySupplier.getAdapterTag());
+        this.mContext = context;
+        this.mParameters = parameters;
+        this.mKeySupplier = keySupplier;
+        this.mStatistics = new Statistics(keySupplier.getAdapterTag());
         if (keySupplier instanceof SingletonKeySupplier) {
-            recyclingPool = new SingleKeyRecyclerPool<>(
+            mRecyclingPool = new SingleKeyRecyclerPool<>(
                     SingletonKeySupplier.SINGLETON_KEY, DEFAULT_POOL_SIZE);
         } else {
-            recyclingPool = new KeyedRecyclerPool<>(DEFAULT_NUM_POOLS, DEFAULT_POOL_SIZE);
+            mRecyclingPool = new KeyedRecyclerPool<>(DEFAULT_NUM_POOLS, DEFAULT_POOL_SIZE);
         }
     }
 
     /** Returns an adapter suitable for binding the given model. */
     public A get(M model, FrameContext frameContext) {
-        statistics.getCalls++;
-        A a = recyclingPool.get(keySupplier.getKey(frameContext, model));
+        mStatistics.mGetCalls++;
+        A a = mRecyclingPool.get(mKeySupplier.getKey(frameContext, model));
         if (a == null) {
-            a = keySupplier.getAdapter(context, parameters);
-            statistics.adapterCreation++;
+            a = mKeySupplier.getAdapter(mContext, mParameters);
+            mStatistics.mAdapterCreation++;
         } else {
-            statistics.poolHit++;
+            mStatistics.mPoolHit++;
         }
         return a;
     }
 
     /** Release the Adapter, releases the model and will recycle the Adapter */
     public void release(A a) {
-        statistics.releaseCalls++;
+        mStatistics.mReleaseCalls++;
         a.releaseAdapter();
         RecyclerKey key = a.getKey();
         if (key != null) {
-            recyclingPool.put(key, a);
+            mRecyclingPool.put(key, a);
         }
     }
 
     public void purgeRecyclerPool() {
-        recyclingPool.clear();
+        mRecyclingPool.clear();
     }
 
     /**
      * Basic statistics about hits, creations, etc. used to track how get/release are being used.
      */
     static class Statistics {
-        final String factoryName;
-        int adapterCreation;
-        int poolHit;
-        int releaseCalls;
-        int getCalls;
+        final String mFactoryName;
+        int mAdapterCreation;
+        int mPoolHit;
+        int mReleaseCalls;
+        int mGetCalls;
 
         public Statistics(String factoryName) {
-            this.factoryName = factoryName;
+            this.mFactoryName = factoryName;
         }
 
         @Override
         public String toString() {
             // String used to show statistics during debugging in Android Studio.
-            return "Stats: " + factoryName + ", Hits:" + poolHit + ", creations " + adapterCreation
-                    + ", Release: " + releaseCalls;
+            return "Stats: " + mFactoryName + ", Hits:" + mPoolHit + ", creations "
+                    + mAdapterCreation + ", Release: " + mReleaseCalls;
         }
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/AdapterParameters.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/AdapterParameters.java
index 240ac28..6d0eb5b 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/AdapterParameters.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/AdapterParameters.java
@@ -25,18 +25,18 @@
     private static final int DEFAULT_TEMPLATE_POOL_SIZE = 100;
     private static final int DEFAULT_NUM_TEMPLATE_POOLS = 30;
 
-    final Context context;
-    final Supplier</*@Nullable*/ ViewGroup> parentViewSupplier;
-    final HostProviders hostProviders;
-    final ParameterizedTextEvaluator templatedStringEvaluator;
-    final ElementAdapterFactory elementAdapterFactory;
-    final TemplateBinder templateBinder;
-    final StyleProvider defaultStyleProvider;
-    final Clock clock;
-    final PietStylesHelperFactory pietStylesHelperFactory;
-    final RoundedCornerMaskCache roundedCornerMaskCache;
-    final boolean allowLegacyRoundedCornerImpl;
-    final boolean allowOutlineRoundedCornerImpl;
+    final Context mContext;
+    final Supplier</*@Nullable*/ ViewGroup> mParentViewSupplier;
+    final HostProviders mHostProviders;
+    final ParameterizedTextEvaluator mTemplatedStringEvaluator;
+    final ElementAdapterFactory mElementAdapterFactory;
+    final TemplateBinder mTemplateBinder;
+    final StyleProvider mDefaultStyleProvider;
+    final Clock mClock;
+    final PietStylesHelperFactory mPietStylesHelperFactory;
+    final RoundedCornerMaskCache mRoundedCornerMaskCache;
+    final boolean mAllowLegacyRoundedCornerImpl;
+    final boolean mAllowOutlineRoundedCornerImpl;
 
     // Doesn't like passing "this" to the new ElementAdapterFactory; however, nothing in the
     // factory's construction will reference the elementAdapterFactory member of this, so should be
@@ -45,25 +45,25 @@
     public AdapterParameters(Context context, Supplier</*@Nullable*/ ViewGroup> parentViewSupplier,
             HostProviders hostProviders, Clock clock, boolean allowLegacyRoundedCornerImpl,
             boolean allowOutlineRoundedCornerImpl) {
-        this.context = context;
-        this.parentViewSupplier = parentViewSupplier;
-        this.hostProviders = hostProviders;
-        this.clock = clock;
+        this.mContext = context;
+        this.mParentViewSupplier = parentViewSupplier;
+        this.mHostProviders = hostProviders;
+        this.mClock = clock;
 
-        templatedStringEvaluator = new ParameterizedTextEvaluator(clock);
+        mTemplatedStringEvaluator = new ParameterizedTextEvaluator(clock);
 
         KeyedRecyclerPool<ElementAdapter<? extends View, ?>> templateRecyclerPool =
                 new KeyedRecyclerPool<>(DEFAULT_NUM_TEMPLATE_POOLS, DEFAULT_TEMPLATE_POOL_SIZE);
-        elementAdapterFactory = new ElementAdapterFactory(context, this, templateRecyclerPool);
-        templateBinder = new TemplateBinder(templateRecyclerPool, elementAdapterFactory);
+        mElementAdapterFactory = new ElementAdapterFactory(context, this, templateRecyclerPool);
+        mTemplateBinder = new TemplateBinder(templateRecyclerPool, mElementAdapterFactory);
 
-        this.defaultStyleProvider = new StyleProvider(hostProviders.getAssetProvider());
+        this.mDefaultStyleProvider = new StyleProvider(hostProviders.getAssetProvider());
 
-        this.pietStylesHelperFactory = new PietStylesHelperFactory();
-        this.roundedCornerMaskCache = new RoundedCornerMaskCache();
+        this.mPietStylesHelperFactory = new PietStylesHelperFactory();
+        this.mRoundedCornerMaskCache = new RoundedCornerMaskCache();
 
-        this.allowLegacyRoundedCornerImpl = allowLegacyRoundedCornerImpl;
-        this.allowOutlineRoundedCornerImpl = allowOutlineRoundedCornerImpl;
+        this.mAllowLegacyRoundedCornerImpl = allowLegacyRoundedCornerImpl;
+        this.mAllowOutlineRoundedCornerImpl = allowOutlineRoundedCornerImpl;
     }
 
     /** Testing-only constructor for mocking the internally-constructed objects. */
@@ -84,18 +84,18 @@
             ElementAdapterFactory elementAdapterFactory, TemplateBinder templateBinder, Clock clock,
             PietStylesHelperFactory pietStylesHelperFactory, RoundedCornerMaskCache maskCache,
             boolean allowLegacyRoundedCornerImpl, boolean allowOutlineRoundedCornerImpl) {
-        this.context = context;
-        this.parentViewSupplier = parentViewSupplier;
-        this.hostProviders = hostProviders;
+        this.mContext = context;
+        this.mParentViewSupplier = parentViewSupplier;
+        this.mHostProviders = hostProviders;
 
-        this.templatedStringEvaluator = templatedStringEvaluator;
-        this.elementAdapterFactory = elementAdapterFactory;
-        this.templateBinder = templateBinder;
-        this.defaultStyleProvider = new StyleProvider(hostProviders.getAssetProvider());
-        this.clock = clock;
-        this.pietStylesHelperFactory = pietStylesHelperFactory;
-        this.roundedCornerMaskCache = maskCache;
-        this.allowLegacyRoundedCornerImpl = allowLegacyRoundedCornerImpl;
-        this.allowOutlineRoundedCornerImpl = allowOutlineRoundedCornerImpl;
+        this.mTemplatedStringEvaluator = templatedStringEvaluator;
+        this.mElementAdapterFactory = elementAdapterFactory;
+        this.mTemplateBinder = templateBinder;
+        this.mDefaultStyleProvider = new StyleProvider(hostProviders.getAssetProvider());
+        this.mClock = clock;
+        this.mPietStylesHelperFactory = pietStylesHelperFactory;
+        this.mRoundedCornerMaskCache = maskCache;
+        this.mAllowLegacyRoundedCornerImpl = allowLegacyRoundedCornerImpl;
+        this.mAllowOutlineRoundedCornerImpl = allowOutlineRoundedCornerImpl;
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/ChunkedTextElementAdapter.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/ChunkedTextElementAdapter.java
index 5ef4a09..4425926 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/ChunkedTextElementAdapter.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/ChunkedTextElementAdapter.java
@@ -62,7 +62,7 @@
     @VisibleForTesting
     static final int SINGLE_LAYER_ID = 0;
 
-    private final Set<ImageSpanDrawableCallback> loadingImages = new HashSet<>();
+    private final Set<ImageSpanDrawableCallback> mLoadingImages = new HashSet<>();
 
     ChunkedTextElementAdapter(Context context, AdapterParameters parameters) {
         super(context, parameters);
@@ -184,8 +184,8 @@
             addMargin(spannable, chunkStyle.getMargins().getStart());
         }
 
-        CharSequence evaluatedText = getParameters().templatedStringEvaluator.evaluate(
-                getParameters().hostProviders.getAssetProvider(), parameterizedText);
+        CharSequence evaluatedText = getParameters().mTemplatedStringEvaluator.evaluate(
+                getParameters().mHostProviders.getAssetProvider(), parameterizedText);
         spannable.append(evaluatedText);
         if (chunkStyle.hasColor()) {
             spannable.setSpan(new ForegroundColorSpan(chunkStyle.getColor()), start,
@@ -276,19 +276,19 @@
         Integer overlayColor = chunkStyle.hasColor() ? chunkStyle.getColor() : null;
         ImageSpanDrawableCallback imageSpanLoader =
                 new ImageSpanDrawableCallback(wrapper, chunkStyle, overlayColor, textView);
-        loadingImages.add(imageSpanLoader);
+        mLoadingImages.add(imageSpanLoader);
         int styleWidth = styleToImageDim(chunkStyle.getWidthSpecPx(getContext()));
         int styleHeight = styleToImageDim(chunkStyle.getHeightSpecPx(getContext()));
-        getParameters().hostProviders.getAssetProvider().getImage(
+        getParameters().mHostProviders.getAssetProvider().getImage(
                 image, styleWidth, styleHeight, imageSpanLoader);
     }
 
     @Override
     void onUnbindModel() {
-        for (ImageSpanDrawableCallback imageLoader : loadingImages) {
+        for (ImageSpanDrawableCallback imageLoader : mLoadingImages) {
             imageLoader.cancelCallback();
         }
-        loadingImages.clear();
+        mLoadingImages.clear();
         super.onUnbindModel();
     }
 
@@ -340,21 +340,21 @@
     }
 
     static class ActionsClickableSpan extends ClickableSpan {
-        private final Action action;
-        private final ActionHandler handler;
-        private final Frame frame;
+        private final Action mAction;
+        private final ActionHandler mHandler;
+        private final Frame mFrame;
 
         ActionsClickableSpan(Action action, ActionHandler handler, Frame frame) {
-            this.action = action;
-            this.handler = handler;
-            this.frame = frame;
+            this.mAction = action;
+            this.mHandler = handler;
+            this.mFrame = frame;
         }
 
         @Override
         public void onClick(View widget) {
             // TODO: Pass VE information with the action.
-            handler.handleAction(
-                    action, ActionType.CLICK, frame, widget, LogData.getDefaultInstance());
+            mHandler.handleAction(
+                    mAction, ActionType.CLICK, mFrame, widget, LogData.getDefaultInstance());
         }
 
         @Override
@@ -371,10 +371,10 @@
      * will still be broken in that case.
      */
     static class ChunkedTextTouchListener implements View.OnTouchListener {
-        private final SpannableStringBuilder spannable;
+        private final SpannableStringBuilder mSpannable;
 
         ChunkedTextTouchListener(SpannableStringBuilder spannable) {
-            this.spannable = spannable;
+            this.mSpannable = spannable;
         }
 
         @Override
@@ -396,7 +396,7 @@
                 int line = layout.getLineForVertical(y);
                 int off = layout.getOffsetForHorizontal(line, x);
 
-                ClickableSpan[] links = spannable.getSpans(off, off, ClickableSpan.class);
+                ClickableSpan[] links = mSpannable.getSpans(off, off, ClickableSpan.class);
 
                 if (links.length != 0) {
                     if (action == MotionEvent.ACTION_UP) {
@@ -411,35 +411,35 @@
 
     @VisibleForTesting
     class ImageSpanDrawableCallback implements Consumer</*@Nullable*/ Drawable> {
-        private final LayerDrawable wrapper;
-        private final StyleProvider imageStyle;
-        /*@Nullable*/ private final Integer overlayColor;
-        private final TextView textView;
-        private boolean cancelled;
+        private final LayerDrawable mWrapper;
+        private final StyleProvider mImageStyle;
+        /*@Nullable*/ private final Integer mOverlayColor;
+        private final TextView mTextView;
+        private boolean mCancelled;
 
         ImageSpanDrawableCallback(LayerDrawable wrapper, StyleProvider imageStyle,
                 /*@Nullable*/ Integer overlayColor, TextView textView) {
-            this.wrapper = wrapper;
-            this.imageStyle = imageStyle;
-            this.overlayColor = overlayColor;
-            this.textView = textView;
+            this.mWrapper = wrapper;
+            this.mImageStyle = imageStyle;
+            this.mOverlayColor = overlayColor;
+            this.mTextView = textView;
         }
 
         @Override
         public void accept(/*@Nullable*/ Drawable imageDrawable) {
-            if (cancelled || imageDrawable == null) {
+            if (mCancelled || imageDrawable == null) {
                 return;
             }
-            Drawable finalDrawable = ViewUtils.applyOverlayColor(imageDrawable, overlayColor);
-            checkState(wrapper.setDrawableByLayerId(SINGLE_LAYER_ID, finalDrawable),
+            Drawable finalDrawable = ViewUtils.applyOverlayColor(imageDrawable, mOverlayColor);
+            checkState(mWrapper.setDrawableByLayerId(SINGLE_LAYER_ID, finalDrawable),
                     "Failed to set drawable on chunked text");
-            setBounds(finalDrawable, imageStyle, textView);
-            textView.invalidate();
-            loadingImages.remove(this);
+            setBounds(finalDrawable, mImageStyle, mTextView);
+            mTextView.invalidate();
+            mLoadingImages.remove(this);
         }
 
         void cancelCallback() {
-            cancelled = true;
+            mCancelled = true;
         }
     }
 
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/CustomElementAdapter.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/CustomElementAdapter.java
index c12fcbdb..6f97fe9 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/CustomElementAdapter.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/CustomElementAdapter.java
@@ -21,7 +21,7 @@
 /** Adapter that manages a custom view created by the host. */
 class CustomElementAdapter extends ElementAdapter<FrameLayout, CustomElement> {
     private static final String TAG = "CustomElementAdapter";
-    CustomElementData boundCustomElementData = CustomElementData.getDefaultInstance();
+    CustomElementData mBoundCustomElementData = CustomElementData.getDefaultInstance();
 
     CustomElementAdapter(Context context, AdapterParameters parameters) {
         super(context, parameters, new FrameLayout(context), KeySupplier.SINGLETON_KEY);
@@ -40,7 +40,7 @@
     void onBindModel(CustomElement customElement, Element baseElement, FrameContext frameContext) {
         switch (customElement.getContentCase()) {
             case CUSTOM_ELEMENT_DATA:
-                boundCustomElementData = customElement.getCustomElementData();
+                mBoundCustomElementData = customElement.getCustomElementData();
                 break;
             case CUSTOM_BINDING:
                 BindingValue binding =
@@ -57,7 +57,7 @@
                                                 binding.getBindingId())));
                     }
                 }
-                boundCustomElementData = binding.getCustomElementData();
+                mBoundCustomElementData = binding.getCustomElementData();
                 break;
             default:
                 Logger.e(TAG,
@@ -67,8 +67,8 @@
                 return;
         }
 
-        View v = getParameters().hostProviders.getCustomElementProvider().createCustomElement(
-                boundCustomElementData);
+        View v = getParameters().mHostProviders.getCustomElementProvider().createCustomElement(
+                mBoundCustomElementData);
         getBaseView().addView(v);
     }
 
@@ -79,8 +79,8 @@
         // that was saved during the last bind should be fine.
         if (baseView != null && baseView.getChildCount() > 0) {
             for (int i = 0; i < baseView.getChildCount(); i++) {
-                getParameters().hostProviders.getCustomElementProvider().releaseCustomView(
-                        baseView.getChildAt(i), boundCustomElementData);
+                getParameters().mHostProviders.getCustomElementProvider().releaseCustomView(
+                        baseView.getChildAt(i), mBoundCustomElementData);
             }
             baseView.removeAllViews();
         }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/DebugLogger.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/DebugLogger.java
index 66ec82e..7421e89 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/DebugLogger.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/DebugLogger.java
@@ -42,17 +42,17 @@
         int WARNING = 2;
     }
 
-    private final SparseArray<List<ErrorCodeAndMessage>> messages;
-    private final SparseIntArray backgroundColors;
+    private final SparseArray<List<ErrorCodeAndMessage>> mMessages;
+    private final SparseIntArray mBackgroundColors;
 
     DebugLogger() {
-        messages = new SparseArray<>();
-        messages.put(MessageType.ERROR, new ArrayList<>());
-        messages.put(MessageType.WARNING, new ArrayList<>());
+        mMessages = new SparseArray<>();
+        mMessages.put(MessageType.ERROR, new ArrayList<>());
+        mMessages.put(MessageType.WARNING, new ArrayList<>());
 
-        backgroundColors = new SparseIntArray();
-        backgroundColors.put(MessageType.ERROR, ERROR_BACKGROUND_COLOR);
-        backgroundColors.put(MessageType.WARNING, WARNING_BACKGROUND_COLOR);
+        mBackgroundColors = new SparseIntArray();
+        mBackgroundColors.put(MessageType.ERROR, ERROR_BACKGROUND_COLOR);
+        mBackgroundColors.put(MessageType.WARNING, WARNING_BACKGROUND_COLOR);
     }
 
     // TODO: Deprecate this version to reduce the use of ERR_UNSPECIFIED.
@@ -61,7 +61,7 @@
     }
 
     void recordMessage(@MessageType int messageType, ErrorCode errorCode, String error) {
-        messages.get(messageType).add(new ErrorCodeAndMessage(errorCode, error));
+        mMessages.get(messageType).add(new ErrorCodeAndMessage(errorCode, error));
     }
 
     /**
@@ -69,7 +69,7 @@
      */
     /*@Nullable*/
     View getReportView(@MessageType int messageType, Context context) {
-        List<ErrorCodeAndMessage> errors = this.messages.get(messageType);
+        List<ErrorCodeAndMessage> errors = this.mMessages.get(messageType);
         if (errors.isEmpty()) {
             return null;
         }
@@ -78,24 +78,24 @@
         LayoutParams layoutParams =
                 new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
         view.setLayoutParams(layoutParams);
-        view.setBackgroundColor(backgroundColors.get(messageType));
+        view.setBackgroundColor(mBackgroundColors.get(messageType));
         view.addView(getDivider(context));
         for (ErrorCodeAndMessage error : errors) {
-            view.addView(getMessageTextView(error.message, context));
+            view.addView(getMessageTextView(error.mMessage, context));
         }
         return view;
     }
 
     @VisibleForTesting
     List<ErrorCodeAndMessage> getMessages(@MessageType int messageType) {
-        return messages.get(messageType);
+        return mMessages.get(messageType);
     }
 
     List<ErrorCode> getErrorCodes() {
         ArrayList<ErrorCode> errorCodes = new ArrayList<>();
-        for (int i = 0; i < messages.size(); i++) {
-            for (ErrorCodeAndMessage errorCodeAndMessage : messages.valueAt(i)) {
-                errorCodes.add(errorCodeAndMessage.errorCode);
+        for (int i = 0; i < mMessages.size(); i++) {
+            for (ErrorCodeAndMessage errorCodeAndMessage : mMessages.valueAt(i)) {
+                errorCodes.add(errorCodeAndMessage.mErrorCode);
             }
         }
         errorCodes.trimToSize();
@@ -124,12 +124,12 @@
 
     /** Simple class to hold an error code and message pair. */
     static class ErrorCodeAndMessage {
-        final ErrorCode errorCode;
-        final String message;
+        final ErrorCode mErrorCode;
+        final String mMessage;
 
         ErrorCodeAndMessage(ErrorCode errorCode, String message) {
-            this.errorCode = errorCode;
-            this.message = message;
+            this.mErrorCode = errorCode;
+            this.mMessage = message;
         }
 
         @Override
@@ -143,16 +143,16 @@
 
             ErrorCodeAndMessage that = (ErrorCodeAndMessage) o;
 
-            if (errorCode != that.errorCode) {
+            if (mErrorCode != that.mErrorCode) {
                 return false;
             }
-            return message.equals(that.message);
+            return mMessage.equals(that.mMessage);
         }
 
         @Override
         public int hashCode() {
-            int result = errorCode.hashCode();
-            result = 31 * result + message.hashCode();
+            int result = mErrorCode.hashCode();
+            result = 31 * result + mMessage.hashCode();
             return result;
         }
     }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/ElementAdapter.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/ElementAdapter.java
index 41abd29..5fd91d6 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/ElementAdapter.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/ElementAdapter.java
@@ -45,55 +45,55 @@
  */
 abstract class ElementAdapter<V extends View, M> {
     private static final String TAG = "ElementAdapter";
-    private final Context context;
-    private final AdapterParameters parameters;
-    private final V view;
-    /*@Nullable*/ private M model;
-    private Element baseElement = Element.getDefaultInstance();
-    /*@Nullable*/ private RecyclerKey key;
-    private StyleProvider elementStyle;
-    /*@Nullable*/ private LogData logData;
+    private final Context mContext;
+    private final AdapterParameters mParameters;
+    private final V mView;
+    /*@Nullable*/ private M mModel;
+    private Element mBaseElement = Element.getDefaultInstance();
+    /*@Nullable*/ private RecyclerKey mKey;
+    private StyleProvider mElementStyle;
+    /*@Nullable*/ private LogData mLogData;
 
     /**
      * Set to {@code true} when {@link #createAdapter} has completed successfully; unset at the end
      * of
      * {@link #releaseAdapter}.
      */
-    private boolean created;
+    private boolean mCreated;
 
     /**
      * We only check the bound visibility when we're in the process of binding, not in {@link
      * #createAdapter}.
      */
-    private boolean checkBoundVisibility;
+    private boolean mCheckBoundVisibility;
 
-    /*@Nullable*/ private FrameLayout wrapperView;
+    /*@Nullable*/ private FrameLayout mWrapperView;
 
-    Actions actions = Actions.getDefaultInstance();
+    Actions mActions = Actions.getDefaultInstance();
     /** Set of actions that are currently active / triggered so they only get called once. */
-    private final Set<VisibilityAction> activeVisibilityActions = new HashSet<>();
+    private final Set<VisibilityAction> mActiveVisibilityActions = new HashSet<>();
 
     /**
      * Desired width of this element. {@link StyleProvider#DIMENSION_NOT_SET} indicates no explicit
      * width; let the parent view decide.
      */
-    int widthPx = DIMENSION_NOT_SET;
+    int mWidthPx = DIMENSION_NOT_SET;
     /**
      * Desired height of this element. {@link StyleProvider#DIMENSION_NOT_SET} indicates no explicit
      * height; let the parent view decide.
      */
-    int heightPx = DIMENSION_NOT_SET;
+    int mHeightPx = DIMENSION_NOT_SET;
 
     ElementAdapter(Context context, AdapterParameters parameters, V view) {
-        this.context = context;
-        this.parameters = parameters;
-        this.view = view;
-        elementStyle = parameters.defaultStyleProvider;
+        this.mContext = context;
+        this.mParameters = parameters;
+        this.mView = view;
+        mElementStyle = parameters.mDefaultStyleProvider;
     }
 
     ElementAdapter(Context context, AdapterParameters parameters, V view, RecyclerKey key) {
         this(context, parameters, view);
-        this.key = key;
+        this.mKey = key;
     }
 
     /**
@@ -101,7 +101,7 @@
      * not a valid call until the first Model has been bound to the Adapter.
      */
     public View getView() {
-        return wrapperView != null ? wrapperView : view;
+        return mWrapperView != null ? mWrapperView : mView;
     }
 
     /**
@@ -109,7 +109,7 @@
      * a different result than getView when there is a wrapper FrameLayout to support overlays.
      */
     protected V getBaseView() {
-        return view;
+        return mView;
     }
 
     /**
@@ -130,12 +130,12 @@
      * #onCreateAdapter} instead.
      */
     public void createAdapter(M model, Element baseElement, FrameContext frameContext) {
-        this.model = model;
-        this.baseElement = baseElement;
+        this.mModel = model;
+        this.mBaseElement = baseElement;
 
         // Initialize the wrapper view before checking visibility - we need to have it in place
         // before the parent adds our outermost view to the hierarchy.
-        elementStyle = frameContext.makeStyleFor(getElementStyleIdsStack());
+        mElementStyle = frameContext.makeStyleFor(getElementStyleIdsStack());
         initializeWrapperViewDependentFeatures();
 
         Visibility visibility = getVisibilityForElement(baseElement, frameContext);
@@ -150,30 +150,30 @@
 
         initializeOverflow(baseElement);
 
-        elementStyle.applyElementStyles(this);
-        created = true;
+        mElementStyle.applyElementStyles(this);
+        mCreated = true;
     }
 
     private void initializeWrapperViewDependentFeatures() {
-        if (wrapperView != null) {
+        if (mWrapperView != null) {
             // We have already initialized the wrapper view.
             return;
         }
-        if (!elementStyle.hasRoundedCorners() && !elementStyle.hasBorders()) {
+        if (!mElementStyle.hasRoundedCorners() && !mElementStyle.hasBorders()) {
             // We do not need a wrapper view.
             return;
         }
 
-        FrameLayout wrapper = elementStyle.createWrapperView(context,
-                parameters.roundedCornerMaskCache, parameters.allowLegacyRoundedCornerImpl,
-                parameters.allowOutlineRoundedCornerImpl);
+        FrameLayout wrapper = mElementStyle.createWrapperView(mContext,
+                mParameters.mRoundedCornerMaskCache, mParameters.mAllowLegacyRoundedCornerImpl,
+                mParameters.mAllowOutlineRoundedCornerImpl);
         wrapper.addView(getBaseView());
 
         if (!(wrapper instanceof RoundedCornerWrapperView)) {
-            elementStyle.addBordersWithoutRoundedCorners(wrapper, getContext());
+            mElementStyle.addBordersWithoutRoundedCorners(wrapper, getContext());
         }
 
-        wrapperView = wrapper;
+        mWrapperView = wrapper;
     }
 
     /** Performs child-class-specific adapter creation; to be overridden. */
@@ -190,11 +190,11 @@
 
     /** Bind the model and initialize overlays. Calls child {@link #onBindModel} methods. */
     void bindModel(M model, Element baseElement, FrameContext frameContext) {
-        this.model = model;
-        this.baseElement = baseElement;
-        checkBoundVisibility = true;
+        this.mModel = model;
+        this.mBaseElement = baseElement;
+        mCheckBoundVisibility = true;
         if (getElementStyleIdsStack().hasStyleBinding()) {
-            elementStyle = frameContext.makeStyleFor(getElementStyleIdsStack());
+            mElementStyle = frameContext.makeStyleFor(getElementStyleIdsStack());
         }
 
         Visibility visibility = getVisibilityForElement(baseElement, frameContext);
@@ -202,10 +202,10 @@
         if (visibility == Visibility.GONE) {
             return;
         }
-        if (!created) {
+        if (!mCreated) {
             createAdapter(model, baseElement, frameContext);
         }
-        if (!created) {
+        if (!mCreated) {
             // This should not happen; indicates a problem in the logic if createAdapter here runs
             // without successfully creating the adapter.
             throw new PietFatalException(ErrorCode.ERR_UNSPECIFIED,
@@ -223,7 +223,7 @@
 
         // Reapply styles if we have style bindings
         if (getElementStyleIdsStack().hasStyleBinding()) {
-            elementStyle.applyElementStyles(this);
+            mElementStyle.applyElementStyles(this);
         }
         for (AccessibilityRole role : baseElement.getAccessibility().getRolesList()) {
             switch (role) {
@@ -267,20 +267,20 @@
         } else {
             getBaseView().setContentDescription(null);
         }
-        LogDataCallback callback = parameters.hostProviders.getLogDataCallback();
+        LogDataCallback callback = mParameters.mHostProviders.getLogDataCallback();
         if (callback != null) {
             switch (baseElement.getLogDataValueCase()) {
                 case LOG_DATA:
-                    logData = baseElement.getLogData();
+                    mLogData = baseElement.getLogData();
                     break;
                 case LOG_DATA_REF:
                     // Get the logData from the binding in the template
-                    logData = frameContext.getLogDataFromBinding(baseElement.getLogDataRef());
+                    mLogData = frameContext.getLogDataFromBinding(baseElement.getLogDataRef());
                     break;
                 default: // No log Data
             }
-            if (logData != null) {
-                callback.onBind(logData, getView());
+            if (mLogData != null) {
+                callback.onBind(mLogData, getView());
             }
         }
     }
@@ -290,14 +290,14 @@
         switch (accessibility.getDescriptionDataCase()) {
             case DESCRIPTION:
                 return getTemplatedStringEvaluator().evaluate(
-                        parameters.hostProviders.getAssetProvider(),
+                        mParameters.mHostProviders.getAssetProvider(),
                         accessibility.getDescription());
             case DESCRIPTION_BINDING:
                 BindingValue bindingValue = frameContext.getParameterizedTextBindingValue(
                         accessibility.getDescriptionBinding());
                 if (bindingValue.hasParameterizedText()) {
                     return getTemplatedStringEvaluator().evaluate(
-                            parameters.hostProviders.getAssetProvider(),
+                            mParameters.mHostProviders.getAssetProvider(),
                             bindingValue.getParameterizedText());
                 }
                 // fall through
@@ -316,20 +316,20 @@
         // Set up actions. On the server, they are defined either as the actual action, or an
         // "actions_binding". That actions_binding is defined in a template, and the binding value
         // is then looked up in the template invocation.
-        switch (baseElement.getActionsDataCase()) {
+        switch (mBaseElement.getActionsDataCase()) {
             case ACTIONS:
-                actions = baseElement.getActions();
+                mActions = mBaseElement.getActions();
                 ViewUtils.setOnClickActions(
-                        actions, getBaseView(), frameContext, baseElement.getLogData());
+                        mActions, getBaseView(), frameContext, mBaseElement.getLogData());
                 break;
             case ACTIONS_BINDING:
                 // Get the actions from the actions_binding in the template
-                actions = frameContext.getActionsFromBinding(baseElement.getActionsBinding());
+                mActions = frameContext.getActionsFromBinding(mBaseElement.getActionsBinding());
                 ViewUtils.setOnClickActions(
-                        actions, getBaseView(), frameContext, baseElement.getLogData());
+                        mActions, getBaseView(), frameContext, mBaseElement.getLogData());
                 break;
             default: // No actions defined.
-                actions = Actions.getDefaultInstance();
+                mActions = Actions.getDefaultInstance();
                 ViewUtils.clearOnClickActions(getBaseView());
                 ViewUtils.clearOnLongClickActions(getBaseView());
         }
@@ -338,9 +338,9 @@
 
     /** Intended to be called in onCreate when view is offscreen; sets hide actions to active. */
     void setHideActionsActive() {
-        activeVisibilityActions.clear();
+        mActiveVisibilityActions.clear();
         // Set all "hide" actions as active, since the view is currently off screen.
-        activeVisibilityActions.addAll(actions.getOnHideActionsList());
+        mActiveVisibilityActions.addAll(mActions.getOnHideActionsList());
     }
 
     private static void initializeOverflow(Element baseElement) {
@@ -361,15 +361,15 @@
      * bound.
      */
     StyleProvider getElementStyle() {
-        if (model == null) {
+        if (mModel == null) {
             Logger.wtf(TAG, "getElementStyle called when adapter is not bound");
         }
-        return elementStyle;
+        return mElementStyle;
     }
 
     /** Returns any styles associated with the bound Element. */
     StyleIdsStack getElementStyleIdsStack() {
-        return baseElement.getStyleReferences();
+        return mBaseElement.getStyleReferences();
     }
 
     /**
@@ -378,17 +378,17 @@
      */
     public void unbindModel() {
         // If the visibility was GONE, we may not have ever called onBindModel.
-        if (created) {
+        if (mCreated) {
             onUnbindModel();
         }
-        LogDataCallback callback = parameters.hostProviders.getLogDataCallback();
-        if (callback != null && logData != null) {
-            callback.onUnbind(logData, getView());
-            logData = null;
+        LogDataCallback callback = mParameters.mHostProviders.getLogDataCallback();
+        if (callback != null && mLogData != null) {
+            callback.onUnbind(mLogData, getView());
+            mLogData = null;
         }
-        model = null;
-        baseElement = Element.getDefaultInstance();
-        checkBoundVisibility = false;
+        mModel = null;
+        mBaseElement = Element.getDefaultInstance();
+        mCheckBoundVisibility = false;
 
         // Unset actions
         ViewUtils.clearOnLongClickActions(getBaseView());
@@ -403,24 +403,24 @@
      * #onReleaseAdapter} instead.
      */
     public void releaseAdapter() {
-        if (!created) {
+        if (!mCreated) {
             return;
         }
 
         onReleaseAdapter();
 
         // Destroy overlays
-        if (wrapperView != null) {
-            wrapperView.removeAllViews();
-            wrapperView = null;
+        if (mWrapperView != null) {
+            mWrapperView.removeAllViews();
+            mWrapperView = null;
         }
 
         setVisibilityOnView(Visibility.VISIBLE);
 
-        widthPx = DIMENSION_NOT_SET;
-        heightPx = DIMENSION_NOT_SET;
+        mWidthPx = DIMENSION_NOT_SET;
+        mHeightPx = DIMENSION_NOT_SET;
 
-        created = false;
+        mCreated = false;
     }
 
     /** Performs child-adapter-specific release logic; to be overridden. */
@@ -431,14 +431,14 @@
      * upon the Model type.
      */
     void setKey(RecyclerKey key) {
-        this.key = key;
+        this.mKey = key;
     }
 
     /** Returns a {@link RecyclerKey} which represents an instance of a Model based upon a type. */
     /*@Nullable*/
     public RecyclerKey getKey() {
         // There are Adapters which don't hold on to their views.  How do we want to mark them?
-        return key;
+        return mKey;
     }
 
     /**
@@ -446,7 +446,7 @@
      * StyleProvider#DIMENSION_NOT_SET} which implies that the parent can choose the width.
      */
     int getComputedWidthPx() {
-        return widthPx;
+        return mWidthPx;
     }
 
     /**
@@ -454,13 +454,13 @@
      * StyleProvider#DIMENSION_NOT_SET} which implies that the parent can choose the height.
      */
     int getComputedHeightPx() {
-        return heightPx;
+        return mHeightPx;
     }
 
     /** Sets the adapter's desired dimensions based on the style. */
     private void setDesiredDimensions() {
-        widthPx = elementStyle.getWidthSpecPx(context);
-        heightPx = elementStyle.getHeightSpecPx(context);
+        mWidthPx = mElementStyle.getWidthSpecPx(mContext);
+        mHeightPx = mElementStyle.getHeightSpecPx(mContext);
     }
 
     /** Sets the layout parameters on this adapter's view. */
@@ -482,27 +482,27 @@
     }
 
     AdapterParameters getParameters() {
-        return parameters;
+        return mParameters;
     }
 
     Context getContext() {
-        return context;
+        return mContext;
     }
 
     /** Returns the {@code model}, but is only legal to call when the Adapter is bound to a model */
     M getModel() {
-        return checkNotNull(model);
+        return checkNotNull(mModel);
     }
 
     /** Returns the {@code model}, or null if the adapter is not bound. */
     /*@Nullable*/
     M getRawModel() {
-        return model;
+        return mModel;
     }
 
     /** Return the Element's desired vertical placement within its container. */
     int getVerticalGravity(int defaultGravity) {
-        if (model == null) {
+        if (mModel == null) {
             return defaultGravity;
         }
         return getElementStyle().getGravityVertical(defaultGravity);
@@ -510,7 +510,7 @@
 
     /** Return the Element's desired horizontal placement within its container. */
     int getHorizontalGravity(int defaultGravity) {
-        if (model == null) {
+        if (mModel == null) {
             return defaultGravity;
         }
         return getElementStyle().getGravityHorizontal(defaultGravity);
@@ -518,20 +518,20 @@
 
     /** Return the Element's desired horizontal and vertical placement within its container. */
     int getGravity(int defaultGravity) {
-        if (model == null) {
+        if (mModel == null) {
             return defaultGravity;
         }
         return getElementStyle().getGravity(defaultGravity);
     }
 
     ParameterizedTextEvaluator getTemplatedStringEvaluator() {
-        return parameters.templatedStringEvaluator;
+        return mParameters.mTemplatedStringEvaluator;
     }
 
     @VisibleForTesting
     Visibility getVisibilityForElement(Element element, FrameContext frameContext) {
         VisibilityState visibilityState = element.getVisibilityState();
-        if (checkBoundVisibility && visibilityState.hasOverridingBoundVisibility()) {
+        if (mCheckBoundVisibility && visibilityState.hasOverridingBoundVisibility()) {
             /*@Nullable*/
             Visibility overridingVisibility = frameContext.getVisibilityFromBinding(
                     visibilityState.getOverridingBoundVisibility());
@@ -565,12 +565,12 @@
     }
 
     void triggerHideActions(FrameContext frameContext) {
-        ViewUtils.triggerHideActions(getView(), actions, frameContext.getActionHandler(),
-                frameContext.getFrame(), activeVisibilityActions);
+        ViewUtils.triggerHideActions(getView(), mActions, frameContext.getActionHandler(),
+                frameContext.getFrame(), mActiveVisibilityActions);
     }
 
     void triggerViewActions(View viewport, FrameContext frameContext) {
-        ViewUtils.maybeTriggerViewActions(getView(), viewport, actions,
-                frameContext.getActionHandler(), frameContext.getFrame(), activeVisibilityActions);
+        ViewUtils.maybeTriggerViewActions(getView(), viewport, mActions,
+                frameContext.getActionHandler(), frameContext.getFrame(), mActiveVisibilityActions);
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/ElementAdapterFactory.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/ElementAdapterFactory.java
index d1c47cc..e52e6a3 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/ElementAdapterFactory.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/ElementAdapterFactory.java
@@ -24,17 +24,17 @@
 
 /** Provides methods to create various adapter types based on bindings. */
 class ElementAdapterFactory {
-    private final AdapterFactory<CustomElementAdapter, CustomElement> customElementFactory;
-    private final AdapterFactory<ChunkedTextElementAdapter, Element> chunkedTextElementFactory;
+    private final AdapterFactory<CustomElementAdapter, CustomElement> mCustomElementFactory;
+    private final AdapterFactory<ChunkedTextElementAdapter, Element> mChunkedTextElementFactory;
     private final AdapterFactory<ParameterizedTextElementAdapter, Element>
-            parameterizedTextElementFactory;
-    private final AdapterFactory<ImageElementAdapter, ImageElement> imageElementFactory;
-    private final AdapterFactory<GridRowAdapter, GridRow> gridRowFactory;
-    private final AdapterFactory<ElementListAdapter, ElementList> elementListFactory;
-    private final AdapterFactory<ElementStackAdapter, ElementStack> elementStackFactory;
-    private final List<AdapterFactory<?, ?>> factories;
+            mParameterizedTextElementFactory;
+    private final AdapterFactory<ImageElementAdapter, ImageElement> mImageElementFactory;
+    private final AdapterFactory<GridRowAdapter, GridRow> mGridRowFactory;
+    private final AdapterFactory<ElementListAdapter, ElementList> mElementListFactory;
+    private final AdapterFactory<ElementStackAdapter, ElementStack> mElementStackFactory;
+    private final List<AdapterFactory<?, ?>> mFactories;
 
-    private final KeyedRecyclerPool<ElementAdapter<? extends View, ?>> templateRecyclerPool;
+    private final KeyedRecyclerPool<ElementAdapter<? extends View, ?>> mTemplateRecyclerPool;
 
     ElementAdapterFactory(Context context, AdapterParameters parameters,
             KeyedRecyclerPool<ElementAdapter<? extends View, ?>> templateRecyclerPool) {
@@ -61,17 +61,17 @@
             AdapterFactory<ElementListAdapter, ElementList> elementListFactory,
             AdapterFactory<ElementStackAdapter, ElementStack> elementStackFactory,
             KeyedRecyclerPool<ElementAdapter<? extends View, ?>> templateRecyclerPool) {
-        this.customElementFactory = customElementFactory;
-        this.chunkedTextElementFactory = chunkedTextElementFactory;
-        this.parameterizedTextElementFactory = parameterizedTextElementFactory;
-        this.imageElementFactory = imageElementFactory;
-        this.gridRowFactory = gridRowFactory;
-        this.elementListFactory = elementListFactory;
-        this.elementStackFactory = elementStackFactory;
-        factories = Collections.unmodifiableList(Arrays.asList(customElementFactory,
+        this.mCustomElementFactory = customElementFactory;
+        this.mChunkedTextElementFactory = chunkedTextElementFactory;
+        this.mParameterizedTextElementFactory = parameterizedTextElementFactory;
+        this.mImageElementFactory = imageElementFactory;
+        this.mGridRowFactory = gridRowFactory;
+        this.mElementListFactory = elementListFactory;
+        this.mElementStackFactory = elementStackFactory;
+        mFactories = Collections.unmodifiableList(Arrays.asList(customElementFactory,
                 chunkedTextElementFactory, parameterizedTextElementFactory, imageElementFactory,
                 gridRowFactory, elementListFactory, elementStackFactory));
-        this.templateRecyclerPool = templateRecyclerPool;
+        this.mTemplateRecyclerPool = templateRecyclerPool;
     }
 
     ElementAdapter<? extends View, ?> createAdapterForElement(
@@ -79,17 +79,17 @@
         ElementAdapter<? extends View, ?> returnAdapter;
         switch (element.getElementsCase()) {
             case CUSTOM_ELEMENT:
-                returnAdapter = customElementFactory.get(element.getCustomElement(), frameContext);
+                returnAdapter = mCustomElementFactory.get(element.getCustomElement(), frameContext);
                 break;
             case TEXT_ELEMENT:
                 switch (element.getTextElement().getContentCase()) {
                     case CHUNKED_TEXT:
                     case CHUNKED_TEXT_BINDING:
-                        returnAdapter = chunkedTextElementFactory.get(element, frameContext);
+                        returnAdapter = mChunkedTextElementFactory.get(element, frameContext);
                         break;
                     case PARAMETERIZED_TEXT:
                     case PARAMETERIZED_TEXT_BINDING:
-                        returnAdapter = parameterizedTextElementFactory.get(element, frameContext);
+                        returnAdapter = mParameterizedTextElementFactory.get(element, frameContext);
                         break;
                     default:
                         throw new PietFatalException(ErrorCode.ERR_MISSING_OR_UNHANDLED_CONTENT,
@@ -100,16 +100,16 @@
                 }
                 break;
             case IMAGE_ELEMENT:
-                returnAdapter = imageElementFactory.get(element.getImageElement(), frameContext);
+                returnAdapter = mImageElementFactory.get(element.getImageElement(), frameContext);
                 break;
             case GRID_ROW:
-                returnAdapter = gridRowFactory.get(element.getGridRow(), frameContext);
+                returnAdapter = mGridRowFactory.get(element.getGridRow(), frameContext);
                 break;
             case ELEMENT_LIST:
-                returnAdapter = elementListFactory.get(element.getElementList(), frameContext);
+                returnAdapter = mElementListFactory.get(element.getElementList(), frameContext);
                 break;
             case ELEMENT_STACK:
-                returnAdapter = elementStackFactory.get(element.getElementStack(), frameContext);
+                returnAdapter = mElementStackFactory.get(element.getElementStack(), frameContext);
                 break;
             case ELEMENTS_NOT_SET:
             default:
@@ -130,29 +130,29 @@
             // Don't release template adapters; just return them to the pool after unbinding.
             TemplateKey key = (TemplateKey) adapter.getKey();
             if (key != null) {
-                templateRecyclerPool.put(key, adapter);
+                mTemplateRecyclerPool.put(key, adapter);
             }
         } else if (adapter instanceof CustomElementAdapter) {
-            customElementFactory.release((CustomElementAdapter) adapter);
+            mCustomElementFactory.release((CustomElementAdapter) adapter);
         } else if (adapter instanceof ChunkedTextElementAdapter) {
-            chunkedTextElementFactory.release((ChunkedTextElementAdapter) adapter);
+            mChunkedTextElementFactory.release((ChunkedTextElementAdapter) adapter);
         } else if (adapter instanceof ParameterizedTextElementAdapter) {
-            parameterizedTextElementFactory.release((ParameterizedTextElementAdapter) adapter);
+            mParameterizedTextElementFactory.release((ParameterizedTextElementAdapter) adapter);
         } else if (adapter instanceof ImageElementAdapter) {
-            imageElementFactory.release((ImageElementAdapter) adapter);
+            mImageElementFactory.release((ImageElementAdapter) adapter);
         } else if (adapter instanceof GridRowAdapter) {
-            gridRowFactory.release((GridRowAdapter) adapter);
+            mGridRowFactory.release((GridRowAdapter) adapter);
         } else if (adapter instanceof ElementListAdapter) {
-            elementListFactory.release((ElementListAdapter) adapter);
+            mElementListFactory.release((ElementListAdapter) adapter);
         } else if (adapter instanceof ElementStackAdapter) {
-            elementStackFactory.release((ElementStackAdapter) adapter);
+            mElementStackFactory.release((ElementStackAdapter) adapter);
         }
     }
 
     void purgeRecyclerPools() {
-        for (AdapterFactory<?, ?> factory : factories) {
+        for (AdapterFactory<?, ?> factory : mFactories) {
             factory.purgeRecyclerPool();
         }
-        templateRecyclerPool.clear();
+        mTemplateRecyclerPool.clear();
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/ElementContainerAdapter.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/ElementContainerAdapter.java
index 9ba576d..80b2a4f 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/ElementContainerAdapter.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/ElementContainerAdapter.java
@@ -28,23 +28,23 @@
  * unbinds, or releases.
  */
 abstract class ElementContainerAdapter<V extends ViewGroup, M> extends ElementAdapter<V, M> {
-    final List<ElementAdapter<? extends View, ?>> childAdapters;
-    int[] adaptersPerContent = new int[0];
+    final List<ElementAdapter<? extends View, ?>> mChildAdapters;
+    int[] mAdaptersPerContent = new int[0];
 
     /** Cached reference to the factory for convenience. */
-    private final ElementAdapterFactory factory;
+    private final ElementAdapterFactory mFactory;
 
     ElementContainerAdapter(
             Context context, AdapterParameters parameters, V view, RecyclerKey key) {
         super(context, parameters, view, key);
-        childAdapters = new ArrayList<>();
-        factory = parameters.elementAdapterFactory;
+        mChildAdapters = new ArrayList<>();
+        mFactory = parameters.mElementAdapterFactory;
     }
 
     ElementContainerAdapter(Context context, AdapterParameters parameters, V view) {
         super(context, parameters, view);
-        childAdapters = new ArrayList<>();
-        factory = parameters.elementAdapterFactory;
+        mChildAdapters = new ArrayList<>();
+        mFactory = parameters.mElementAdapterFactory;
     }
 
     @Override
@@ -62,7 +62,7 @@
     /** Unbind the model and release child adapters. Be sure to call this in any overrides. */
     @Override
     void onUnbindModel() {
-        if (getRawModel() != null && !childAdapters.isEmpty()) {
+        if (getRawModel() != null && !mChildAdapters.isEmpty()) {
             unbindChildAdapters(getContentsFromModel(getModel()));
         }
 
@@ -75,19 +75,19 @@
         if (containerView != null) {
             containerView.removeAllViews();
         }
-        for (ElementAdapter<?, ?> childAdapter : childAdapters) {
-            factory.releaseAdapter(childAdapter);
+        for (ElementAdapter<?, ?> childAdapter : mChildAdapters) {
+            mFactory.releaseAdapter(childAdapter);
         }
-        childAdapters.clear();
+        mChildAdapters.clear();
     }
 
     /** Creates and adds adapters for all inline Content items. */
     private void createInlineChildAdapters(List<Content> contents, FrameContext frameContext) {
-        adaptersPerContent = new int[contents.size()];
+        mAdaptersPerContent = new int[contents.size()];
 
-        checkState(childAdapters.isEmpty(),
+        checkState(mChildAdapters.isEmpty(),
                 "Child adapters is not empty (has %s elements); release adapter before creating.",
-                childAdapters.size());
+                mChildAdapters.size());
         // Could also check that getBaseView has no children, but it may have children due to
         // alignment padding elements.
 
@@ -95,17 +95,17 @@
             Content content = contents.get(contentIndex);
             switch (content.getContentTypeCase()) {
                 case ELEMENT:
-                    adaptersPerContent[contentIndex] =
+                    mAdaptersPerContent[contentIndex] =
                             createAndAddElementAdapter(content.getElement(), frameContext);
                     break;
                 case TEMPLATE_INVOCATION:
-                    adaptersPerContent[contentIndex] = createAndAddTemplateAdapters(
+                    mAdaptersPerContent[contentIndex] = createAndAddTemplateAdapters(
                             content.getTemplateInvocation(), frameContext);
                     break;
                 case BOUND_ELEMENT:
                 case TEMPLATE_BINDING:
                     // Do nothing; create these adapters in the bindModel call.
-                    adaptersPerContent[contentIndex] = 0;
+                    mAdaptersPerContent[contentIndex] = 0;
                     continue;
                 default:
                     throw new PietFatalException(ErrorCode.ERR_MISSING_OR_UNHANDLED_CONTENT,
@@ -124,7 +124,7 @@
      */
     private int createAndAddElementAdapter(Element element, FrameContext frameContext) {
         ElementAdapter<? extends View, ?> adapter =
-                factory.createAdapterForElement(element, frameContext);
+                mFactory.createAdapterForElement(element, frameContext);
         addChildAdapter(adapter);
         getBaseView().addView(adapter.getView());
         return 1;
@@ -146,7 +146,7 @@
             TemplateAdapterModel templateModel = new TemplateAdapterModel(
                     template, templateInvocation.getBindingContexts(templateIndex));
             ElementAdapter<? extends View, ?> templateAdapter =
-                    getParameters().templateBinder.createTemplateAdapter(
+                    getParameters().mTemplateBinder.createTemplateAdapter(
                             templateModel, frameContext);
             addChildAdapter(templateAdapter);
             getBaseView().addView(templateAdapter.getView());
@@ -161,9 +161,9 @@
      * dealing with views here, N should always be small (probably less than ~10).
      */
     private void bindChildAdapters(List<Content> contents, FrameContext frameContext) {
-        checkState(adaptersPerContent.length == contents.size(),
+        checkState(mAdaptersPerContent.length == contents.size(),
                 "Internal error in adapters per content (%s != %s). Adapter has not been created?",
-                adaptersPerContent.length, contents.size());
+                mAdaptersPerContent.length, contents.size());
         int adapterIndex = 0;
         int viewIndex = 0;
         for (int contentIndex = 0; contentIndex < contents.size(); contentIndex++) {
@@ -171,7 +171,7 @@
             switch (content.getContentTypeCase()) {
                 case ELEMENT:
                     // An Element generates exactly one adapter+view; bind it here.
-                    childAdapters.get(adapterIndex).bindModel(content.getElement(), frameContext);
+                    mChildAdapters.get(adapterIndex).bindModel(content.getElement(), frameContext);
                     adapterIndex++;
                     viewIndex++;
                     break;
@@ -183,11 +183,11 @@
                     if (template == null) {
                         continue;
                     }
-                    for (int templateIndex = 0; templateIndex < adaptersPerContent[contentIndex];
+                    for (int templateIndex = 0; templateIndex < mAdaptersPerContent[contentIndex];
                             templateIndex++) {
                         ElementAdapter<? extends View, ?> templateAdapter =
-                                childAdapters.get(adapterIndex);
-                        getParameters().templateBinder.bindTemplateAdapter(templateAdapter,
+                                mChildAdapters.get(adapterIndex);
+                        getParameters().mTemplateBinder.bindTemplateAdapter(templateAdapter,
                                 new TemplateAdapterModel(template,
                                         templateInvocation.getBindingContexts(templateIndex)),
                                 frameContext);
@@ -204,11 +204,11 @@
                     }
                     Element element = elementBinding.getElement();
                     ElementAdapter<? extends View, ?> adapter =
-                            factory.createAdapterForElement(element, frameContext);
+                            mFactory.createAdapterForElement(element, frameContext);
                     adapter.bindModel(element, frameContext);
-                    childAdapters.add(adapterIndex++, adapter);
+                    mChildAdapters.add(adapterIndex++, adapter);
                     getBaseView().addView(adapter.getView(), viewIndex++);
-                    adaptersPerContent[contentIndex] = 1;
+                    mAdaptersPerContent[contentIndex] = 1;
                     break;
                 case TEMPLATE_BINDING:
                     // Look up the binding, then create, bind, and add template adapters.
@@ -225,7 +225,7 @@
                     if (boundTemplate == null) {
                         continue;
                     }
-                    adaptersPerContent[contentIndex] =
+                    mAdaptersPerContent[contentIndex] =
                             boundTemplateInvocation.getBindingContextsCount();
                     for (int templateIndex = 0;
                             templateIndex < boundTemplateInvocation.getBindingContextsCount();
@@ -233,9 +233,9 @@
                         TemplateAdapterModel templateModel = new TemplateAdapterModel(boundTemplate,
                                 boundTemplateInvocation.getBindingContexts(templateIndex));
                         ElementAdapter<? extends View, ?> boundTemplateAdapter =
-                                getParameters().templateBinder.createAndBindTemplateAdapter(
+                                getParameters().mTemplateBinder.createAndBindTemplateAdapter(
                                         templateModel, frameContext);
-                        childAdapters.add(adapterIndex++, boundTemplateAdapter);
+                        mChildAdapters.add(adapterIndex++, boundTemplateAdapter);
                         getBaseView().addView(boundTemplateAdapter.getView(), viewIndex++);
                     }
                     break;
@@ -259,8 +259,8 @@
                 case ELEMENT:
                 case TEMPLATE_INVOCATION:
                     // For inline content, just unbind to allow re-binding in the future.
-                    for (int i = 0; i < adaptersPerContent[contentIndex]; i++) {
-                        childAdapters.get(adapterIndex).unbindModel();
+                    for (int i = 0; i < mAdaptersPerContent[contentIndex]; i++) {
+                        mChildAdapters.get(adapterIndex).unbindModel();
                         adapterIndex++;
                         viewIndex++;
                     }
@@ -268,14 +268,14 @@
                 case BOUND_ELEMENT:
                 case TEMPLATE_BINDING:
                     // For bound content, release, recycle, and remove adapters.
-                    for (int i = 0; i < adaptersPerContent[contentIndex]; i++) {
-                        factory.releaseAdapter(childAdapters.get(adapterIndex));
-                        childAdapters.remove(adapterIndex);
+                    for (int i = 0; i < mAdaptersPerContent[contentIndex]; i++) {
+                        mFactory.releaseAdapter(mChildAdapters.get(adapterIndex));
+                        mChildAdapters.remove(adapterIndex);
                         getBaseView().removeViewAt(viewIndex);
                         // Don't increment adapterIndex or viewIndex because we removed this
                         // adapter/view.
                     }
-                    adaptersPerContent[contentIndex] = 0;
+                    mAdaptersPerContent[contentIndex] = 0;
                     break;
                 default:
                     throw new PietFatalException(ErrorCode.ERR_MISSING_OR_UNHANDLED_CONTENT,
@@ -286,13 +286,13 @@
     }
 
     void addChildAdapter(ElementAdapter<? extends View, ?> adapter) {
-        childAdapters.add(adapter);
+        mChildAdapters.add(adapter);
     }
 
     @Override
     public void triggerViewActions(View viewport, FrameContext frameContext) {
         super.triggerViewActions(viewport, frameContext);
-        for (ElementAdapter<?, ?> childAdapter : childAdapters) {
+        for (ElementAdapter<?, ?> childAdapter : mChildAdapters) {
             childAdapter.triggerViewActions(viewport, frameContext);
         }
     }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/ElementListAdapter.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/ElementListAdapter.java
index ea67163..c29cd28 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/ElementListAdapter.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/ElementListAdapter.java
@@ -28,8 +28,8 @@
     private static final String TAG = "ElementListAdapter";
 
     // Only needed for reporting errors during updateChildLayoutParams.
-    /*@Nullable*/ private FrameContext frameContextForDebugLogsFromCreate;
-    /*@Nullable*/ private FrameContext frameContextForDebugLogsFromBind;
+    /*@Nullable*/ private FrameContext mFrameContextForDebugLogsFromCreate;
+    /*@Nullable*/ private FrameContext mFrameContextForDebugLogsFromBind;
 
     private ElementListAdapter(Context context, AdapterParameters parameters) {
         super(context, parameters, createView(context), KeySupplier.SINGLETON_KEY);
@@ -46,15 +46,15 @@
 
     @Override
     void onCreateAdapter(ElementList model, Element baseElement, FrameContext frameContext) {
-        this.frameContextForDebugLogsFromCreate = frameContext;
+        this.mFrameContextForDebugLogsFromCreate = frameContext;
         super.onCreateAdapter(model, baseElement, frameContext);
     }
 
     @Override
     void onBindModel(ElementList model, Element baseElement, FrameContext frameContext) {
-        this.frameContextForDebugLogsFromBind = frameContext;
+        this.mFrameContextForDebugLogsFromBind = frameContext;
         super.onBindModel(model, baseElement, frameContext);
-        for (ElementAdapter<? extends View, ?> adapter : childAdapters) {
+        for (ElementAdapter<? extends View, ?> adapter : mChildAdapters) {
             updateChildLayoutParams(adapter);
         }
     }
@@ -67,27 +67,27 @@
     @Override
     void onUnbindModel() {
         super.onUnbindModel();
-        this.frameContextForDebugLogsFromBind = null;
+        this.mFrameContextForDebugLogsFromBind = null;
     }
 
     @Override
     void onReleaseAdapter() {
         super.onReleaseAdapter();
-        this.frameContextForDebugLogsFromCreate = null;
+        this.mFrameContextForDebugLogsFromCreate = null;
     }
 
     @Override
     public void setLayoutParams(ViewGroup.LayoutParams layoutParams) {
         super.setLayoutParams(layoutParams);
-        for (ElementAdapter<? extends View, ?> adapter : childAdapters) {
+        for (ElementAdapter<? extends View, ?> adapter : mChildAdapters) {
             updateChildLayoutParams(adapter);
         }
     }
 
     /*@Nullable*/
     private FrameContext getLoggingFrameContext() {
-        return frameContextForDebugLogsFromBind != null ? frameContextForDebugLogsFromBind
-                                                        : frameContextForDebugLogsFromCreate;
+        return mFrameContextForDebugLogsFromBind != null ? mFrameContextForDebugLogsFromBind
+                                                         : mFrameContextForDebugLogsFromCreate;
     }
 
     private void updateChildLayoutParams(ElementAdapter<? extends View, ?> adapter) {
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/ElementStackAdapter.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/ElementStackAdapter.java
index a5142139..8a0d3918 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/ElementStackAdapter.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/ElementStackAdapter.java
@@ -30,7 +30,7 @@
     @Override
     public void onBindModel(ElementStack stack, Element baseElement, FrameContext frameContext) {
         super.onBindModel(stack, baseElement, frameContext);
-        for (ElementAdapter<?, ?> childAdapter : childAdapters) {
+        for (ElementAdapter<?, ?> childAdapter : mChildAdapters) {
             updateChildLayoutParams(childAdapter);
         }
     }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/FrameAdapterImpl.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/FrameAdapterImpl.java
index b693cb43..c15f2a0 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/FrameAdapterImpl.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/FrameAdapterImpl.java
@@ -50,25 +50,25 @@
 
     private static final String GENERIC_EXCEPTION = "Top Level Exception was caught - see logcat";
 
-    private final Set<ElementAdapter<?, ?>> childAdapters;
+    private final Set<ElementAdapter<?, ?>> mChildAdapters;
 
-    private final Context context;
-    private final AdapterParameters parameters;
-    private final ActionHandler actionHandler;
-    private final EventLogger eventLogger;
-    private final DebugBehavior debugBehavior;
-    private final Set<VisibilityAction> activeActions = new HashSet<>();
-    /*@Nullable*/ private LinearLayout view;
-    /*@Nullable*/ private FrameContext frameContext;
+    private final Context mContext;
+    private final AdapterParameters mParameters;
+    private final ActionHandler mActionHandler;
+    private final EventLogger mEventLogger;
+    private final DebugBehavior mDebugBehavior;
+    private final Set<VisibilityAction> mActiveActions = new HashSet<>();
+    /*@Nullable*/ private LinearLayout mView;
+    /*@Nullable*/ private FrameContext mFrameContext;
 
     FrameAdapterImpl(Context context, AdapterParameters parameters, ActionHandler actionHandler,
             EventLogger eventLogger, DebugBehavior debugBehavior) {
-        this.context = context;
-        this.parameters = parameters;
-        this.actionHandler = actionHandler;
-        this.eventLogger = eventLogger;
-        this.debugBehavior = debugBehavior;
-        childAdapters = new HashSet<>();
+        this.mContext = context;
+        this.mParameters = parameters;
+        this.mActionHandler = actionHandler;
+        this.mEventLogger = eventLogger;
+        this.mDebugBehavior = debugBehavior;
+        mChildAdapters = new HashSet<>();
     }
 
     // TODO: Need to implement support for sharding
@@ -76,13 +76,13 @@
     public void bindModel(Frame frame, int frameWidthPx,
             /*@Nullable*/ ShardingControl shardingControl, List<PietSharedState> pietSharedStates) {
         long startTime = System.nanoTime();
-        initialBind(parameters.parentViewSupplier.get());
+        initialBind(mParameters.mParentViewSupplier.get());
         FrameContext localFrameContext =
-                createFrameContext(frame, frameWidthPx, pietSharedStates, checkNotNull(view));
-        frameContext = localFrameContext;
-        activeActions.clear();
-        activeActions.addAll(frame.getActions().getOnHideActionsList());
-        LinearLayout frameView = checkNotNull(view);
+                createFrameContext(frame, frameWidthPx, pietSharedStates, checkNotNull(mView));
+        mFrameContext = localFrameContext;
+        mActiveActions.clear();
+        mActiveActions.addAll(frame.getActions().getOnHideActionsList());
+        LinearLayout frameView = checkNotNull(mView);
 
         try {
             for (Content content : frame.getContentsList()) {
@@ -91,7 +91,7 @@
                 List<ElementAdapter<?, ?>> adapters =
                         getBoundAdaptersForContent(content, localFrameContext);
                 for (ElementAdapter<?, ?> adapter : adapters) {
-                    childAdapters.add(adapter);
+                    mChildAdapters.add(adapter);
                     setLayoutParamsOnChild(adapter);
                     frameView.addView(adapter.getView());
                 }
@@ -123,18 +123,18 @@
         // If there were errors add an error slice to the frame
         if (localFrameContext.getDebugBehavior().getShowDebugViews()) {
             View errorView =
-                    localFrameContext.getDebugLogger().getReportView(MessageType.ERROR, context);
+                    localFrameContext.getDebugLogger().getReportView(MessageType.ERROR, mContext);
             if (errorView != null) {
                 frameView.addView(errorView);
             }
             View warningView =
-                    localFrameContext.getDebugLogger().getReportView(MessageType.WARNING, context);
+                    localFrameContext.getDebugLogger().getReportView(MessageType.WARNING, mContext);
             if (warningView != null) {
                 frameView.addView(warningView);
             }
         }
-        eventLogger.logEvents(localFrameContext.getDebugLogger().getErrorCodes());
-        LogDataCallback callback = parameters.hostProviders.getLogDataCallback();
+        mEventLogger.logEvents(localFrameContext.getDebugLogger().getErrorCodes());
+        LogDataCallback callback = mParameters.mHostProviders.getLogDataCallback();
         Frame localFrame = localFrameContext.getFrame();
         if (callback != null && localFrame != null && localFrame.hasLogData()) {
             callback.onBind(localFrame.getLogData(), frameView);
@@ -145,20 +145,20 @@
     public void unbindModel() {
         triggerHideActions();
 
-        LinearLayout view = checkNotNull(this.view);
-        LogDataCallback callback = parameters.hostProviders.getLogDataCallback();
-        if (frameContext != null) {
-            Frame frame = frameContext.getFrame();
+        LinearLayout view = checkNotNull(this.mView);
+        LogDataCallback callback = mParameters.mHostProviders.getLogDataCallback();
+        if (mFrameContext != null) {
+            Frame frame = mFrameContext.getFrame();
             if (callback != null && frame != null && frame.hasLogData()) {
                 callback.onUnbind(frame.getLogData(), view);
             }
         }
-        for (ElementAdapter<?, ?> child : childAdapters) {
-            parameters.elementAdapterFactory.releaseAdapter(child);
+        for (ElementAdapter<?, ?> child : mChildAdapters) {
+            mParameters.mElementAdapterFactory.releaseAdapter(child);
         }
-        childAdapters.clear();
+        mChildAdapters.clear();
         view.removeAllViews();
-        frameContext = null;
+        mFrameContext = null;
     }
 
     private void setLayoutParamsOnChild(ElementAdapter<?, ?> childAdapter) {
@@ -169,7 +169,7 @@
 
         LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(width, height);
 
-        childAdapter.getElementStyle().applyMargins(context, params);
+        childAdapter.getElementStyle().applyMargins(mContext, params);
 
         params.gravity = childAdapter.getGravity(Gravity.TOP | Gravity.START);
 
@@ -178,46 +178,47 @@
 
     @Override
     public LinearLayout getFrameContainer() {
-        initialBind(parameters.parentViewSupplier.get());
-        return checkNotNull(view);
+        initialBind(mParameters.mParentViewSupplier.get());
+        return checkNotNull(mView);
     }
 
     @VisibleForTesting
     FrameContext createFrameContext(
             Frame frame, int frameWidthPx, List<PietSharedState> pietSharedStates, View frameView) {
         MediaQueryHelper mediaQueryHelper = new MediaQueryHelper(
-                frameWidthPx, parameters.hostProviders.getAssetProvider(), context);
+                frameWidthPx, mParameters.mHostProviders.getAssetProvider(), mContext);
         PietStylesHelper pietStylesHelper = checkNotNull(
-                parameters.pietStylesHelperFactory.get(pietSharedStates, mediaQueryHelper));
+                mParameters.mPietStylesHelperFactory.get(pietSharedStates, mediaQueryHelper));
         return FrameContext.createFrameContext(frame, pietSharedStates, pietStylesHelper,
-                debugBehavior, new DebugLogger(), actionHandler, parameters.hostProviders,
+                mDebugBehavior, new DebugLogger(), mActionHandler, mParameters.mHostProviders,
                 frameView);
     }
 
     @Override
     public void triggerHideActions() {
-        if (frameContext == null || view == null) {
+        if (mFrameContext == null || mView == null) {
             return;
         }
-        FrameContext localFrameContext = frameContext;
-        ViewUtils.triggerHideActions(view, localFrameContext.getFrame().getActions(),
-                localFrameContext.getActionHandler(), localFrameContext.getFrame(), activeActions);
+        FrameContext localFrameContext = mFrameContext;
+        ViewUtils.triggerHideActions(mView, localFrameContext.getFrame().getActions(),
+                localFrameContext.getActionHandler(), localFrameContext.getFrame(), mActiveActions);
 
-        for (ElementAdapter<?, ?> adapter : childAdapters) {
+        for (ElementAdapter<?, ?> adapter : mChildAdapters) {
             adapter.triggerHideActions(localFrameContext);
         }
     }
 
     @Override
     public void triggerViewActions(View viewport) {
-        if (frameContext == null || view == null) {
+        if (mFrameContext == null || mView == null) {
             return;
         }
-        FrameContext localFrameContext = frameContext;
-        ViewUtils.maybeTriggerViewActions(view, viewport, localFrameContext.getFrame().getActions(),
-                localFrameContext.getActionHandler(), localFrameContext.getFrame(), activeActions);
+        FrameContext localFrameContext = mFrameContext;
+        ViewUtils.maybeTriggerViewActions(mView, viewport,
+                localFrameContext.getFrame().getActions(), localFrameContext.getActionHandler(),
+                localFrameContext.getFrame(), mActiveActions);
 
-        for (ElementAdapter<?, ?> adapter : childAdapters) {
+        for (ElementAdapter<?, ?> adapter : mChildAdapters) {
             adapter.triggerViewActions(viewport, localFrameContext);
         }
     }
@@ -229,7 +230,7 @@
             case ELEMENT:
                 Element element = content.getElement();
                 ElementAdapter<?, ?> inlineSliceAdapter =
-                        parameters.elementAdapterFactory.createAdapterForElement(
+                        mParameters.mElementAdapterFactory.createAdapterForElement(
                                 element, frameContext);
                 inlineSliceAdapter.bindModel(element, frameContext);
                 return Collections.singletonList(inlineSliceAdapter);
@@ -240,7 +241,7 @@
                     TemplateAdapterModel model = new TemplateAdapterModel(
                             templateInvocation.getTemplateId(), frameContext, bindingContext);
                     ElementAdapter<? extends View, ?> templateAdapter =
-                            parameters.templateBinder.createAndBindTemplateAdapter(
+                            mParameters.mTemplateBinder.createAndBindTemplateAdapter(
                                     model, frameContext);
                     returnList.add(templateAdapter);
                 }
@@ -258,24 +259,24 @@
 
     @VisibleForTesting
     AdapterParameters getParameters() {
-        return this.parameters;
+        return this.mParameters;
     }
 
     @VisibleForTesting
     /*@Nullable*/
     LinearLayout getView() {
-        return this.view;
+        return this.mView;
     }
 
     private void initialBind(/*@Nullable*/ ViewGroup parent) {
-        if (view != null) {
+        if (mView != null) {
             return;
         }
-        this.view = createView(parent);
+        this.mView = createView(parent);
     }
 
     private LinearLayout createView(/*@Nullable*/ ViewGroup parent) {
-        LinearLayout linearLayout = new LinearLayout(context);
+        LinearLayout linearLayout = new LinearLayout(mContext);
         linearLayout.setOrientation(LinearLayout.VERTICAL);
         ViewGroup.LayoutParams layoutParams;
         if (parent != null && parent.getLayoutParams() != null) {
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/FrameContext.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/FrameContext.java
index 9d2feed..0bea0451 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/FrameContext.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/FrameContext.java
@@ -61,33 +61,33 @@
     private static final String TAG = "FrameContext";
 
     @VisibleForTesting
-    final PietStylesHelper stylesHelper;
-    private final List<PietSharedState> pietSharedStates;
-    private final DebugBehavior debugBehavior;
-    private final DebugLogger debugLogger;
-    private final ActionHandler actionHandler;
-    private final HostProviders hostProviders;
-    private final HostBindingProvider hostBindingProvider;
-    private final Map<String, Template> templates;
+    final PietStylesHelper mStyleshelper;
+    private final List<PietSharedState> mPietSharedStates;
+    private final DebugBehavior mDebugBehavior;
+    private final DebugLogger mDebugLogger;
+    private final ActionHandler mActionHandler;
+    private final HostProviders mHostProviders;
+    private final HostBindingProvider mHostBindingProvider;
+    private final Map<String, Template> mTemplates;
 
     // List of stylesheets for each Template that could be affected by media queries.
-    private final Map<Template, List<Stylesheet>> templateMediaQueryStylesheets;
+    private final Map<Template, List<Stylesheet>> mTemplateMediaQueryStylesheets;
 
     // This is the Frame which contains all the slices being processed.
-    private final Frame currentFrame;
+    private final Frame mCurrentFrame;
 
     // The Current Stylesheet as a map from style_id to Style.
-    private final Map<String, Style> stylesheet;
+    private final Map<String, Style> mStylesheet;
 
     // The in-scope bindings as a map from state_id to binding value
-    private final Map<String, BindingValue> bindingValues;
+    private final Map<String, BindingValue> mBindingValues;
 
     // The base / default style; set to default instance for Frame or childDefaultStyleId for
     // Template
-    private final Style baseStyle;
+    private final Style mBaseStyle;
 
     // The root view of this frame.
-    private final View frameView;
+    private final View mFrameView;
 
     /** Initialize a FrameContext for the first time from a top-level Frame. */
     @VisibleForTesting
@@ -98,11 +98,11 @@
                 debugBehavior, debugLogger, actionHandler, hostProviders,
                 new NoKeyOverwriteHashMap<>("Template", ERR_DUPLICATE_TEMPLATE), frameView);
 
-        stylesHelper.addSharedStateTemplatesToFrame(templates);
+        mStyleshelper.addSharedStateTemplatesToFrame(mTemplates);
         if (frame.getTemplatesCount() > 0) {
             for (Template template : frame.getTemplatesList()) {
                 if (pietStylesHelper.areMediaQueriesMet(template.getConditionsList())) {
-                    templates.put(template.getTemplateId(), template);
+                    mTemplates.put(template.getTemplateId(), template);
                 }
             }
         }
@@ -114,20 +114,20 @@
             PietStylesHelper pietStylesHelper, DebugBehavior debugBehavior, DebugLogger debugLogger,
             ActionHandler actionHandler, HostProviders hostProviders,
             Map<String, Template> templates, View frameView) {
-        currentFrame = frame;
-        this.stylesheet = stylesheet;
-        this.bindingValues = bindingValues;
-        this.baseStyle = Style.getDefaultInstance();
-        this.stylesHelper = pietStylesHelper;
-        this.pietSharedStates = pietSharedStates;
-        this.debugBehavior = debugBehavior;
-        this.debugLogger = debugLogger;
-        this.actionHandler = actionHandler;
-        this.hostProviders = hostProviders;
-        this.hostBindingProvider = hostProviders.getHostBindingProvider();
-        this.templates = templates;
-        this.frameView = frameView;
-        this.templateMediaQueryStylesheets = new HashMap<>();
+        mCurrentFrame = frame;
+        this.mStylesheet = stylesheet;
+        this.mBindingValues = bindingValues;
+        this.mBaseStyle = Style.getDefaultInstance();
+        this.mStyleshelper = pietStylesHelper;
+        this.mPietSharedStates = pietSharedStates;
+        this.mDebugBehavior = debugBehavior;
+        this.mDebugLogger = debugLogger;
+        this.mActionHandler = actionHandler;
+        this.mHostProviders = hostProviders;
+        this.mHostBindingProvider = hostProviders.getHostBindingProvider();
+        this.mTemplates = templates;
+        this.mFrameView = frameView;
+        this.mTemplateMediaQueryStylesheets = new HashMap<>();
     }
 
     /**
@@ -152,8 +152,8 @@
 
     /** Return any of the template's stylesheets that could be affected by a MediaQuery. */
     List<Stylesheet> getMediaQueryStylesheets(Template template) {
-        if (templateMediaQueryStylesheets.containsKey(template)) {
-            return templateMediaQueryStylesheets.get(template);
+        if (mTemplateMediaQueryStylesheets.containsKey(template)) {
+            return mTemplateMediaQueryStylesheets.get(template);
         }
 
         ArrayList<Stylesheet> mediaQueryStylesheets = new ArrayList<>();
@@ -164,7 +164,7 @@
             }
         }
         for (String stylesheetId : template.getStylesheets().getStylesheetIdsList()) {
-            Stylesheet stylesheet = stylesHelper.getStylesheet(stylesheetId);
+            Stylesheet stylesheet = mStyleshelper.getStylesheet(stylesheetId);
             if (stylesheet != null && stylesheet.getConditionsCount() > 0) {
                 mediaQueryStylesheets.add(stylesheet);
             }
@@ -174,7 +174,7 @@
         List<Stylesheet> mediaQueryStylesheetsImmutable =
                 Collections.unmodifiableList(mediaQueryStylesheets);
 
-        templateMediaQueryStylesheets.put(template, mediaQueryStylesheetsImmutable);
+        mTemplateMediaQueryStylesheets.put(template, mediaQueryStylesheetsImmutable);
 
         return mediaQueryStylesheetsImmutable;
     }
@@ -187,31 +187,31 @@
     FrameContext createTemplateContext(Template template, BindingContext bindingContext) {
         Map<String, BindingValue> bindingValues = createBindingValueMap(bindingContext);
         Map<String, Style> localStylesheet =
-                stylesHelper.getStylesheetMap(template.getStylesheets(), getDebugLogger());
+                mStyleshelper.getStylesheetMap(template.getStylesheets(), getDebugLogger());
 
-        return new FrameContext(currentFrame, localStylesheet, bindingValues, pietSharedStates,
-                stylesHelper, debugBehavior, debugLogger, actionHandler, hostProviders, templates,
-                frameView);
+        return new FrameContext(mCurrentFrame, localStylesheet, bindingValues, mPietSharedStates,
+                mStyleshelper, mDebugBehavior, mDebugLogger, mActionHandler, mHostProviders,
+                mTemplates, mFrameView);
     }
 
     public DebugBehavior getDebugBehavior() {
-        return debugBehavior;
+        return mDebugBehavior;
     }
 
     public DebugLogger getDebugLogger() {
-        return debugLogger;
+        return mDebugLogger;
     }
 
     public Frame getFrame() {
-        return currentFrame;
+        return mCurrentFrame;
     }
 
     public ActionHandler getActionHandler() {
-        return actionHandler;
+        return mActionHandler;
     }
 
     public Template getTemplate(String templateId) {
-        Template template = templates.get(templateId);
+        Template template = mTemplates.get(templateId);
         if (template == null) {
             throw new PietFatalException(ERR_MISSING_TEMPLATE,
                     reportMessage(MessageType.ERROR, ERR_MISSING_TEMPLATE,
@@ -221,14 +221,14 @@
     }
 
     public List<PietSharedState> getPietSharedStates() {
-        return pietSharedStates;
+        return mPietSharedStates;
     }
 
     /** Return a {@link StyleProvider} for the style. */
     public StyleProvider makeStyleFor(StyleIdsStack styles) {
         return new StyleProvider(
-                PietStylesHelper.mergeStyleIdsStack(baseStyle, styles, stylesheet, this),
-                hostProviders.getAssetProvider());
+                PietStylesHelper.mergeStyleIdsStack(mBaseStyle, styles, mStylesheet, this),
+                mHostProviders.getAssetProvider());
     }
 
     /**
@@ -237,11 +237,11 @@
      */
     /*@Nullable*/
     GridCellWidth getGridCellWidthFromBinding(GridCellWidthBindingRef binding) {
-        BindingValue bindingValue = bindingValues.get(binding.getBindingId());
+        BindingValue bindingValue = mBindingValues.get(binding.getBindingId());
         // Purposefully check for host binding and overwrite here as we want to perform the
         // hasCellWidth checks on host binding.   This allows the host to act more like the server.
         if (bindingValue != null && bindingValue.hasHostBindingData()) {
-            bindingValue = hostBindingProvider.getGridCellWidthBindingForValue(bindingValue);
+            bindingValue = mHostBindingProvider.getGridCellWidthBindingForValue(bindingValue);
         }
         return bindingValue == null || !bindingValue.hasCellWidth() ? null
                                                                     : bindingValue.getCellWidth();
@@ -252,9 +252,9 @@
      * default instance.
      */
     Actions getActionsFromBinding(ActionsBindingRef binding) {
-        BindingValue bindingValue = bindingValues.get(binding.getBindingId());
+        BindingValue bindingValue = mBindingValues.get(binding.getBindingId());
         if (bindingValue != null && bindingValue.hasHostBindingData()) {
-            bindingValue = hostBindingProvider.getActionsBindingForValue(bindingValue);
+            bindingValue = mHostBindingProvider.getActionsBindingForValue(bindingValue);
         }
         if (bindingValue == null) {
             return Actions.getDefaultInstance();
@@ -273,7 +273,7 @@
      * default instance.
      */
     BoundStyle getStyleFromBinding(StyleBindingRef binding) {
-        return getStyleFromBinding(binding, bindingValues);
+        return getStyleFromBinding(binding, mBindingValues);
     }
 
     /**
@@ -284,7 +284,7 @@
             StyleBindingRef binding, Map<String, BindingValue> bindingValues) {
         BindingValue bindingValue = bindingValues.get(binding.getBindingId());
         if (bindingValue != null && bindingValue.hasHostBindingData()) {
-            bindingValue = hostBindingProvider.getStyleBindingForValue(bindingValue);
+            bindingValue = mHostBindingProvider.getStyleBindingForValue(bindingValue);
         }
         if (bindingValue == null) {
             return BoundStyle.getDefaultInstance();
@@ -301,9 +301,9 @@
     /** Returns the {@link BindingValue} for the BindingRef; otherwise returns null. */
     /*@Nullable*/
     Visibility getVisibilityFromBinding(VisibilityBindingRef binding) {
-        BindingValue bindingValue = bindingValues.get(binding.getBindingId());
+        BindingValue bindingValue = mBindingValues.get(binding.getBindingId());
         if (bindingValue != null && bindingValue.hasHostBindingData()) {
-            bindingValue = hostBindingProvider.getVisibilityBindingForValue(bindingValue);
+            bindingValue = mHostBindingProvider.getVisibilityBindingForValue(bindingValue);
         }
         if (bindingValue == null) {
             return null;
@@ -321,7 +321,7 @@
     Image filterImageSourcesByMediaQueryCondition(Image image) {
         Image.Builder imageBuilder = image.toBuilder().clearSources();
         for (ImageSource source : image.getSourcesList()) {
-            if (stylesHelper.areMediaQueriesMet(source.getConditionsList())) {
+            if (mStyleshelper.areMediaQueriesMet(source.getConditionsList())) {
                 imageBuilder.addSources(source);
             }
         }
@@ -335,7 +335,7 @@
     BindingValue getTemplateInvocationBindingValue(TemplateBindingRef binding) {
         BindingValue bindingValue = getBindingValue(binding.getBindingId());
         if (bindingValue.hasHostBindingData()) {
-            bindingValue = hostBindingProvider.getTemplateBindingForValue(bindingValue);
+            bindingValue = mHostBindingProvider.getTemplateBindingForValue(bindingValue);
         }
         if (!bindingValue.hasTemplateInvocation() && !binding.getIsOptional()) {
             throw new PietFatalException(ERR_MISSING_BINDING_VALUE,
@@ -354,7 +354,7 @@
     BindingValue getCustomElementBindingValue(CustomBindingRef binding) {
         BindingValue bindingValue = getBindingValue(binding.getBindingId());
         if (bindingValue.hasHostBindingData()) {
-            bindingValue = hostBindingProvider.getCustomElementDataBindingForValue(bindingValue);
+            bindingValue = mHostBindingProvider.getCustomElementDataBindingForValue(bindingValue);
         }
         if (!bindingValue.hasCustomElementData() && !binding.getIsOptional()) {
             throw new PietFatalException(ERR_MISSING_BINDING_VALUE,
@@ -373,7 +373,7 @@
     BindingValue getChunkedTextBindingValue(ChunkedTextBindingRef binding) {
         BindingValue bindingValue = getBindingValue(binding.getBindingId());
         if (bindingValue.hasHostBindingData()) {
-            bindingValue = hostBindingProvider.getChunkedTextBindingForValue(bindingValue);
+            bindingValue = mHostBindingProvider.getChunkedTextBindingForValue(bindingValue);
         }
         if (!bindingValue.hasChunkedText() && !binding.getIsOptional()) {
             throw new PietFatalException(ERR_MISSING_BINDING_VALUE,
@@ -392,7 +392,7 @@
     BindingValue getParameterizedTextBindingValue(ParameterizedTextBindingRef binding) {
         BindingValue bindingValue = getBindingValue(binding.getBindingId());
         if (bindingValue.hasHostBindingData()) {
-            bindingValue = hostBindingProvider.getParameterizedTextBindingForValue(bindingValue);
+            bindingValue = mHostBindingProvider.getParameterizedTextBindingForValue(bindingValue);
         }
         if (!bindingValue.hasParameterizedText() && !binding.getIsOptional()) {
             throw new PietFatalException(ERR_MISSING_BINDING_VALUE,
@@ -411,7 +411,7 @@
     BindingValue getImageBindingValue(ImageBindingRef binding) {
         BindingValue bindingValue = getBindingValue(binding.getBindingId());
         if (bindingValue.hasHostBindingData()) {
-            bindingValue = hostBindingProvider.getImageBindingForValue(bindingValue);
+            bindingValue = mHostBindingProvider.getImageBindingForValue(bindingValue);
         }
         if (!bindingValue.hasImage() && !binding.getIsOptional()) {
             throw new PietFatalException(ERR_MISSING_BINDING_VALUE,
@@ -430,7 +430,7 @@
     BindingValue getElementBindingValue(ElementBindingRef binding) {
         BindingValue bindingValue = getBindingValue(binding.getBindingId());
         if (bindingValue.hasHostBindingData()) {
-            bindingValue = hostBindingProvider.getElementBindingForValue(bindingValue);
+            bindingValue = mHostBindingProvider.getElementBindingForValue(bindingValue);
         }
         if (!bindingValue.hasElement() && !binding.getIsOptional()) {
             throw new PietFatalException(ERR_MISSING_BINDING_VALUE,
@@ -448,9 +448,9 @@
      */
     /*@Nullable*/
     LogData getLogDataFromBinding(LogDataBindingRef binding) {
-        BindingValue bindingValue = bindingValues.get(binding.getBindingId());
+        BindingValue bindingValue = mBindingValues.get(binding.getBindingId());
         if (bindingValue != null && bindingValue.hasHostBindingData()) {
-            bindingValue = hostBindingProvider.getLogDataBindingForValue(bindingValue);
+            bindingValue = mHostBindingProvider.getLogDataBindingForValue(bindingValue);
         }
         if (bindingValue == null) {
             return null;
@@ -467,11 +467,11 @@
 
     /** Returns the root view of this Frame. */
     View getFrameView() {
-        return frameView;
+        return mFrameView;
     }
 
     private BindingValue getBindingValue(String bindingId) {
-        BindingValue returnValue = bindingValues.get(bindingId);
+        BindingValue returnValue = mBindingValues.get(bindingId);
         if (returnValue == null) {
             return BindingValue.getDefaultInstance();
         }
@@ -483,8 +483,8 @@
      * the site of the error.
      */
     public String reportMessage(@MessageType int messageType, String message) {
-        String e = String.format("[%s] %s", currentFrame.getTag(), message);
-        debugLogger.recordMessage(messageType, e);
+        String e = String.format("[%s] %s", mCurrentFrame.getTag(), message);
+        mDebugLogger.recordMessage(messageType, e);
         return e;
     }
 
@@ -493,8 +493,8 @@
      * the site of the error.
      */
     public String reportMessage(@MessageType int messageType, ErrorCode errorCode, String message) {
-        String e = String.format("[%s] %s", currentFrame.getTag(), message);
-        debugLogger.recordMessage(messageType, errorCode, e);
+        String e = String.format("[%s] %s", mCurrentFrame.getTag(), message);
+        mDebugLogger.recordMessage(messageType, errorCode, e);
         return e;
     }
 
@@ -504,7 +504,7 @@
         for (BindingValue bindingValue : bindingContext.getBindingValuesList()) {
             if (bindingValue.hasBindingIdFromTranscludingTemplate()) {
                 BindingValue parentBindingValue =
-                        bindingValues.get(bindingValue.getBindingIdFromTranscludingTemplate());
+                        mBindingValues.get(bindingValue.getBindingIdFromTranscludingTemplate());
                 if (parentBindingValue != null) {
                     BindingValue bindingValueForChild =
                             parentBindingValue.toBuilder()
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/GridRowAdapter.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/GridRowAdapter.java
index 36e263a..a993cdf 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/GridRowAdapter.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/GridRowAdapter.java
@@ -40,7 +40,7 @@
 
     private GridRowAdapter(Context context, AdapterParameters parameters) {
         super(context, parameters,
-                createView(context, parameters.hostProviders.getAssetProvider().isRtLSupplier()),
+                createView(context, parameters.mHostProviders.getAssetProvider().isRtLSupplier()),
                 KeySupplier.SINGLETON_KEY);
     }
 
@@ -68,14 +68,14 @@
         super.onBindModel(gridRow, baseElement, frameContext);
 
         int adapterIndex = 0;
-        checkState(gridRow.getCellsCount() == adaptersPerContent.length,
+        checkState(gridRow.getCellsCount() == mAdaptersPerContent.length,
                 "Mismatch between number of cells (%s) and adaptersPerContent (%s);"
                         + " problem in creation?",
-                gridRow.getCellsCount(), adaptersPerContent.length);
+                gridRow.getCellsCount(), mAdaptersPerContent.length);
         for (int contentIndex = 0; contentIndex < gridRow.getCellsCount(); contentIndex++) {
             GridCell cell = gridRow.getCells(contentIndex);
-            for (int i = 0; i < adaptersPerContent[contentIndex]; i++) {
-                setLayoutParamsOnCell(childAdapters.get(adapterIndex), cell, frameContext);
+            for (int i = 0; i < mAdaptersPerContent[contentIndex]; i++) {
+                setLayoutParamsOnCell(mChildAdapters.get(adapterIndex), cell, frameContext);
                 adapterIndex++;
             }
         }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/HostProviders.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/HostProviders.java
index 60f3a7c..300ca68a 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/HostProviders.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/HostProviders.java
@@ -11,34 +11,34 @@
 
 /** Wrapper class to hold all host-related objects. */
 public class HostProviders {
-    private final AssetProvider assetProvider;
-    private final CustomElementProvider customElementProvider;
-    private final HostBindingProvider hostBindingProvider;
-    /*@Nullable*/ private final LogDataCallback logDataCallback;
+    private final AssetProvider mAssetProvider;
+    private final CustomElementProvider mCustomElementProvider;
+    private final HostBindingProvider mHostBindingProvider;
+    /*@Nullable*/ private final LogDataCallback mLogDataCallback;
 
     public HostProviders(AssetProvider assetProvider, CustomElementProvider customElementProvider,
             HostBindingProvider hostBindingProvider,
             /*@Nullable*/ LogDataCallback logDataCallback) {
-        this.assetProvider = assetProvider;
-        this.customElementProvider = customElementProvider;
-        this.hostBindingProvider = hostBindingProvider;
-        this.logDataCallback = logDataCallback;
+        this.mAssetProvider = assetProvider;
+        this.mCustomElementProvider = customElementProvider;
+        this.mHostBindingProvider = hostBindingProvider;
+        this.mLogDataCallback = logDataCallback;
     }
 
     public AssetProvider getAssetProvider() {
-        return assetProvider;
+        return mAssetProvider;
     }
 
     public CustomElementProvider getCustomElementProvider() {
-        return customElementProvider;
+        return mCustomElementProvider;
     }
 
     public HostBindingProvider getHostBindingProvider() {
-        return hostBindingProvider;
+        return mHostBindingProvider;
     }
 
     /*@Nullable*/
     public LogDataCallback getLogDataCallback() {
-        return logDataCallback;
+        return mLogDataCallback;
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/ImageElementAdapter.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/ImageElementAdapter.java
index 36858c9..28e63448 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/ImageElementAdapter.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/ImageElementAdapter.java
@@ -26,7 +26,7 @@
 class ImageElementAdapter extends ElementAdapter<AspectRatioScalingImageView, ImageElement> {
     private static final String TAG = "ImageElementAdapter";
 
-    /*@Nullable*/ private LoadImageCallback currentlyLoadingImage;
+    /*@Nullable*/ private LoadImageCallback mCurrentlyLoadingImage;
 
     @VisibleForTesting
     ImageElementAdapter(Context context, AdapterParameters parameters) {
@@ -47,14 +47,14 @@
         StyleProvider style = getElementStyle();
         Context context = getContext();
 
-        widthPx = style.getWidthSpecPx(context);
+        mWidthPx = style.getWidthSpecPx(context);
 
         if (style.hasHeight()) {
-            heightPx = style.getHeightSpecPx(context);
+            mHeightPx = style.getHeightSpecPx(context);
         } else {
             // Defaults to a square when only the width is defined.
             // TODO: This is not cross-platform standard; should probably get rid of this.
-            heightPx = widthPx > 0 ? widthPx : StyleProvider.DIMENSION_NOT_SET;
+            mHeightPx = mWidthPx > 0 ? mWidthPx : StyleProvider.DIMENSION_NOT_SET;
         }
     }
 
@@ -93,13 +93,14 @@
 
         getBaseView().setDefaultAspectRatio(getAspectRatio(image));
 
-        checkState(currentlyLoadingImage == null, "An image loading callback exists; unbind first");
+        checkState(
+                mCurrentlyLoadingImage == null, "An image loading callback exists; unbind first");
         Integer overlayColor = getElementStyle().hasColor() ? getElementStyle().getColor() : null;
         LoadImageCallback loadImageCallback = createLoadImageCallback(
                 getElementStyle().getScaleType(), overlayColor, frameContext);
-        currentlyLoadingImage = loadImageCallback;
-        getParameters().hostProviders.getAssetProvider().getImage(image,
-                convertDimensionForImageLoader(widthPx), convertDimensionForImageLoader(heightPx),
+        mCurrentlyLoadingImage = loadImageCallback;
+        getParameters().mHostProviders.getAssetProvider().getImage(image,
+                convertDimensionForImageLoader(mWidthPx), convertDimensionForImageLoader(mHeightPx),
                 loadImageCallback);
     }
 
@@ -119,9 +120,9 @@
 
     @Override
     void onUnbindModel() {
-        if (currentlyLoadingImage != null) {
-            currentlyLoadingImage.cancel();
-            currentlyLoadingImage = null;
+        if (mCurrentlyLoadingImage != null) {
+            mCurrentlyLoadingImage.cancel();
+            mCurrentlyLoadingImage = null;
         }
         ImageView imageView = getBaseView();
         if (imageView != null) {
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/KeyedRecyclerPool.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/KeyedRecyclerPool.java
index 053fa506..7354573a 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/KeyedRecyclerPool.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/KeyedRecyclerPool.java
@@ -14,12 +14,12 @@
  * <p>TODO: This should be made real so it supports control of the pool size
  */
 class KeyedRecyclerPool<A extends ElementAdapter<?, ?>> implements RecyclerPool<A> {
-    private final LruCache<RecyclerKey, SingleKeyRecyclerPool<A>> poolMap;
-    private final int capacityPerPool;
+    private final LruCache<RecyclerKey, SingleKeyRecyclerPool<A>> mPoolMap;
+    private final int mCapacityPerPool;
 
     KeyedRecyclerPool(int maxKeys, int capacityPerPool) {
-        poolMap = new LruCache<>(maxKeys);
-        this.capacityPerPool = capacityPerPool;
+        mPoolMap = new LruCache<>(maxKeys);
+        this.mCapacityPerPool = capacityPerPool;
     }
 
     @Override
@@ -28,7 +28,7 @@
         if (key == null) {
             return null;
         }
-        SingleKeyRecyclerPool<A> pool = poolMap.get(key);
+        SingleKeyRecyclerPool<A> pool = mPoolMap.get(key);
         if (pool == null) {
             return null;
         } else {
@@ -39,16 +39,16 @@
     @Override
     public void put(RecyclerKey key, A adapter) {
         checkNotNull(key, "null key for %s", adapter);
-        SingleKeyRecyclerPool<A> pool = poolMap.get(key);
+        SingleKeyRecyclerPool<A> pool = mPoolMap.get(key);
         if (pool == null) {
-            pool = new SingleKeyRecyclerPool<>(key, capacityPerPool);
-            poolMap.put(key, pool);
+            pool = new SingleKeyRecyclerPool<>(key, mCapacityPerPool);
+            mPoolMap.put(key, pool);
         }
         pool.put(key, adapter);
     }
 
     @Override
     public void clear() {
-        poolMap.evictAll();
+        mPoolMap.evictAll();
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/LoadImageCallback.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/LoadImageCallback.java
index 88b93a7..d3ff395 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/LoadImageCallback.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/LoadImageCallback.java
@@ -20,76 +20,76 @@
 public class LoadImageCallback implements Consumer</*@Nullable*/ Drawable> {
     static final int FADE_IN_ANIMATION_TIME_MS = 300;
 
-    private final ImageView imageView;
-    private final ScaleType scaleType;
-    private final long initialTime;
-    /*@Nullable*/ private final Integer overlayColor;
-    private final boolean fadeImage;
-    private final AdapterParameters parameters;
+    private final ImageView mImageView;
+    private final ScaleType mScaleType;
+    private final long mInitialTime;
+    /*@Nullable*/ private final Integer mOverlayColor;
+    private final boolean mFadeImage;
+    private final AdapterParameters mParameters;
 
-    private boolean cancelled;
+    private boolean mCancelled;
 
-    /*@Nullable*/ private Drawable finalDrawable;
+    /*@Nullable*/ private Drawable mFinalDrawable;
 
     LoadImageCallback(ImageView imageView, ScaleType scaleType,
             /*@Nullable*/ Integer overlayColor, boolean fadeImage, AdapterParameters parameters,
             FrameContext frameContext) {
-        this.imageView = imageView;
-        this.scaleType = scaleType;
-        this.overlayColor = overlayColor;
-        this.fadeImage = fadeImage;
-        this.parameters = parameters;
-        this.initialTime = parameters.clock.elapsedRealtime();
+        this.mImageView = imageView;
+        this.mScaleType = scaleType;
+        this.mOverlayColor = overlayColor;
+        this.mFadeImage = fadeImage;
+        this.mParameters = parameters;
+        this.mInitialTime = parameters.mClock.elapsedRealtime();
     }
 
     @Override
     public void accept(/*@Nullable*/ Drawable drawable) {
-        if (cancelled || drawable == null) {
+        if (mCancelled || drawable == null) {
             return;
         }
 
-        imageView.setScaleType(scaleType);
+        mImageView.setScaleType(mScaleType);
 
-        final Drawable localDrawable = ViewUtils.applyOverlayColor(drawable, overlayColor);
-        this.finalDrawable = localDrawable;
+        final Drawable localDrawable = ViewUtils.applyOverlayColor(drawable, mOverlayColor);
+        this.mFinalDrawable = localDrawable;
 
         // If we are in the process of binding when we get the image, we should not fade in the
         // image as the image was cached.
         if (!shouldFadeInImage()) {
-            imageView.setImageDrawable(localDrawable);
+            mImageView.setImageDrawable(localDrawable);
             // Invalidating the view as the view doesn't update if not manually updated here.
-            imageView.invalidate();
+            mImageView.invalidate();
             return;
         }
 
-        Drawable initialDrawable = imageView.getDrawable() != null
-                ? imageView.getDrawable()
+        Drawable initialDrawable = mImageView.getDrawable() != null
+                ? mImageView.getDrawable()
                 : new ColorDrawable(Color.TRANSPARENT);
 
         TransitionDrawable transitionDrawable =
                 new TransitionDrawable(new Drawable[] {initialDrawable, localDrawable});
-        imageView.setImageDrawable(transitionDrawable);
+        mImageView.setImageDrawable(transitionDrawable);
         transitionDrawable.setCrossFadeEnabled(true);
         transitionDrawable.startTransition(FADE_IN_ANIMATION_TIME_MS);
 
-        imageView.postDelayed(() -> {
-            if (cancelled) {
+        mImageView.postDelayed(() -> {
+            if (mCancelled) {
                 return;
             }
             // Allows GC of the initial drawable and the transition drawable. Additionally
             // fixes the issue where the transition sometimes doesn't occur, which would
             // result in blank images.
-            imageView.setImageDrawable(this.finalDrawable);
+            mImageView.setImageDrawable(this.mFinalDrawable);
         }, FADE_IN_ANIMATION_TIME_MS);
     }
 
     private boolean shouldFadeInImage() {
-        return fadeImage
-                && (parameters.clock.elapsedRealtime() - initialTime)
-                > parameters.hostProviders.getAssetProvider().getFadeImageThresholdMs();
+        return mFadeImage
+                && (mParameters.mClock.elapsedRealtime() - mInitialTime)
+                > mParameters.mHostProviders.getAssetProvider().getFadeImageThresholdMs();
     }
 
     void cancel() {
-        this.cancelled = true;
+        this.mCancelled = true;
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/MediaQueryHelper.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/MediaQueryHelper.java
index cdb9413..e61d43e7 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/MediaQueryHelper.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/MediaQueryHelper.java
@@ -20,25 +20,25 @@
 public class MediaQueryHelper {
     private static final String TAG = "MediaQueryHelper";
 
-    private final int frameWidthPx;
-    private final int deviceOrientation;
-    private final boolean isDarkTheme;
-    private final Context context;
+    private final int mFrameWidthPx;
+    private final int mDeviceOrientation;
+    private final boolean mIsDarkTheme;
+    private final Context mContext;
 
     MediaQueryHelper(int frameWidthPx, AssetProvider assetProvider, Context context) {
-        this.frameWidthPx = frameWidthPx;
-        this.deviceOrientation = context.getResources().getConfiguration().orientation;
-        this.isDarkTheme = assetProvider.isDarkTheme();
-        this.context = context;
+        this.mFrameWidthPx = frameWidthPx;
+        this.mDeviceOrientation = context.getResources().getConfiguration().orientation;
+        this.mIsDarkTheme = assetProvider.isDarkTheme();
+        this.mContext = context;
     }
 
     @VisibleForTesting
     MediaQueryHelper(
             int frameWidthPx, int deviceOrientation, boolean isDarkTheme, Context context) {
-        this.frameWidthPx = frameWidthPx;
-        this.deviceOrientation = deviceOrientation;
-        this.isDarkTheme = isDarkTheme;
-        this.context = context;
+        this.mFrameWidthPx = frameWidthPx;
+        this.mDeviceOrientation = deviceOrientation;
+        this.mIsDarkTheme = isDarkTheme;
+        this.mContext = context;
     }
 
     boolean areMediaQueriesMet(List<MediaQueryCondition> conditions) {
@@ -56,16 +56,16 @@
         switch (condition.getConditionCase()) {
             case FRAME_WIDTH:
                 int targetWidth =
-                        (int) LayoutUtils.dpToPx(condition.getFrameWidth().getWidth(), context);
+                        (int) LayoutUtils.dpToPx(condition.getFrameWidth().getWidth(), mContext);
                 switch (condition.getFrameWidth().getCondition()) {
                     case EQUALS:
-                        return frameWidthPx == targetWidth;
+                        return mFrameWidthPx == targetWidth;
                     case GREATER_THAN:
-                        return frameWidthPx > targetWidth;
+                        return mFrameWidthPx > targetWidth;
                     case LESS_THAN:
-                        return frameWidthPx < targetWidth;
+                        return mFrameWidthPx < targetWidth;
                     case NOT_EQUALS:
-                        return frameWidthPx != targetWidth;
+                        return mFrameWidthPx != targetWidth;
                     default:
                         throw new PietFatalException(ErrorCode.ERR_INVALID_MEDIA_QUERY_CONDITION,
                                 String.format("Unhandled ComparisonCondition: %s",
@@ -74,32 +74,30 @@
             case ORIENTATION:
                 switch (condition.getOrientation().getOrientation()) {
                     case LANDSCAPE:
-                        return deviceOrientation == Configuration.ORIENTATION_LANDSCAPE;
+                        return mDeviceOrientation == Configuration.ORIENTATION_LANDSCAPE;
                     case UNSPECIFIED:
                         Logger.w(TAG, "Got UNSPECIFIED orientation; defaulting to PORTRAIT");
                         // fall through
                     case PORTRAIT:
-                        return deviceOrientation == Configuration.ORIENTATION_PORTRAIT
-                                || deviceOrientation == Configuration.ORIENTATION_SQUARE;
-                    default:
-                        throw new PietFatalException(ErrorCode.ERR_INVALID_MEDIA_QUERY_CONDITION,
-                                String.format("Unhandled Orientation: %s",
-                                        condition.getOrientation().getOrientation()));
+                        return mDeviceOrientation == Configuration.ORIENTATION_PORTRAIT
+                                || mDeviceOrientation == Configuration.ORIENTATION_SQUARE;
                 }
+                throw new PietFatalException(ErrorCode.ERR_INVALID_MEDIA_QUERY_CONDITION,
+                        String.format("Unhandled Orientation: %s",
+                                condition.getOrientation().getOrientation()));
             case DARK_LIGHT:
                 switch (condition.getDarkLight().getMode()) {
                     case DARK:
-                        return isDarkTheme;
+                        return mIsDarkTheme;
                     case UNSPECIFIED:
                         Logger.w(TAG, "Got UNSPECIFIED DarkLightMode; defaulting to LIGHT");
                         // fall through
                     case LIGHT:
-                        return !isDarkTheme;
-                    default:
-                        throw new PietFatalException(ErrorCode.ERR_INVALID_MEDIA_QUERY_CONDITION,
-                                String.format("Unhandled DarkLightMode: %s",
-                                        condition.getDarkLight().getMode()));
+                        return !mIsDarkTheme;
                 }
+                throw new PietFatalException(ErrorCode.ERR_INVALID_MEDIA_QUERY_CONDITION,
+                        String.format(
+                                "Unhandled DarkLightMode: %s", condition.getDarkLight().getMode()));
             default:
                 throw new PietFatalException(ErrorCode.ERR_INVALID_MEDIA_QUERY_CONDITION,
                         String.format(
@@ -116,16 +114,16 @@
             return false;
         }
         MediaQueryHelper that = (MediaQueryHelper) o;
-        return frameWidthPx == that.frameWidthPx && deviceOrientation == that.deviceOrientation
-                && isDarkTheme == that.isDarkTheme && context.equals(that.context);
+        return mFrameWidthPx == that.mFrameWidthPx && mDeviceOrientation == that.mDeviceOrientation
+                && mIsDarkTheme == that.mIsDarkTheme && mContext.equals(that.mContext);
     }
 
     @Override
     public int hashCode() {
-        int result = frameWidthPx;
-        result = 31 * result + deviceOrientation;
-        result = 31 * result + (isDarkTheme ? 1 : 0);
-        result = 31 * result + context.hashCode();
+        int result = mFrameWidthPx;
+        result = 31 * result + mDeviceOrientation;
+        result = 31 * result + (mIsDarkTheme ? 1 : 0);
+        result = 31 * result + mContext.hashCode();
         return result;
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/NoKeyOverwriteHashMap.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/NoKeyOverwriteHashMap.java
index f68b0fb2a..cdb401f 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/NoKeyOverwriteHashMap.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/NoKeyOverwriteHashMap.java
@@ -11,21 +11,21 @@
 /** Map that throws if you try to insert a second key with the same value. */
 public class NoKeyOverwriteHashMap<K, V> extends HashMap<K, V> {
     /** A term for the items this map contains (ex. "Style" or "Template"); used in debug logs. */
-    private final String termForContentValue;
+    private final String mTermForContentValue;
 
-    private final ErrorCode errorCodeForDuplicate;
+    private final ErrorCode mErrorCodeForDuplicate;
 
     NoKeyOverwriteHashMap(String termForContentValue, ErrorCode errorCodeForDuplicate) {
-        this.termForContentValue = termForContentValue;
-        this.errorCodeForDuplicate = errorCodeForDuplicate;
+        this.mTermForContentValue = termForContentValue;
+        this.mErrorCodeForDuplicate = errorCodeForDuplicate;
     }
 
     @Override
     /*@Nullable*/
     public V put(K key, V value) {
         if (containsKey(key)) {
-            throw new PietFatalException(errorCodeForDuplicate,
-                    String.format("%s key '%s' already defined", termForContentValue, key));
+            throw new PietFatalException(mErrorCodeForDuplicate,
+                    String.format("%s key '%s' already defined", mTermForContentValue, key));
         }
         return super.put(key, value);
     }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/ParameterizedTextElementAdapter.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/ParameterizedTextElementAdapter.java
index 74659afa..5b8abe9 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/ParameterizedTextElementAdapter.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/ParameterizedTextElementAdapter.java
@@ -57,7 +57,7 @@
         }
 
         textView.setText(getTemplatedStringEvaluator().evaluate(
-                getParameters().hostProviders.getAssetProvider(), parameterizedText));
+                getParameters().mHostProviders.getAssetProvider(), parameterizedText));
     }
 
     static class KeySupplier extends TextElementKeySupplier<ParameterizedTextElementAdapter> {
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/ParameterizedTextEvaluator.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/ParameterizedTextEvaluator.java
index 2cf5cbf..3d67f27 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/ParameterizedTextEvaluator.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/ParameterizedTextEvaluator.java
@@ -21,10 +21,10 @@
 /** Helper class to format templated strings when rendering cards. */
 public class ParameterizedTextEvaluator {
     private static final String TAG = "ParameterizedTextEvalua";
-    private final Clock clock;
+    private final Clock mClock;
 
     ParameterizedTextEvaluator(Clock clock) {
-        this.clock = clock;
+        this.mClock = clock;
     }
 
     /** Evaluates the given parameterized string, respecting the HTML setting */
@@ -86,7 +86,7 @@
     /*@Nullable*/
     private String evaluateParam(AssetProvider assetProvider, ParameterizedText.Parameter param) {
         if (param.hasTimestampSeconds()) {
-            long elapsedTimeMillis = clock.currentTimeMillis()
+            long elapsedTimeMillis = mClock.currentTimeMillis()
                     - TimeUnit.SECONDS.toMillis(param.getTimestampSeconds());
             return assetProvider.getRelativeElapsedString(elapsedTimeMillis);
         }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/PietFatalException.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/PietFatalException.java
index 759c3f4..f844c59 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/PietFatalException.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/PietFatalException.java
@@ -8,14 +8,14 @@
 
 /** Exception that carries a Piet error code */
 class PietFatalException extends IllegalArgumentException {
-    private final ErrorCode errorCode;
+    private final ErrorCode mErrorCode;
 
     PietFatalException(ErrorCode errorCode, String message) {
         super(message);
-        this.errorCode = errorCode;
+        this.mErrorCode = errorCode;
     }
 
     ErrorCode getErrorCode() {
-        return errorCode;
+        return mErrorCode;
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/PietManager.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/PietManager.java
index 068d9e7..4c927848 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/PietManager.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/PietManager.java
@@ -52,40 +52,40 @@
                 Suppliers.of(Long.MAX_VALUE);
         private static final TypefaceProvider NULL_TYPEFACE_PROVIDER = new NullTypefaceProvider();
 
-        private ImageLoader imageLoader = BLANK_IMAGE_LOADER;
-        private StringFormatter stringFormatter = EMPTY_STRING_FORMATTER;
-        private Supplier<Integer> defaultCornerRadiusSupplier = CORNER_RADIUS_DEFAULT;
-        private Supplier<Boolean> isDarkThemeSupplier = DARK_THEME_DEFAULT;
-        private Supplier<Long> fadeImageThresholdMsSupplier = FADE_IMAGE_THRESHOLD_DEFAULT;
-        private TypefaceProvider typefaceProvider = NULL_TYPEFACE_PROVIDER;
-        private Supplier<Boolean> isRtLSupplier = LayoutUtils::isDefaultLocaleRtl;
+        private ImageLoader mImageLoader = BLANK_IMAGE_LOADER;
+        private StringFormatter mStringFormatter = EMPTY_STRING_FORMATTER;
+        private Supplier<Integer> mDefaultCornerRadiusSupplier = CORNER_RADIUS_DEFAULT;
+        private Supplier<Boolean> mIsDarkThemeSupplier = DARK_THEME_DEFAULT;
+        private Supplier<Long> mFadeImageThresholdMsSupplier = FADE_IMAGE_THRESHOLD_DEFAULT;
+        private TypefaceProvider mTypefaceProvider = NULL_TYPEFACE_PROVIDER;
+        private Supplier<Boolean> mIsRtLSupplier = LayoutUtils::isDefaultLocaleRtl;
 
-        private DebugBehavior debugBehavior = DebugBehavior.SILENT;
-        /*@MonotonicNonNull*/ private CustomElementProvider customElementProvider;
-        /*@MonotonicNonNull*/ private HostBindingProvider hostBindingProvider;
-        /*@MonotonicNonNull*/ private Clock clock;
-        private boolean allowLegacyRoundedCornerImpl;
-        private boolean allowOutlineRoundedCornerImpl;
+        private DebugBehavior mDebugBehavior = DebugBehavior.SILENT;
+        /*@MonotonicNonNull*/ private CustomElementProvider mCustomElementProvider;
+        /*@MonotonicNonNull*/ private HostBindingProvider mHostBindingProvider;
+        /*@MonotonicNonNull*/ private Clock mClock;
+        private boolean mAllowLegacyRoundedCornerImpl;
+        private boolean mAllowOutlineRoundedCornerImpl;
 
         private Builder() {}
 
         public Builder setDebugBehavior(DebugBehavior debugBehavior) {
-            this.debugBehavior = debugBehavior;
+            this.mDebugBehavior = debugBehavior;
             return this;
         }
 
         public Builder setCustomElementProvider(CustomElementProvider customElementProvider) {
-            this.customElementProvider = customElementProvider;
+            this.mCustomElementProvider = customElementProvider;
             return this;
         }
 
         public Builder setHostBindingProvider(HostBindingProvider hostBindingProvider) {
-            this.hostBindingProvider = hostBindingProvider;
+            this.mHostBindingProvider = hostBindingProvider;
             return this;
         }
 
         public Builder setClock(Clock clock) {
-            this.clock = clock;
+            this.mClock = clock;
             return this;
         }
 
@@ -94,7 +94,7 @@
          * antialiasing.
          */
         public Builder setAllowLegacyRoundedCornerImpl(boolean allowLegacyRoundedCornerImpl) {
-            this.allowLegacyRoundedCornerImpl = allowLegacyRoundedCornerImpl;
+            this.mAllowLegacyRoundedCornerImpl = allowLegacyRoundedCornerImpl;
             return this;
         }
 
@@ -103,62 +103,62 @@
          * rounded for better performance.
          */
         public Builder setAllowOutlineRoundedCornerImpl(boolean allowOutlineRoundedCornerImpl) {
-            this.allowOutlineRoundedCornerImpl = allowOutlineRoundedCornerImpl;
+            this.mAllowOutlineRoundedCornerImpl = allowOutlineRoundedCornerImpl;
             return this;
         }
 
         // AssetProvider-related setters
         public Builder setImageLoader(ImageLoader imageLoader) {
-            this.imageLoader = imageLoader;
+            this.mImageLoader = imageLoader;
             return this;
         }
 
         public Builder setStringFormatter(StringFormatter stringFormatter) {
-            this.stringFormatter = stringFormatter;
+            this.mStringFormatter = stringFormatter;
             return this;
         }
 
         public Builder setDefaultCornerRadius(Supplier<Integer> defaultCornerRadiusSupplier) {
-            this.defaultCornerRadiusSupplier = defaultCornerRadiusSupplier;
+            this.mDefaultCornerRadiusSupplier = defaultCornerRadiusSupplier;
             return this;
         }
 
         public Builder setFadeImageThresholdMs(Supplier<Long> fadeImageThresholdMsSupplier) {
-            this.fadeImageThresholdMsSupplier = fadeImageThresholdMsSupplier;
+            this.mFadeImageThresholdMsSupplier = fadeImageThresholdMsSupplier;
             return this;
         }
 
         public Builder setIsDarkTheme(Supplier<Boolean> isDarkThemeSupplier) {
-            this.isDarkThemeSupplier = isDarkThemeSupplier;
+            this.mIsDarkThemeSupplier = isDarkThemeSupplier;
             return this;
         }
 
         public Builder setIsRtL(Supplier<Boolean> isRtLSupplier) {
-            this.isRtLSupplier = isRtLSupplier;
+            this.mIsRtLSupplier = isRtLSupplier;
             return this;
         }
 
         public Builder setTypefaceProvider(TypefaceProvider typefaceProvider) {
-            this.typefaceProvider = typefaceProvider;
+            this.mTypefaceProvider = typefaceProvider;
             return this;
         }
         // End AssetProvider-related setters
 
         public PietManager build() {
-            customElementProvider = customElementProvider == null
+            mCustomElementProvider = mCustomElementProvider == null
                     ? new ThrowingCustomElementProvider()
-                    : customElementProvider;
-            hostBindingProvider =
-                    hostBindingProvider == null ? new HostBindingProvider() : hostBindingProvider;
-            clock = clock == null ? new SystemClockImpl() : clock;
+                    : mCustomElementProvider;
+            mHostBindingProvider =
+                    mHostBindingProvider == null ? new HostBindingProvider() : mHostBindingProvider;
+            mClock = mClock == null ? new SystemClockImpl() : mClock;
 
-            AssetProvider assetProvider = new AssetProvider(imageLoader, stringFormatter,
-                    defaultCornerRadiusSupplier, fadeImageThresholdMsSupplier, isDarkThemeSupplier,
-                    isRtLSupplier, typefaceProvider);
+            AssetProvider assetProvider = new AssetProvider(mImageLoader, mStringFormatter,
+                    mDefaultCornerRadiusSupplier, mFadeImageThresholdMsSupplier,
+                    mIsDarkThemeSupplier, mIsRtLSupplier, mTypefaceProvider);
 
-            return new PietManagerImpl(debugBehavior, assetProvider, customElementProvider,
-                    hostBindingProvider, clock, allowLegacyRoundedCornerImpl,
-                    allowOutlineRoundedCornerImpl);
+            return new PietManagerImpl(mDebugBehavior, assetProvider, mCustomElementProvider,
+                    mHostBindingProvider, mClock, mAllowLegacyRoundedCornerImpl,
+                    mAllowOutlineRoundedCornerImpl);
         }
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/PietManagerImpl.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/PietManagerImpl.java
index e551ac8..e062994 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/PietManagerImpl.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/PietManagerImpl.java
@@ -21,26 +21,26 @@
 /** Implementation of {@link PietManager}. */
 class PietManagerImpl implements PietManager {
     @VisibleForTesting
-    final AssetProvider assetProvider;
-    private final DebugBehavior debugBehavior;
-    private final CustomElementProvider customElementProvider;
-    private final HostBindingProvider hostBindingProvider;
-    private final Clock clock;
-    private final boolean allowLegacyRoundedCornerImpl;
-    private final boolean allowOutlineRoundedCornerImpl;
-    @VisibleForTesting /*@Nullable*/ AdapterParameters adapterParameters;
+    final AssetProvider mAssetProvider;
+    private final DebugBehavior mDebugBehavior;
+    private final CustomElementProvider mCustomElementProvider;
+    private final HostBindingProvider mHostBindingProvider;
+    private final Clock mClock;
+    private final boolean mAllowLegacyRoundedCornerImpl;
+    private final boolean mAllowOutlineRoundedCornerImpl;
+    @VisibleForTesting /*@Nullable*/ AdapterParameters mAdapterParameters;
 
     PietManagerImpl(DebugBehavior debugBehavior, AssetProvider assetProvider,
             CustomElementProvider customElementProvider, HostBindingProvider hostBindingProvider,
             Clock clock, boolean allowLegacyRoundedCornerImpl,
             boolean allowOutlineRoundedCornerImpl) {
-        this.debugBehavior = debugBehavior;
-        this.assetProvider = assetProvider;
-        this.customElementProvider = customElementProvider;
-        this.hostBindingProvider = hostBindingProvider;
-        this.clock = clock;
-        this.allowLegacyRoundedCornerImpl = allowLegacyRoundedCornerImpl;
-        this.allowOutlineRoundedCornerImpl = allowOutlineRoundedCornerImpl;
+        this.mDebugBehavior = debugBehavior;
+        this.mAssetProvider = assetProvider;
+        this.mCustomElementProvider = customElementProvider;
+        this.mHostBindingProvider = hostBindingProvider;
+        this.mClock = clock;
+        this.mAllowLegacyRoundedCornerImpl = allowLegacyRoundedCornerImpl;
+        this.mAllowOutlineRoundedCornerImpl = allowOutlineRoundedCornerImpl;
     }
 
     @Override
@@ -56,7 +56,8 @@
         AdapterParameters parameters =
                 getAdapterParameters(context, cardViewProducer, logDataCallback);
 
-        return new FrameAdapterImpl(context, parameters, actionHandler, eventLogger, debugBehavior);
+        return new FrameAdapterImpl(
+                context, parameters, actionHandler, eventLogger, mDebugBehavior);
     }
 
     /**
@@ -68,22 +69,22 @@
     AdapterParameters getAdapterParameters(Context context,
             Supplier</*@Nullable*/ ViewGroup> cardViewProducer,
             /*@Nullable*/ LogDataCallback logDataCallback) {
-        if (adapterParameters == null || adapterParameters.context != context) {
-            adapterParameters = new AdapterParameters(context, cardViewProducer,
-                    new HostProviders(assetProvider, customElementProvider, hostBindingProvider,
+        if (mAdapterParameters == null || mAdapterParameters.mContext != context) {
+            mAdapterParameters = new AdapterParameters(context, cardViewProducer,
+                    new HostProviders(mAssetProvider, mCustomElementProvider, mHostBindingProvider,
                             logDataCallback),
-                    clock, allowLegacyRoundedCornerImpl, allowOutlineRoundedCornerImpl);
+                    mClock, mAllowLegacyRoundedCornerImpl, mAllowOutlineRoundedCornerImpl);
         }
-        return adapterParameters;
+        return mAdapterParameters;
     }
 
     @Override
     public void purgeRecyclerPools() {
-        if (adapterParameters != null) {
-            AdapterParameters adapterParametersNonNull = adapterParameters;
-            adapterParametersNonNull.elementAdapterFactory.purgeRecyclerPools();
-            adapterParametersNonNull.pietStylesHelperFactory.purge();
-            adapterParametersNonNull.roundedCornerMaskCache.purge();
+        if (mAdapterParameters != null) {
+            AdapterParameters adapterParametersNonNull = mAdapterParameters;
+            adapterParametersNonNull.mElementAdapterFactory.purgeRecyclerPools();
+            adapterParametersNonNull.mPietStylesHelperFactory.purge();
+            adapterParametersNonNull.mRoundedCornerMaskCache.purge();
         }
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/PietStylesHelper.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/PietStylesHelper.java
index 30ab428..26f9bb8 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/PietStylesHelper.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/PietStylesHelper.java
@@ -29,49 +29,49 @@
 public class PietStylesHelper {
     private static final String TAG = "PietStylesHelper";
 
-    private final Map<Stylesheets, NoKeyOverwriteHashMap<String, Style>> multiStylesheetScopes =
+    private final Map<Stylesheets, NoKeyOverwriteHashMap<String, Style>> mMultiStylesheetScopes =
             new NoKeyOverwriteHashMap<>("Style", ErrorCode.ERR_DUPLICATE_STYLESHEET);
-    private final Map<String, Stylesheet> stylesheets =
+    private final Map<String, Stylesheet> mStylesheet =
             new NoKeyOverwriteHashMap<>("Stylesheet", ErrorCode.ERR_DUPLICATE_STYLESHEET);
-    private final Map<String, Template> templates =
+    private final Map<String, Template> mTemplates =
             new NoKeyOverwriteHashMap<>("Template", ErrorCode.ERR_DUPLICATE_TEMPLATE);
 
-    private final MediaQueryHelper mediaQueryHelper;
+    private final MediaQueryHelper mMediaQueryHelper;
 
     private PietStylesHelper(
             List<PietSharedState> pietSharedStates, MediaQueryHelper mediaQueryHelper) {
-        this.mediaQueryHelper = mediaQueryHelper;
+        this.mMediaQueryHelper = mediaQueryHelper;
         for (PietSharedState sharedState : pietSharedStates) {
             if (sharedState.getStylesheetsCount() > 0) {
                 for (Stylesheet stylesheet : sharedState.getStylesheetsList()) {
                     if (mediaQueryHelper.areMediaQueriesMet(stylesheet.getConditionsList())) {
-                        stylesheets.put(stylesheet.getStylesheetId(), stylesheet);
+                        mStylesheet.put(stylesheet.getStylesheetId(), stylesheet);
                     }
                 }
             }
 
             for (Template template : sharedState.getTemplatesList()) {
                 if (mediaQueryHelper.areMediaQueriesMet(template.getConditionsList())) {
-                    templates.put(template.getTemplateId(), template);
+                    mTemplates.put(template.getTemplateId(), template);
                 }
             }
         }
     }
 
     boolean areMediaQueriesMet(List<MediaQueryCondition> conditions) {
-        return mediaQueryHelper.areMediaQueriesMet(conditions);
+        return mMediaQueryHelper.areMediaQueriesMet(conditions);
     }
 
     /*@Nullable*/
     Stylesheet getStylesheet(String stylesheetId) {
-        return stylesheets.get(stylesheetId);
+        return mStylesheet.get(stylesheetId);
     }
 
     /** Returns a Map of style_id to Style. This represents the Stylesheet. */
     NoKeyOverwriteHashMap<String, Style> getStylesheetMap(
             Stylesheets stylesheetRefs, DebugLogger debugLogger) {
-        if (multiStylesheetScopes.containsKey(stylesheetRefs)) {
-            return multiStylesheetScopes.get(stylesheetRefs);
+        if (mMultiStylesheetScopes.containsKey(stylesheetRefs)) {
+            return mMultiStylesheetScopes.get(stylesheetRefs);
         }
 
         NoKeyOverwriteHashMap<String, Style> styleMap =
@@ -84,7 +84,7 @@
 
         // Add stylesheets referenced from PietSharedState.
         for (String stylesheetId : stylesheetRefs.getStylesheetIdsList()) {
-            Stylesheet stylesheet = stylesheets.get(stylesheetId);
+            Stylesheet stylesheet = mStylesheet.get(stylesheetId);
             if (stylesheet == null) {
                 String message = String.format(
                         "Stylesheet [%s] was not found in the PietSharedState", stylesheetId);
@@ -96,7 +96,7 @@
             addStylesToMapIfMediaQueryConditionsMet(stylesheet, styleMap);
         }
 
-        multiStylesheetScopes.put(stylesheetRefs, styleMap);
+        mMultiStylesheetScopes.put(stylesheetRefs, styleMap);
 
         return styleMap;
     }
@@ -118,11 +118,11 @@
     /** Returns a {@link Template} for the template */
     /*@Nullable*/
     public Template getTemplate(String templateId) {
-        return templates.get(templateId);
+        return mTemplates.get(templateId);
     }
 
     void addSharedStateTemplatesToFrame(Map<String, Template> frameTemplates) {
-        frameTemplates.putAll(templates);
+        frameTemplates.putAll(mTemplates);
     }
 
     static Style mergeStyleIdsStack(StyleIdsStack stack, Map<String, Style> styleMap,
@@ -179,17 +179,17 @@
 
     @VisibleForTesting
     static class PietStylesHelperKey {
-        private final List<PietSharedState> pietSharedStates;
-        private final MediaQueryHelper mediaQueryHelper;
+        private final List<PietSharedState> mPietSharedStates;
+        private final MediaQueryHelper mMediaQueryHelper;
 
         PietStylesHelperKey(
                 List<PietSharedState> pietSharedStates, MediaQueryHelper mediaQueryHelper) {
-            this.pietSharedStates = pietSharedStates;
-            this.mediaQueryHelper = mediaQueryHelper;
+            this.mPietSharedStates = pietSharedStates;
+            this.mMediaQueryHelper = mediaQueryHelper;
         }
 
         PietStylesHelper newPietStylesHelper() {
-            return new PietStylesHelper(pietSharedStates, mediaQueryHelper);
+            return new PietStylesHelper(mPietSharedStates, mMediaQueryHelper);
         }
 
         @SuppressWarnings({"ReferenceEquality", "EqualsUsingHashCode"})
@@ -203,8 +203,8 @@
             }
             PietStylesHelperKey that = (PietStylesHelperKey) o;
 
-            if (!mediaQueryHelper.equals(that.mediaQueryHelper)
-                    || pietSharedStates.size() != that.pietSharedStates.size()) {
+            if (!mMediaQueryHelper.equals(that.mMediaQueryHelper)
+                    || mPietSharedStates.size() != that.mPietSharedStates.size()) {
                 return false;
             }
             // Compare the two lists of PietSharedState in an container-independent way.
@@ -213,10 +213,10 @@
             // shared states, but we expect this to usually be less than ~10. Comparing .equals() on
             // PietSharedState protos is very expensive - shortcut with hashcode.
             ArrayList<Integer> sharedStateHashCodes = new ArrayList<>();
-            for (PietSharedState sharedState : pietSharedStates) {
+            for (PietSharedState sharedState : mPietSharedStates) {
                 sharedStateHashCodes.add(sharedState.hashCode());
             }
-            for (PietSharedState sharedState : that.pietSharedStates) {
+            for (PietSharedState sharedState : that.mPietSharedStates) {
                 if (!sharedStateHashCodes.remove((Integer) sharedState.hashCode())) {
                     return false;
                 }
@@ -226,8 +226,8 @@
 
         @Override
         public int hashCode() {
-            int result = pietSharedStates.hashCode();
-            result = 31 * result + mediaQueryHelper.hashCode();
+            int result = mPietSharedStates.hashCode();
+            result = 31 * result + mMediaQueryHelper.hashCode();
             return result;
         }
     }
@@ -237,10 +237,10 @@
         // TODO: Make this size configurable.
         private static final int DEFAULT_STYLES_HELPER_POOL_SIZE = 8;
 
-        final LruCache<PietStylesHelperKey, PietStylesHelper> stylesHelpers;
+        final LruCache<PietStylesHelperKey, PietStylesHelper> mStylesHelpers;
 
         PietStylesHelperFactory() {
-            this.stylesHelpers = new LruCache<PietStylesHelperKey, PietStylesHelper>(
+            this.mStylesHelpers = new LruCache<PietStylesHelperKey, PietStylesHelper>(
                     DEFAULT_STYLES_HELPER_POOL_SIZE) {
                 @Override
                 protected PietStylesHelper create(PietStylesHelperKey key) {
@@ -251,12 +251,12 @@
 
         PietStylesHelper get(
                 List<PietSharedState> pietSharedStates, MediaQueryHelper mediaQueryHelper) {
-            return checkNotNull(
-                    stylesHelpers.get(new PietStylesHelperKey(pietSharedStates, mediaQueryHelper)));
+            return checkNotNull(mStylesHelpers.get(
+                    new PietStylesHelperKey(pietSharedStates, mediaQueryHelper)));
         }
 
         void purge() {
-            stylesHelpers.evictAll();
+            mStylesHelpers.evictAll();
         }
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/SingleKeyRecyclerPool.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/SingleKeyRecyclerPool.java
index 38372fe..be4bfef2 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/SingleKeyRecyclerPool.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/SingleKeyRecyclerPool.java
@@ -10,24 +10,25 @@
 class SingleKeyRecyclerPool<A extends ElementAdapter<?, ?>> implements RecyclerPool<A> {
     private static final String KEY_ERROR_MESSAGE = "Given key %s does not match singleton key %s";
 
-    private final RecyclerKey singletonKey;
-    private final int capacity;
+    private final RecyclerKey mSingletonKey;
+    private final int mCapacity;
 
-    private SimplePool<A> pool;
+    private SimplePool<A> mPool;
 
     SingleKeyRecyclerPool(RecyclerKey key, int capacity) {
-        singletonKey = key;
-        this.capacity = capacity;
-        pool = new SimplePool<>(capacity);
+        mSingletonKey = key;
+        this.mCapacity = capacity;
+        mPool = new SimplePool<>(capacity);
     }
 
     /*@Nullable*/
     @Override
     public A get(RecyclerKey key) {
-        if (!singletonKey.equals(key)) {
-            throw new IllegalArgumentException(String.format(KEY_ERROR_MESSAGE, key, singletonKey));
+        if (!mSingletonKey.equals(key)) {
+            throw new IllegalArgumentException(
+                    String.format(KEY_ERROR_MESSAGE, key, mSingletonKey));
         }
-        return pool.acquire();
+        return mPool.acquire();
     }
 
     @Override
@@ -35,14 +36,15 @@
         if (key == null) {
             throw new NullPointerException(String.format("null key for %s", adapter));
         }
-        if (!singletonKey.equals(key)) {
-            throw new IllegalArgumentException(String.format(KEY_ERROR_MESSAGE, key, singletonKey));
+        if (!mSingletonKey.equals(key)) {
+            throw new IllegalArgumentException(
+                    String.format(KEY_ERROR_MESSAGE, key, mSingletonKey));
         }
-        pool.release(adapter);
+        mPool.release(adapter);
     }
 
     @Override
     public void clear() {
-        pool = new SimplePool<>(capacity);
+        mPool = new SimplePool<>(mCapacity);
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/StyleProvider.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/StyleProvider.java
index ff0da2fa..2d13a68 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/StyleProvider.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/StyleProvider.java
@@ -52,52 +52,52 @@
     // For borders with no rounded corners.
     private static final float[] ZERO_RADIUS = new float[] {0, 0, 0, 0, 0, 0, 0, 0};
 
-    private final Style style;
-    private final AssetProvider assetProvider;
+    private final Style mStyle;
+    private final AssetProvider mAssetProvider;
 
     StyleProvider(AssetProvider assetProvider) {
-        this.style = Style.getDefaultInstance();
-        this.assetProvider = assetProvider;
+        this.mStyle = Style.getDefaultInstance();
+        this.mAssetProvider = assetProvider;
     }
 
     StyleProvider(Style style, AssetProvider assetProvider) {
-        this.style = style;
-        this.assetProvider = assetProvider;
+        this.mStyle = style;
+        this.mAssetProvider = assetProvider;
     }
 
     /** Default font or foreground color */
     public int getColor() {
-        return style.getColor();
+        return mStyle.getColor();
     }
 
     /** Whether a color is explicitly specified */
     public boolean hasColor() {
-        return style.hasColor();
+        return mStyle.hasColor();
     }
 
     /** This style's background */
     public Fill getBackground() {
-        return style.getBackground();
+        return mStyle.getBackground();
     }
 
     /** The pre-load fill for this style */
     public Fill getPreLoadFill() {
-        return style.getImageLoadingSettings().getPreLoadFill();
+        return mStyle.getImageLoadingSettings().getPreLoadFill();
     }
 
     /** Whether the style has a pre-load fill */
     public boolean hasPreLoadFill() {
-        return style.getImageLoadingSettings().hasPreLoadFill();
+        return mStyle.getImageLoadingSettings().hasPreLoadFill();
     }
 
     /** Whether to fade in the image after it's loaded */
     public boolean getFadeInImageOnLoad() {
-        return style.getImageLoadingSettings().getFadeInImageOnLoad();
+        return mStyle.getImageLoadingSettings().getFadeInImageOnLoad();
     }
 
     /** Image scale type on this style */
     public ImageView.ScaleType getScaleType() {
-        switch (style.getScaleType()) {
+        switch (mStyle.getScaleType()) {
             case CENTER_CROP:
                 return ScaleType.CENTER_CROP;
             case CENTER_INSIDE:
@@ -105,59 +105,59 @@
                 return ScaleType.FIT_CENTER;
         }
         throw new PietFatalException(ErrorCode.ERR_MISSING_OR_UNHANDLED_CONTENT,
-                String.format("Unsupported ScaleType: %s", style.getScaleType()));
+                String.format("Unsupported ScaleType: %s", mStyle.getScaleType()));
     }
 
     /** The {@link RoundedCorners} to be used with the background color. */
     public RoundedCorners getRoundedCorners() {
-        return style.getRoundedCorners();
+        return mStyle.getRoundedCorners();
     }
 
     /** Whether rounded corners are explicitly specified */
     public boolean hasRoundedCorners() {
-        if (!style.hasRoundedCorners()) {
+        if (!mStyle.hasRoundedCorners()) {
             return false;
         }
-        RoundedCorners roundedCorners = style.getRoundedCorners();
+        RoundedCorners roundedCorners = mStyle.getRoundedCorners();
         int radiusOverride = roundedCorners.getUseHostRadiusOverride()
-                ? assetProvider.getDefaultCornerRadius()
+                ? mAssetProvider.getDefaultCornerRadius()
                 : 0;
         return RoundedCornerViewHelper.hasValidRoundedCorners(roundedCorners, radiusOverride);
     }
 
     /** The font for this style */
     public Font getFont() {
-        return style.getFont();
+        return mStyle.getFont();
     }
 
     /** This style's padding */
     public EdgeWidths getPadding() {
-        return style.getPadding();
+        return mStyle.getPadding();
     }
 
     /** This style's margins */
     public EdgeWidths getMargins() {
-        return style.getMargins();
+        return mStyle.getMargins();
     }
 
     /** Whether this style has borders */
     public boolean hasBorders() {
-        return style.getBorders().getWidth() > 0;
+        return mStyle.getBorders().getWidth() > 0;
     }
 
     /** This style's borders */
     public Borders getBorders() {
-        return style.getBorders();
+        return mStyle.getBorders();
     }
 
     /** The max_lines for a TextView */
     public int getMaxLines() {
-        return style.getMaxLines();
+        return mStyle.getMaxLines();
     }
 
     /** The min_height for a view */
     public int getMinHeight() {
-        return style.getMinHeight();
+        return mStyle.getMinHeight();
     }
 
     /**
@@ -165,11 +165,11 @@
      * LayoutParams#MATCH_PARENT}, or {@link StyleProvider#DIMENSION_NOT_SET} when not defined.
      */
     public int getHeightSpecPx(Context context) {
-        switch (style.getHeightSpecCase()) {
+        switch (mStyle.getHeightSpecCase()) {
             case HEIGHT:
-                return (int) LayoutUtils.dpToPx(style.getHeight(), context);
+                return (int) LayoutUtils.dpToPx(mStyle.getHeight(), context);
             case RELATIVE_HEIGHT:
-                switch (style.getRelativeHeight()) {
+                switch (mStyle.getRelativeHeight()) {
                     case FILL_PARENT:
                         return LayoutParams.MATCH_PARENT;
                     case FIT_CONTENT:
@@ -189,11 +189,11 @@
      * LayoutParams#MATCH_PARENT}, or {@link StyleProvider#DIMENSION_NOT_SET} when not defined.
      */
     public int getWidthSpecPx(Context context) {
-        switch (style.getWidthSpecCase()) {
+        switch (mStyle.getWidthSpecCase()) {
             case WIDTH:
-                return (int) LayoutUtils.dpToPx(style.getWidth(), context);
+                return (int) LayoutUtils.dpToPx(mStyle.getWidth(), context);
             case RELATIVE_WIDTH:
-                switch (style.getRelativeWidth()) {
+                switch (mStyle.getRelativeWidth()) {
                     case FILL_PARENT:
                         return LayoutParams.MATCH_PARENT;
                     case FIT_CONTENT:
@@ -210,22 +210,22 @@
 
     /** Whether a height is explicitly specified */
     public boolean hasHeight() {
-        return style.getHeightSpecCase() != HeightSpecCase.HEIGHTSPEC_NOT_SET;
+        return mStyle.getHeightSpecCase() != HeightSpecCase.HEIGHTSPEC_NOT_SET;
     }
 
     /** Whether a width is explicitly specified */
     public boolean hasWidth() {
-        return style.getHeightSpecCase() != HeightSpecCase.HEIGHTSPEC_NOT_SET;
+        return mStyle.getHeightSpecCase() != HeightSpecCase.HEIGHTSPEC_NOT_SET;
     }
 
     /** Whether the style has a horizontal gravity specified */
     public boolean hasGravityHorizontal() {
-        return style.hasGravityHorizontal();
+        return mStyle.hasGravityHorizontal();
     }
 
     /** Horizontal gravity specified on the style */
     public int getGravityHorizontal(int defaultGravity) {
-        switch (style.getGravityHorizontal()) {
+        switch (mStyle.getGravityHorizontal()) {
             case GRAVITY_START:
                 return Gravity.START;
             case GRAVITY_CENTER:
@@ -240,12 +240,12 @@
 
     /** Whether the style has a vertical gravity specified */
     public boolean hasGravityVertical() {
-        return style.hasGravityVertical();
+        return mStyle.hasGravityVertical();
     }
 
     /** Vertical gravity specified on the style */
     public int getGravityVertical(int defaultGravity) {
-        switch (style.getGravityVertical()) {
+        switch (mStyle.getGravityVertical()) {
             case GRAVITY_TOP:
                 return Gravity.TOP;
             case GRAVITY_MIDDLE:
@@ -268,7 +268,7 @@
         int horizontalGravity;
         int verticalGravity;
 
-        switch (style.getTextAlignmentHorizontal()) {
+        switch (mStyle.getTextAlignmentHorizontal()) {
             case TEXT_ALIGNMENT_CENTER:
                 horizontalGravity = Gravity.CENTER_HORIZONTAL;
                 break;
@@ -280,7 +280,7 @@
                 horizontalGravity = Gravity.START;
         }
 
-        switch (style.getTextAlignmentVertical()) {
+        switch (mStyle.getTextAlignmentVertical()) {
             case TEXT_ALIGNMENT_MIDDLE:
                 verticalGravity = Gravity.CENTER_VERTICAL;
                 break;
@@ -322,8 +322,8 @@
 
         // Apply appearance styles
         baseView.setBackground(createBackground());
-        if (style.getShadow().hasElevationShadow()) {
-            ViewCompat.setElevation(view, style.getShadow().getElevationShadow().getElevation());
+        if (mStyle.getShadow().hasElevationShadow()) {
+            ViewCompat.setElevation(view, mStyle.getShadow().getElevationShadow().getElevation());
         } else {
             ViewCompat.setElevation(view, 0.0f);
         }
@@ -331,7 +331,7 @@
             ViewCompat.setElevation(baseView, 0.0f);
         }
 
-        baseView.setAlpha(style.getOpacity());
+        baseView.setAlpha(mStyle.getOpacity());
     }
 
     /**
@@ -351,8 +351,8 @@
                                     padding.getBottom() + getBorderWidth(Edges.BOTTOM), context)
                 + extraLineHeight.bottomPaddingPx();
 
-        view.setPadding(assetProvider.isRtL() ? endPadding : startPadding, topPadding,
-                assetProvider.isRtL() ? startPadding : endPadding, bottomPadding);
+        view.setPadding(mAssetProvider.isRtL() ? endPadding : startPadding, topPadding,
+                mAssetProvider.isRtL() ? startPadding : endPadding, bottomPadding);
     }
 
     private int getBorderWidth(Borders.Edges edge) {
@@ -373,7 +373,7 @@
 
         // Create a drawable to stroke the border
         BorderDrawable borderDrawable =
-                new BorderDrawable(context, getBorders(), ZERO_RADIUS, assetProvider.isRtL());
+                new BorderDrawable(context, getBorders(), ZERO_RADIUS, mAssetProvider.isRtL());
         view.setForeground(borderDrawable);
     }
 
@@ -402,11 +402,11 @@
             return view;
         }
         int radiusOverride = getRoundedCorners().getUseHostRadiusOverride()
-                ? assetProvider.getDefaultCornerRadius()
+                ? mAssetProvider.getDefaultCornerRadius()
                 : 0;
 
         return new RoundedCornerWrapperView(context, getRoundedCorners(), maskCache,
-                assetProvider.isRtLSupplier(), radiusOverride, getBorders(), allowClipPathRounding,
+                mAssetProvider.isRtLSupplier(), radiusOverride, getBorders(), allowClipPathRounding,
                 allowOutlineRounding);
     }
 
@@ -439,7 +439,7 @@
                 return new ColorDrawable(background.getColor());
             case LINEAR_GRADIENT:
                 return new GradientDrawable(
-                        background.getLinearGradient(), assetProvider.isRtLSupplier());
+                        background.getLinearGradient(), mAssetProvider.isRtLSupplier());
             default:
                 return null;
         }
@@ -456,11 +456,11 @@
 
         StyleProvider that = (StyleProvider) o;
 
-        return style.equals(that.style) && assetProvider.equals(that.assetProvider);
+        return mStyle.equals(that.mStyle) && mAssetProvider.equals(that.mAssetProvider);
     }
 
     @Override
     public int hashCode() {
-        return style.hashCode();
+        return mStyle.hashCode();
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/TemplateBinder.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/TemplateBinder.java
index 99d89f1..4d7796df 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/TemplateBinder.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/TemplateBinder.java
@@ -23,13 +23,13 @@
  * layouts as a unit. Release and recycling is handled by the ElementAdapterFactory.
  */
 class TemplateBinder {
-    private final KeyedRecyclerPool<ElementAdapter<? extends View, ?>> templateRecyclerPool;
-    private final ElementAdapterFactory adapterFactory;
+    private final KeyedRecyclerPool<ElementAdapter<? extends View, ?>> mTemplateRecyclerPool;
+    private final ElementAdapterFactory mAdapterFactory;
 
-    TemplateBinder(KeyedRecyclerPool<ElementAdapter<? extends View, ?>> templateRecyclerPool,
+    TemplateBinder(KeyedRecyclerPool<ElementAdapter<? extends View, ?>> mTemplateRecyclerPool,
             ElementAdapterFactory adapterFactory) {
-        this.templateRecyclerPool = templateRecyclerPool;
-        this.adapterFactory = adapterFactory;
+        this.mTemplateRecyclerPool = mTemplateRecyclerPool;
+        this.mAdapterFactory = adapterFactory;
     }
 
     /** Higher-performance method that creates and binds an adapter for a template all at once. */
@@ -42,11 +42,11 @@
                 frameContext.createTemplateContext(model.getTemplate(), model.getBindingContext());
 
         TemplateKey templateKey = makeTemplateKey(model, frameContext);
-        ElementAdapter<? extends View, ?> adapter = templateRecyclerPool.get(templateKey);
+        ElementAdapter<? extends View, ?> adapter = mTemplateRecyclerPool.get(templateKey);
 
         if (adapter == null) {
             // Create new adapter
-            adapter = adapterFactory.createAdapterForElement(
+            adapter = mAdapterFactory.createAdapterForElement(
                     model.getTemplate().getElement(), templateContext);
 
             adapter.setKey(templateKey);
@@ -60,7 +60,7 @@
     ElementAdapter<? extends View, ?> createTemplateAdapter(
             TemplateAdapterModel model, FrameContext frameContext) {
         TemplateKey templateKey = makeTemplateKey(model, frameContext);
-        ElementAdapter<? extends View, ?> adapter = templateRecyclerPool.get(templateKey);
+        ElementAdapter<? extends View, ?> adapter = mTemplateRecyclerPool.get(templateKey);
 
         if (adapter == null) {
             // Make new FrameContext here
@@ -68,7 +68,7 @@
                     model.getTemplate(), model.getBindingContext());
 
             // Create new adapter
-            adapter = adapterFactory.createAdapterForElement(
+            adapter = mAdapterFactory.createAdapterForElement(
                     model.getTemplate().getElement(), templateContext);
 
             adapter.setKey(templateKey);
@@ -116,19 +116,19 @@
 
     /** Wrap the Template proto object as the recycler key. */
     static class TemplateKey extends RecyclerKey {
-        private final Template template;
-        /*@Nullable*/ private final List<PietSharedState> pietSharedStates;
+        private final Template mTemplate;
+        /*@Nullable*/ private final List<PietSharedState> mPietSharedStates;
 
         // If the Template references Stylesheets that have MediaQueryConditions on them, they need
         // to be part of the key.
-        private final List<Stylesheet> mediaQueryBasedStylesheets;
+        private final List<Stylesheet> mMediaQueryBasedStylesheets;
 
         TemplateKey(Template template,
                 /*@Nullable*/ List<PietSharedState> pietSharedStates,
                 List<Stylesheet> mediaQueryBasedStylesheets) {
-            this.template = template;
-            this.pietSharedStates = pietSharedStates;
-            this.mediaQueryBasedStylesheets = mediaQueryBasedStylesheets;
+            this.mTemplate = template;
+            this.mPietSharedStates = pietSharedStates;
+            this.mMediaQueryBasedStylesheets = mediaQueryBasedStylesheets;
         }
 
         /** Equals checks the hashCode of the component fields to avoid expensive proto equals. */
@@ -145,62 +145,62 @@
             TemplateKey that = (TemplateKey) o;
 
             // Check that Templates are equal
-            if (!templateEquals(template, that.template)) {
+            if (!templateEquals(mTemplate, that.mTemplate)) {
                 return false;
             }
             // Check that PietSharedStates are equal or both null
-            if (that.pietSharedStates == null ^ this.pietSharedStates == null) {
+            if (that.mPietSharedStates == null ^ this.mPietSharedStates == null) {
                 return false;
             }
-            if (this.pietSharedStates != null && that.pietSharedStates != null
-                    && (this.pietSharedStates.size() != that.pietSharedStates.size()
-                            || this.pietSharedStates.hashCode()
-                                    != that.pietSharedStates.hashCode())) {
+            if (this.mPietSharedStates != null && that.mPietSharedStates != null
+                    && (this.mPietSharedStates.size() != that.mPietSharedStates.size()
+                            || this.mPietSharedStates.hashCode()
+                                    != that.mPietSharedStates.hashCode())) {
                 return false;
             }
             // Check that stylesheets are equal or both empty
-            if (that.mediaQueryBasedStylesheets.isEmpty()
-                    ^ this.mediaQueryBasedStylesheets.isEmpty()) {
+            if (that.mMediaQueryBasedStylesheets.isEmpty()
+                    ^ this.mMediaQueryBasedStylesheets.isEmpty()) {
                 return false;
             }
-            return this.mediaQueryBasedStylesheets == that.mediaQueryBasedStylesheets
-                    || this.mediaQueryBasedStylesheets.hashCode()
-                    == that.mediaQueryBasedStylesheets.hashCode();
+            return this.mMediaQueryBasedStylesheets == that.mMediaQueryBasedStylesheets
+                    || this.mMediaQueryBasedStylesheets.hashCode()
+                    == that.mMediaQueryBasedStylesheets.hashCode();
         }
 
         @Override
         public int hashCode() {
-            int result = template.hashCode();
-            result = 31 * result + (pietSharedStates != null ? pietSharedStates.hashCode() : 0);
+            int result = mTemplate.hashCode();
+            result = 31 * result + (mPietSharedStates != null ? mPietSharedStates.hashCode() : 0);
             result = 31 * result
-                    + (mediaQueryBasedStylesheets != null ? mediaQueryBasedStylesheets.hashCode()
-                                                          : 0);
+                    + (mMediaQueryBasedStylesheets != null ? mMediaQueryBasedStylesheets.hashCode()
+                                                           : 0);
             return result;
         }
     }
 
     static class TemplateAdapterModel {
-        private final Template template;
-        private final BindingContext bindingContext;
+        private final Template mTemplate;
+        private final BindingContext mBindingContext;
 
         TemplateAdapterModel(Template template, BindingContext bindingContext) {
-            this.template = template;
-            this.bindingContext = bindingContext;
+            this.mTemplate = template;
+            this.mBindingContext = bindingContext;
         }
 
         TemplateAdapterModel(
                 String templateId, FrameContext frameContext, BindingContext bindingContext) {
-            this.template = checkNotNull(
+            this.mTemplate = checkNotNull(
                     frameContext.getTemplate(templateId), "Template was not found: %s", templateId);
-            this.bindingContext = bindingContext;
+            this.mBindingContext = bindingContext;
         }
 
         public Template getTemplate() {
-            return template;
+            return mTemplate;
         }
 
         BindingContext getBindingContext() {
-            return bindingContext;
+            return mBindingContext;
         }
 
         @SuppressWarnings({"ReferenceEquality", "EqualsUsingHashCode"})
@@ -215,18 +215,18 @@
 
             TemplateAdapterModel that = (TemplateAdapterModel) o;
 
-            return templateEquals(template, that.template)
-                    && (bindingContext == that.bindingContext
-                            || (bindingContext.getBindingValuesCount()
-                                            == that.bindingContext.getBindingValuesCount()
-                                    && bindingContext.hashCode()
-                                            == that.bindingContext.hashCode()));
+            return templateEquals(mTemplate, that.mTemplate)
+                    && (mBindingContext == that.mBindingContext
+                            || (mBindingContext.getBindingValuesCount()
+                                            == that.mBindingContext.getBindingValuesCount()
+                                    && mBindingContext.hashCode()
+                                            == that.mBindingContext.hashCode()));
         }
 
         @Override
         public int hashCode() {
-            int result = template.hashCode();
-            result = 31 * result + bindingContext.hashCode();
+            int result = mTemplate.hashCode();
+            result = 31 * result + mBindingContext.hashCode();
             return result;
         }
     }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/TextElementAdapter.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/TextElementAdapter.java
index c3919413..784a60eb 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/TextElementAdapter.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/TextElementAdapter.java
@@ -35,7 +35,7 @@
  * elements.
  */
 abstract class TextElementAdapter extends ElementAdapter<TextView, Element> {
-    private ExtraLineHeight extraLineHeight = ExtraLineHeight.builder().build();
+    private ExtraLineHeight mExtraLineHeight = ExtraLineHeight.builder().build();
 
     TextElementAdapter(Context context, AdapterParameters parameters) {
         super(context, parameters, createView(context));
@@ -160,7 +160,7 @@
         Font font = getElementStyle().getFont();
 
         if (!font.hasLineHeight()) {
-            return extraLineHeight;
+            return mExtraLineHeight;
         }
 
         int totalExtraPadding = 0;
@@ -168,11 +168,11 @@
         if (font.hasLineHeight()) {
             float changeInLineHeight = calculateCurrentAndExpectedLineHeightDifference();
             if (changeInLineHeight == 0) {
-                return extraLineHeight;
+                return mExtraLineHeight;
             }
 
             float extraLineHeightBetweenLinesFloat =
-                    extraLineHeight.betweenLinesExtraPx() + changeInLineHeight;
+                    mExtraLineHeight.betweenLinesExtraPx() + changeInLineHeight;
             extraLineHeightBetweenLines = Math.round(extraLineHeightBetweenLinesFloat);
 
             // Adjust the rounding for the extra top and bottom padding, to make the total height of
@@ -190,19 +190,19 @@
                     -(extraLineHeightBetweenLines - extraPaddingForLineHeightBottom);
         }
 
-        extraLineHeight = ExtraLineHeight.builder()
-                                  .setTopPaddingPx(extraPaddingForLineHeightTop)
-                                  .setBottomPaddingPx(extraPaddingForLineHeightBottom)
-                                  .setBetweenLinesExtraPx(extraLineHeightBetweenLines)
-                                  .build();
+        mExtraLineHeight = ExtraLineHeight.builder()
+                                   .setTopPaddingPx(extraPaddingForLineHeightTop)
+                                   .setBottomPaddingPx(extraPaddingForLineHeightBottom)
+                                   .setBetweenLinesExtraPx(extraLineHeightBetweenLines)
+                                   .build();
 
-        return extraLineHeight;
+        return mExtraLineHeight;
     }
 
     private boolean baseFontHeightChanged() {
         // Check if we've already calculated the extra line height and there is a significant
         // difference between the current and expected line heights.
-        if (extraLineHeight.betweenLinesExtraPx() == 0) {
+        if (mExtraLineHeight.betweenLinesExtraPx() == 0) {
             return false;
         }
         float lineHeightDifference = calculateCurrentAndExpectedLineHeightDifference();
@@ -234,9 +234,9 @@
     void setValuesUsedInRecyclerKey(TextElementKey fontKey, FrameContext frameContext) {
         TextView textView = getBaseView();
         textView.setTextSize(fontKey.getSize());
-        if (!fontKey.typefaces.isEmpty()) {
+        if (!fontKey.mTypefaces.isEmpty()) {
             FontDetails fontDetails =
-                    new FontDetails(fontKey.typefaces, fontKey.isItalic(), frameContext);
+                    new FontDetails(fontKey.mTypefaces, fontKey.isItalic(), frameContext);
             loadFont(textView, fontDetails);
         } else {
             makeFontItalic(textView, fontKey.isItalic());
@@ -297,7 +297,7 @@
     private void loadCustomTypeface(
             String customTypefaceName, FontDetails fontDetails, TextView textView) {
         TypefaceCallback typefaceCallback = new TypefaceCallback(textView, fontDetails);
-        getParameters().hostProviders.getAssetProvider().getTypeface(
+        getParameters().mHostProviders.getAssetProvider().getTypeface(
                 customTypefaceName, fontDetails.isItalic(), typefaceCallback);
     }
 
@@ -350,31 +350,31 @@
     /** We will Key TextViews off of Font Size, Typefaces and Italics. */
     // LINT.IfChange
     static class TextElementKey extends RecyclerKey {
-        private final int size;
-        private final boolean italic;
-        private final List<StylesProto.Typeface> typefaces;
+        private final int mSize;
+        private final boolean mItalic;
+        private final List<StylesProto.Typeface> mTypefaces;
 
         TextElementKey(Font font) {
-            size = font.getSize();
-            italic = font.getItalic();
-            typefaces = font.getTypefaceList();
+            mSize = font.getSize();
+            mItalic = font.getItalic();
+            mTypefaces = font.getTypefaceList();
         }
 
         public int getSize() {
-            return size;
+            return mSize;
         }
 
         public boolean isItalic() {
-            return italic;
+            return mItalic;
         }
 
         @Override
         public int hashCode() {
             // Can't use Objects.hash() as it is only available in KK+ and can't use Guava's impl
             // either.
-            int result = size;
-            result = 31 * result + (italic ? 1 : 0);
-            result = 31 * result + typefaces.hashCode();
+            int result = mSize;
+            result = 31 * result + (mItalic ? 1 : 0);
+            result = 31 * result + mTypefaces.hashCode();
             return result;
         }
 
@@ -393,32 +393,33 @@
             }
 
             TextElementKey key = (TextElementKey) obj;
-            return key.size == size && key.italic == italic && typefaces.equals(key.typefaces);
+            return key.mSize == mSize && key.mItalic == mItalic
+                    && mTypefaces.equals(key.mTypefaces);
         }
     }
     // LINT.ThenChange
 
     static class ExtraLineHeight {
-        private final int topPaddingPx;
-        private final int bottomPaddingPx;
-        private final int betweenLinesExtraPx;
+        private final int mTopPaddingPx;
+        private final int mBottomPaddingPx;
+        private final int mBetweenLinesExtraPx;
 
         int topPaddingPx() {
-            return topPaddingPx;
+            return mTopPaddingPx;
         }
 
         int bottomPaddingPx() {
-            return bottomPaddingPx;
+            return mBottomPaddingPx;
         }
 
         int betweenLinesExtraPx() {
-            return betweenLinesExtraPx;
+            return mBetweenLinesExtraPx;
         }
 
         private ExtraLineHeight(Builder builder) {
-            this.topPaddingPx = builder.topPaddingPx;
-            this.bottomPaddingPx = builder.bottomPaddingPx;
-            this.betweenLinesExtraPx = builder.betweenLinesExtraPx;
+            this.mTopPaddingPx = builder.mTopPaddingPx;
+            this.mBottomPaddingPx = builder.mBottomPaddingPx;
+            this.mBetweenLinesExtraPx = builder.mBetweenLinesExtraPx;
         }
 
         static Builder builder() {
@@ -426,22 +427,22 @@
         }
 
         static class Builder {
-            private int topPaddingPx;
-            private int bottomPaddingPx;
-            private int betweenLinesExtraPx;
+            private int mTopPaddingPx;
+            private int mBottomPaddingPx;
+            private int mBetweenLinesExtraPx;
 
             Builder setTopPaddingPx(int value) {
-                topPaddingPx = value;
+                mTopPaddingPx = value;
                 return this;
             }
 
             Builder setBottomPaddingPx(int value) {
-                bottomPaddingPx = value;
+                mBottomPaddingPx = value;
                 return this;
             }
 
             Builder setBetweenLinesExtraPx(int value) {
-                betweenLinesExtraPx = value;
+                mBetweenLinesExtraPx = value;
                 return this;
             }
 
@@ -452,56 +453,56 @@
     }
 
     static class FontDetails {
-        private int fontIndexToLoad;
-        private final List<StylesProto.Typeface> typefaceList;
-        private final boolean isItalic;
-        private final FrameContext frameContextForErrors;
+        private int mFontIndexToLoad;
+        private final List<StylesProto.Typeface> mTypefaceList;
+        private final boolean mIsItalic;
+        private final FrameContext mFrameContextForErrors;
 
         FontDetails(List<StylesProto.Typeface> typefaceList, boolean isItalic,
                 FrameContext frameContext) {
-            this.typefaceList = typefaceList;
-            this.isItalic = isItalic;
-            this.frameContextForErrors = frameContext;
+            this.mTypefaceList = typefaceList;
+            this.mIsItalic = isItalic;
+            this.mFrameContextForErrors = frameContext;
         }
 
         FrameContext getFrameContext() {
-            return frameContextForErrors;
+            return mFrameContextForErrors;
         }
 
         StylesProto./*@Nullable*/ Typeface getTypefaceToLoad() {
-            if (typefaceList.size() <= fontIndexToLoad) {
+            if (mTypefaceList.size() <= mFontIndexToLoad) {
                 return null;
             }
-            return typefaceList.get(fontIndexToLoad);
+            return mTypefaceList.get(mFontIndexToLoad);
         }
 
         void currentTypefaceFailedToLoad() {
-            fontIndexToLoad++;
+            mFontIndexToLoad++;
         }
 
         boolean isItalic() {
-            return isItalic;
+            return mIsItalic;
         }
     }
 
     class TypefaceCallback implements Consumer</*@Nullable*/ Typeface> {
-        private final TextView textView;
-        private final FontDetails fontDetails;
+        private final TextView mTextView;
+        private final FontDetails mFontDetails;
 
         TypefaceCallback(TextView textView, FontDetails fontDetails) {
-            this.textView = textView;
-            this.fontDetails = fontDetails;
+            this.mTextView = textView;
+            this.mFontDetails = fontDetails;
         }
 
         @Override
         public void accept(/*@Nullable*/ Typeface typeface) {
             if (typeface == null) {
-                fontDetails.currentTypefaceFailedToLoad();
-                loadFont(textView, fontDetails);
+                mFontDetails.currentTypefaceFailedToLoad();
+                loadFont(mTextView, mFontDetails);
                 return;
             }
-            if (textView.getTypeface() == null || !textView.getTypeface().equals(typeface)) {
-                textView.setTypeface(typeface);
+            if (mTextView.getTypeface() == null || !mTextView.getTypeface().equals(typeface)) {
+                mTextView.setTypeface(typeface);
             }
         }
     }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/host/AssetProvider.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/host/AssetProvider.java
index 2edcc9464..63641f6 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/host/AssetProvider.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/host/AssetProvider.java
@@ -16,27 +16,27 @@
 /** Provide Assets from the host */
 public class AssetProvider {
     @VisibleForTesting
-    final ImageLoader imageLoader;
+    final ImageLoader mImageLoader;
     @VisibleForTesting
-    final StringFormatter stringFormatter;
-    private final Supplier<Integer> defaultCornerRadiusSupplier;
-    private final Supplier<Boolean> isDarkThemeSupplier;
-    private final Supplier<Long> fadeImageThresholdMsSupplier;
-    private final Supplier<Boolean> isRtLSupplier;
+    final StringFormatter mStringFormatter;
+    private final Supplier<Integer> mDefaultCornerRadiusSupplier;
+    private final Supplier<Boolean> mIsDarkThemeSupplier;
+    private final Supplier<Long> mFadeImageThresholdMsSupplier;
+    private final Supplier<Boolean> mIsRtLSupplier;
     @VisibleForTesting
-    final TypefaceProvider typefaceProvider;
+    final TypefaceProvider mTypefaceProvider;
 
     public AssetProvider(ImageLoader imageLoader, StringFormatter stringFormatter,
             Supplier<Integer> defaultCornerRadiusSupplier,
             Supplier<Long> fadeImageThresholdMsSupplier, Supplier<Boolean> isDarkThemeSupplier,
             Supplier<Boolean> isRtLSupplier, TypefaceProvider typefaceProvider) {
-        this.imageLoader = imageLoader;
-        this.stringFormatter = stringFormatter;
-        this.defaultCornerRadiusSupplier = defaultCornerRadiusSupplier;
-        this.isDarkThemeSupplier = isDarkThemeSupplier;
-        this.fadeImageThresholdMsSupplier = fadeImageThresholdMsSupplier;
-        this.isRtLSupplier = isRtLSupplier;
-        this.typefaceProvider = typefaceProvider;
+        this.mImageLoader = imageLoader;
+        this.mStringFormatter = stringFormatter;
+        this.mDefaultCornerRadiusSupplier = defaultCornerRadiusSupplier;
+        this.mIsDarkThemeSupplier = isDarkThemeSupplier;
+        this.mFadeImageThresholdMsSupplier = fadeImageThresholdMsSupplier;
+        this.mIsRtLSupplier = isRtLSupplier;
+        this.mTypefaceProvider = typefaceProvider;
     }
 
     /**
@@ -59,29 +59,29 @@
      */
     public void getImage(
             Image image, int widthPx, int heightPx, Consumer</*@Nullable*/ Drawable> consumer) {
-        imageLoader.getImage(image, widthPx, heightPx, consumer);
+        mImageLoader.getImage(image, widthPx, heightPx, consumer);
     }
 
     /** Return a relative elapsed time string such as "8 minutes ago" or "1 day ago". */
     public String getRelativeElapsedString(long elapsedTimeMillis) {
-        return stringFormatter.getRelativeElapsedString(elapsedTimeMillis);
+        return mStringFormatter.getRelativeElapsedString(elapsedTimeMillis);
     }
 
     /** Returns the default corner rounding radius in pixels. */
     public int getDefaultCornerRadius() {
-        return defaultCornerRadiusSupplier.get();
+        return mDefaultCornerRadiusSupplier.get();
     }
 
     /** Returns whether the theme for the Piet rendering context is a "dark theme". */
     public boolean isDarkTheme() {
-        return isDarkThemeSupplier.get();
+        return mIsDarkThemeSupplier.get();
     }
 
     /**
      * Fade-in animation will only occur if image loading time takes more than this amount of time.
      */
     public long getFadeImageThresholdMs() {
-        return fadeImageThresholdMsSupplier.get();
+        return mFadeImageThresholdMsSupplier.get();
     }
 
     /**
@@ -96,16 +96,16 @@
      */
     public void getTypeface(
             String typeface, boolean isItalic, Consumer</*@Nullable*/ Typeface> consumer) {
-        typefaceProvider.getTypeface(typeface, isItalic, consumer);
+        mTypefaceProvider.getTypeface(typeface, isItalic, consumer);
     }
 
     /** Returns whether Piet should render layouts using a right-to-left orientation. */
     public boolean isRtL() {
-        return isRtLSupplier.get();
+        return mIsRtLSupplier.get();
     }
 
     /** Returns whether Piet should render layouts using a right-to-left orientation. */
     public Supplier<Boolean> isRtLSupplier() {
-        return isRtLSupplier;
+        return mIsRtLSupplier;
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/testing/FakeFrameAdapter.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/testing/FakeFrameAdapter.java
index 76de7ea..e63929b 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/testing/FakeFrameAdapter.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/testing/FakeFrameAdapter.java
@@ -25,86 +25,87 @@
 
 /** Fake for {@link FrameAdapter}. */
 public class FakeFrameAdapter implements FrameAdapter {
-    private final List<Action> viewActions;
-    private final List<Action> hideActions;
-    private final LinearLayout frameContainer;
-    private final ActionHandler actionHandler;
+    private final List<Action> mViewActions;
+    private final List<Action> mHideActions;
+    private final LinearLayout mFrameContainer;
+    private final ActionHandler mActionHandler;
 
-    public boolean isBound;
-    private boolean viewActionsTriggered;
-    /*@Nullable*/ private Frame frame;
+    public boolean mIsBound;
+    private boolean mViewActionsTriggered;
+    /*@Nullable*/ private Frame mFrame;
 
     private FakeFrameAdapter(Context context, List<Action> viewActions, List<Action> hideActions,
             ActionHandler actionHandler) {
-        this.viewActions = viewActions;
-        this.frameContainer = new LinearLayout(context);
-        this.actionHandler = actionHandler;
-        this.hideActions = hideActions;
+        this.mViewActions = viewActions;
+        this.mFrameContainer = new LinearLayout(context);
+        this.mActionHandler = actionHandler;
+        this.mHideActions = hideActions;
     }
 
     @Override
     public void bindModel(Frame frame, int frameWidthPx,
             PietAndroidSupport./*@Nullable*/ ShardingControl shardingControl,
             List<PietSharedState> pietSharedStates) {
-        checkState(!isBound);
-        this.frame = frame;
-        isBound = true;
+        checkState(!mIsBound);
+        this.mFrame = frame;
+        mIsBound = true;
     }
 
     @Override
     public void unbindModel() {
-        checkState(isBound);
+        checkState(mIsBound);
         triggerHideActions();
-        frame = null;
-        isBound = false;
-        viewActionsTriggered = false;
+        mFrame = null;
+        mIsBound = false;
+        mViewActionsTriggered = false;
     }
 
     @Override
     public LinearLayout getFrameContainer() {
-        return frameContainer;
+        return mFrameContainer;
     }
 
     @Override
     public void triggerHideActions() {
-        if (!viewActionsTriggered) {
+        if (!mViewActionsTriggered) {
             return;
         }
 
-        if (!isBound) {
+        if (!mIsBound) {
             return;
         }
 
-        for (Action action : hideActions) {
-            actionHandler.handleAction(action, ActionType.VIEW, checkNotNull(frame), frameContainer,
-                    LogData.getDefaultInstance());
+        for (Action action : mHideActions) {
+            mActionHandler.handleAction(action, ActionType.VIEW, checkNotNull(mFrame),
+                    mFrameContainer, LogData.getDefaultInstance());
         }
 
-        viewActionsTriggered = false;
+        mViewActionsTriggered = false;
     }
 
     @Override
     public void triggerViewActions(View viewport) {
-        if (viewActionsTriggered) {
+        if (mViewActionsTriggered) {
             return;
         }
 
-        if (!isBound) {
+        if (!mIsBound) {
             return;
         }
 
         // Assume all view actions are fired when triggerViewActions is called.
-        for (Action action : viewActions) {
-            actionHandler.handleAction(action, ActionType.VIEW, checkNotNull(frame), frameContainer,
+        for (Action action : mViewActions) {
+            mActionHandler.handleAction(action, ActionType.VIEW, checkNotNull(mFrame),
+                    mFrameContainer,
                     /* logData= */ LogData.getDefaultInstance());
         }
 
-        viewActionsTriggered = true;
+        mViewActionsTriggered = true;
     }
 
     /** Returns whether the {@link FrameAdapter} is bound. */
     public boolean isBound() {
-        return isBound;
+        return mIsBound;
     }
 
     /** Returns a new builder for a {@link FakeFrameAdapter} */
@@ -114,26 +115,26 @@
 
     /** Builder for {@link FakeFrameAdapter}. */
     public static final class Builder {
-        private final Context context;
-        private final List<Action> viewActions;
-        private final List<Action> hideActions;
+        private final Context mContext;
+        private final List<Action> mViewActions;
+        private final List<Action> mHideActions;
 
-        private ActionHandler actionHandler;
+        private ActionHandler mActionHandler;
 
         private Builder(Context context) {
-            this.context = context;
-            viewActions = new ArrayList<>();
-            hideActions = new ArrayList<>();
-            actionHandler = new NoOpActionHandler();
+            this.mContext = context;
+            mViewActions = new ArrayList<>();
+            mHideActions = new ArrayList<>();
+            mActionHandler = new NoOpActionHandler();
         }
 
         public Builder addViewAction(Action viewAction) {
-            viewActions.add(viewAction);
+            mViewActions.add(viewAction);
             return this;
         }
 
         public Builder addHideAction(Action hideAction) {
-            hideActions.add(hideAction);
+            mHideActions.add(hideAction);
             return this;
         }
 
@@ -142,12 +143,12 @@
          * will no-op.
          */
         public Builder setActionHandler(ActionHandler actionHandler) {
-            this.actionHandler = actionHandler;
+            this.mActionHandler = actionHandler;
             return this;
         }
 
         public FakeFrameAdapter build() {
-            return new FakeFrameAdapter(context, viewActions, hideActions, actionHandler);
+            return new FakeFrameAdapter(mContext, mViewActions, mHideActions, mActionHandler);
         }
     }
 
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/ui/AspectRatioScalingImageView.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/ui/AspectRatioScalingImageView.java
index c6602e4..cf2c124 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/ui/AspectRatioScalingImageView.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/ui/AspectRatioScalingImageView.java
@@ -11,14 +11,14 @@
 /** {@link ImageView} which always aspect-ratio scales the image to fit its container. */
 public class AspectRatioScalingImageView extends ImageView {
     /** Default aspect ratio for the view when the drawable is not set. Set to zero to ignore. */
-    private float defaultAspectRatio;
+    private float mDefaultAspectRatio;
 
     public AspectRatioScalingImageView(Context context) {
         super(context);
     }
 
     public void setDefaultAspectRatio(float aspectRatio) {
-        defaultAspectRatio = aspectRatio;
+        mDefaultAspectRatio = aspectRatio;
         invalidate();
     }
 
@@ -41,8 +41,8 @@
         if (drawable != null && drawable.getIntrinsicHeight() > 0
                 && drawable.getIntrinsicWidth() > 0) {
             aspectRatio = ((float) drawable.getIntrinsicWidth()) / drawable.getIntrinsicHeight();
-        } else if (defaultAspectRatio > 0) {
-            aspectRatio = defaultAspectRatio;
+        } else if (mDefaultAspectRatio > 0) {
+            aspectRatio = mDefaultAspectRatio;
         } else {
             super.onMeasure(widthMeasureSpec, heightMeasureSpec);
             return;
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/ui/BitmapMaskingRoundedCornerDelegate.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/ui/BitmapMaskingRoundedCornerDelegate.java
index 7e0e1331..2a01bec 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/ui/BitmapMaskingRoundedCornerDelegate.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/ui/BitmapMaskingRoundedCornerDelegate.java
@@ -25,21 +25,21 @@
  * delegate.
  */
 class BitmapMaskingRoundedCornerDelegate extends RoundedCornerDelegate {
-    private final Paint paint;
-    private final Paint maskPaint;
-    private final RoundedCornerMaskCache maskCache;
-    private final int bitmask;
-    private final Canvas offscreenCanvas;
+    private final Paint mPaint;
+    private final Paint mMaskPaint;
+    private final RoundedCornerMaskCache mMaskCache;
+    private final int mBitmask;
+    private final Canvas mOffscreenCanvas;
 
     // Masks for each of the corners of the view; null if that corner is not rounded.
-    /*@Nullable*/ private Bitmap cornerTL;
-    /*@Nullable*/ private Bitmap cornerTR;
-    /*@Nullable*/ private Bitmap cornerBL;
-    /*@Nullable*/ private Bitmap cornerBR;
+    /*@Nullable*/ private Bitmap mCornerTL;
+    /*@Nullable*/ private Bitmap mCornerTR;
+    /*@Nullable*/ private Bitmap mCornerBL;
+    /*@Nullable*/ private Bitmap mCornerBR;
 
     // Keep track of current mask configuration so we can use cached values if nothing has changed.
-    private int lastRadius = -1;
-    private boolean lastRtL;
+    private int mLastRadius = -1;
+    private boolean mLastRtL;
 
     BitmapMaskingRoundedCornerDelegate(
             RoundedCornerMaskCache maskCache, int bitmask, boolean isRtL) {
@@ -48,12 +48,12 @@
 
     BitmapMaskingRoundedCornerDelegate(
             RoundedCornerMaskCache maskCache, int bitmask, boolean isRtL, Canvas canvas) {
-        this.maskCache = maskCache;
-        offscreenCanvas = canvas;
-        this.lastRtL = !isRtL; // Flip this so we must update the layout on the first time.
-        this.bitmask = bitmask;
-        this.paint = maskCache.getPaint();
-        this.maskPaint = maskCache.getMaskPaint();
+        this.mMaskCache = maskCache;
+        mOffscreenCanvas = canvas;
+        this.mLastRtL = !isRtL; // Flip this so we must update the layout on the first time.
+        this.mBitmask = bitmask;
+        this.mPaint = maskCache.getPaint();
+        this.mMaskPaint = maskCache.getMaskPaint();
     }
 
     /**
@@ -71,37 +71,38 @@
         if (radius < 1) {
             return;
         }
-        RoundedCornerBitmaps masks = maskCache.getMasks(radius);
+        RoundedCornerBitmaps masks = mMaskCache.getMasks(radius);
 
-        if ((RoundedCornerViewHelper.shouldRoundCorner(Corners.TOP_START, bitmask) && !isRtL)
-                || (RoundedCornerViewHelper.shouldRoundCorner(Corners.TOP_END, bitmask) && isRtL)) {
-            cornerTL = masks.get(Corner.TOP_LEFT);
+        if ((RoundedCornerViewHelper.shouldRoundCorner(Corners.TOP_START, mBitmask) && !isRtL)
+                || (RoundedCornerViewHelper.shouldRoundCorner(Corners.TOP_END, mBitmask)
+                        && isRtL)) {
+            mCornerTL = masks.get(Corner.TOP_LEFT);
         } else {
-            cornerTL = null;
+            mCornerTL = null;
         }
 
-        if ((RoundedCornerViewHelper.shouldRoundCorner(Corners.TOP_END, bitmask) && !isRtL)
-                || (RoundedCornerViewHelper.shouldRoundCorner(Corners.TOP_START, bitmask)
+        if ((RoundedCornerViewHelper.shouldRoundCorner(Corners.TOP_END, mBitmask) && !isRtL)
+                || (RoundedCornerViewHelper.shouldRoundCorner(Corners.TOP_START, mBitmask)
                         && isRtL)) {
-            cornerTR = masks.get(Corner.TOP_RIGHT);
+            mCornerTR = masks.get(Corner.TOP_RIGHT);
         } else {
-            cornerTR = null;
+            mCornerTR = null;
         }
 
-        if ((RoundedCornerViewHelper.shouldRoundCorner(Corners.BOTTOM_START, bitmask) && !isRtL)
-                || (RoundedCornerViewHelper.shouldRoundCorner(Corners.BOTTOM_END, bitmask)
+        if ((RoundedCornerViewHelper.shouldRoundCorner(Corners.BOTTOM_START, mBitmask) && !isRtL)
+                || (RoundedCornerViewHelper.shouldRoundCorner(Corners.BOTTOM_END, mBitmask)
                         && isRtL)) {
-            cornerBL = masks.get(Corner.BOTTOM_LEFT);
+            mCornerBL = masks.get(Corner.BOTTOM_LEFT);
         } else {
-            cornerBL = null;
+            mCornerBL = null;
         }
 
-        if ((RoundedCornerViewHelper.shouldRoundCorner(Corners.BOTTOM_END, bitmask) && !isRtL)
-                || (RoundedCornerViewHelper.shouldRoundCorner(Corners.BOTTOM_START, bitmask)
+        if ((RoundedCornerViewHelper.shouldRoundCorner(Corners.BOTTOM_END, mBitmask) && !isRtL)
+                || (RoundedCornerViewHelper.shouldRoundCorner(Corners.BOTTOM_START, mBitmask)
                         && isRtL)) {
-            cornerBR = masks.get(Corner.BOTTOM_RIGHT);
+            mCornerBR = masks.get(Corner.BOTTOM_RIGHT);
         } else {
-            cornerBR = null;
+            mCornerBR = null;
         }
     }
 
@@ -116,14 +117,14 @@
         if (radius == 0) {
             return;
         }
-        if (radius == lastRadius && isRtL == lastRtL) {
+        if (radius == mLastRadius && isRtL == mLastRtL) {
             return;
         }
 
         initCornerMasks(radius, isRtL);
 
-        lastRadius = radius;
-        lastRtL = isRtL;
+        mLastRadius = radius;
+        mLastRtL = isRtL;
     }
 
     /**
@@ -166,33 +167,33 @@
         }
         int radius = view.getRadius(width, height);
         Bitmap localOffscreenBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
-        offscreenCanvas.setBitmap(localOffscreenBitmap);
-        view.drawSuper(offscreenCanvas);
+        mOffscreenCanvas.setBitmap(localOffscreenBitmap);
+        view.drawSuper(mOffscreenCanvas);
         drawWithCornerMasks(canvas, radius, width, height, localOffscreenBitmap);
     }
 
     private void drawWithCornerMasks(
             Canvas canvas, int radius, int width, int height, Bitmap offscreenBitmap) {
         // Crop the corners off using masks
-        maskCorners(offscreenCanvas, width, height, radius);
+        maskCorners(mOffscreenCanvas, width, height, radius);
 
         // Draw the offscreen bitmap (view with rounded corners) to the target canvas.
-        canvas.drawBitmap(offscreenBitmap, 0f, 0f, paint);
+        canvas.drawBitmap(offscreenBitmap, 0f, 0f, mPaint);
     }
 
     /** Draws a mask on each corner that is rounded. */
     private void maskCorners(Canvas canvas, int width, int height, int radius) {
-        if (cornerTL != null) {
-            canvas.drawBitmap(cornerTL, 0, 0, maskPaint);
+        if (mCornerTL != null) {
+            canvas.drawBitmap(mCornerTL, 0, 0, mMaskPaint);
         }
-        if (cornerTR != null) {
-            canvas.drawBitmap(cornerTR, width - radius, 0, maskPaint);
+        if (mCornerTR != null) {
+            canvas.drawBitmap(mCornerTR, width - radius, 0, mMaskPaint);
         }
-        if (cornerBL != null) {
-            canvas.drawBitmap(cornerBL, 0, height - radius, maskPaint);
+        if (mCornerBL != null) {
+            canvas.drawBitmap(mCornerBL, 0, height - radius, mMaskPaint);
         }
-        if (cornerBR != null) {
-            canvas.drawBitmap(cornerBR, width - radius, height - radius, maskPaint);
+        if (mCornerBR != null) {
+            canvas.drawBitmap(mCornerBR, width - radius, height - radius, mMaskPaint);
         }
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/ui/BorderDrawable.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/ui/BorderDrawable.java
index b7ee63a..79cff25 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/ui/BorderDrawable.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/ui/BorderDrawable.java
@@ -19,15 +19,15 @@
  * not specified.
  */
 public class BorderDrawable extends ShapeDrawable {
-    private final boolean hasLeftBorder;
-    private final boolean hasRightBorder;
-    private final boolean hasTopBorder;
-    private final boolean hasBottomBorder;
-    private final int offsetToHideLeft;
-    private final int offsetToHideRight;
-    private final int offsetToHideTop;
-    private final int offsetToHideBottom;
-    private final int borderWidth;
+    private final boolean mHasLeftBorder;
+    private final boolean mHasRightBorder;
+    private final boolean mHasTopBorder;
+    private final boolean mHasBottomBorder;
+    private final int mOffsetToHideLeft;
+    private final int mOffsetToHideRight;
+    private final int mOffsetToHideTop;
+    private final int mOffsetToHideBottom;
+    private final int mBorderWidth;
 
     public BorderDrawable(Context context, Borders borders, float[] cornerRadii, boolean isRtL) {
         this(context, borders, cornerRadii, isRtL, /* width= */ 0, /* height= */ 0);
@@ -39,31 +39,31 @@
             int width, int height) {
         super(new RoundRectShape(cornerRadii, null, null));
 
-        borderWidth = (int) LayoutUtils.dpToPx(borders.getWidth(), context);
+        mBorderWidth = (int) LayoutUtils.dpToPx(borders.getWidth(), context);
 
         // Calculate the offsets which push the border outside the view, making it invisible
         int bitmask = borders.getBitmask();
         if (bitmask == 0 || bitmask == 15) {
             // All borders are visible
-            hasLeftBorder = true;
-            hasRightBorder = true;
-            hasTopBorder = true;
-            hasBottomBorder = true;
-            offsetToHideLeft = 0;
-            offsetToHideRight = 0;
-            offsetToHideTop = 0;
-            offsetToHideBottom = 0;
+            mHasLeftBorder = true;
+            mHasRightBorder = true;
+            mHasTopBorder = true;
+            mHasBottomBorder = true;
+            mOffsetToHideLeft = 0;
+            mOffsetToHideRight = 0;
+            mOffsetToHideTop = 0;
+            mOffsetToHideBottom = 0;
         } else {
             int leftEdge = isRtL ? Edges.END.getNumber() : Edges.START.getNumber();
             int rightEdge = isRtL ? Edges.START.getNumber() : Edges.END.getNumber();
-            hasLeftBorder = (bitmask & leftEdge) != 0;
-            hasRightBorder = (bitmask & rightEdge) != 0;
-            hasTopBorder = (bitmask & Edges.TOP.getNumber()) != 0;
-            hasBottomBorder = (bitmask & Edges.BOTTOM.getNumber()) != 0;
-            offsetToHideLeft = hasLeftBorder ? 0 : -borderWidth;
-            offsetToHideRight = hasRightBorder ? 0 : borderWidth;
-            offsetToHideTop = hasTopBorder ? 0 : -borderWidth;
-            offsetToHideBottom = hasBottomBorder ? 0 : borderWidth;
+            mHasLeftBorder = (bitmask & leftEdge) != 0;
+            mHasRightBorder = (bitmask & rightEdge) != 0;
+            mHasTopBorder = (bitmask & Edges.TOP.getNumber()) != 0;
+            mHasBottomBorder = (bitmask & Edges.BOTTOM.getNumber()) != 0;
+            mOffsetToHideLeft = mHasLeftBorder ? 0 : -mBorderWidth;
+            mOffsetToHideRight = mHasRightBorder ? 0 : mBorderWidth;
+            mOffsetToHideTop = mHasTopBorder ? 0 : -mBorderWidth;
+            mOffsetToHideBottom = mHasBottomBorder ? 0 : mBorderWidth;
         }
         getPaint().setStyle(Paint.Style.STROKE);
         // Multiply the width by two - the centerline of the stroke will be the edge of the view, so
@@ -71,14 +71,14 @@
         // correct width, the full stroke needs to be twice as wide.
         // For rounded corners, this relies on the containing FrameLayout to crop the outside half
         // of the rounded border; otherwise, the border would get thicker on the corners.
-        getPaint().setStrokeWidth(borderWidth * 2);
+        getPaint().setStrokeWidth(mBorderWidth * 2);
         getPaint().setColor(borders.getColor());
     }
 
     @Override
     public void setBounds(int left, int top, int right, int bottom) {
-        super.setBounds(left + offsetToHideLeft, top + offsetToHideTop, right + offsetToHideRight,
-                bottom + offsetToHideBottom);
+        super.setBounds(left + mOffsetToHideLeft, top + mOffsetToHideTop,
+                right + mOffsetToHideRight, bottom + mOffsetToHideBottom);
     }
 
     @Override
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/ui/ClipPathRoundedCornerDelegate.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/ui/ClipPathRoundedCornerDelegate.java
index 891e9f57..b8233a795 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/ui/ClipPathRoundedCornerDelegate.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/ui/ClipPathRoundedCornerDelegate.java
@@ -18,7 +18,7 @@
  * delegate.
  */
 class ClipPathRoundedCornerDelegate extends RoundedCornerDelegate {
-    private final Path clipPath = new Path();
+    private final Path mClipPath = new Path();
 
     /**
      * Turns off clipping to the outline.
@@ -38,14 +38,14 @@
     @Override
     public void onSizeChanged(int radius, int width, int height, int bitmask, boolean isRtL) {
         float[] radii = RoundedCornerViewHelper.createRoundedCornerBitMask(radius, bitmask, isRtL);
-        clipPath.addRoundRect(new RectF(0, 0, width, height), radii, Path.Direction.CW);
+        mClipPath.addRoundRect(new RectF(0, 0, width, height), radii, Path.Direction.CW);
     }
 
     /** Clips the path that was created in onSizeChanged(). */
     @Override
     public void dispatchDraw(Canvas canvas) {
-        if (clipPath != null) {
-            canvas.clipPath(clipPath);
+        if (mClipPath != null) {
+            canvas.clipPath(mClipPath);
         }
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/ui/GradientShader.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/ui/GradientShader.java
index 3a9a5466..fdbbfb2 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/ui/GradientShader.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/ui/GradientShader.java
@@ -16,35 +16,36 @@
 
 /** Generates a linear gradient according to CSS behavior */
 class GradientShader extends ShapeDrawable.ShaderFactory {
-    private final int[] colors;
-    private final float[] stops;
+    private final int[] mColors;
+    private final float[] mStops;
     @VisibleForTesting
-    final double angleRadians;
+    final double mAngleRadians;
     @VisibleForTesting
-    final double angleRadiansSmall;
-    @VisibleForTesting /*@Nullable*/ final Supplier<Boolean> rtLSupplier;
+    final double mAngleRadiansSmall;
+    @VisibleForTesting /*@Nullable*/ final Supplier<Boolean> mRtLSupplier;
 
     GradientShader(
             int[] colors, float[] stops, int angle, /*@Nullable*/ Supplier<Boolean> rtLSupplier) {
         checkState(colors.length == stops.length, "Mismatch: got %s colors and %s stops",
                 colors.length, stops.length);
-        this.colors = colors;
-        this.stops = stops;
-        this.angleRadians = Math.toRadians(angle % 360);
-        this.angleRadiansSmall = Math.toRadians(angle % 90);
-        this.rtLSupplier = rtLSupplier;
+        this.mColors = colors;
+        this.mStops = stops;
+        this.mAngleRadians = Math.toRadians(angle % 360);
+        this.mAngleRadiansSmall = Math.toRadians(angle % 90);
+        this.mRtLSupplier = rtLSupplier;
     }
 
     @Override
     public Shader resize(int width, int height) {
-        RectF line = calculateGradientLine(width, height, angleRadians, angleRadiansSmall, isRtL());
+        RectF line =
+                calculateGradientLine(width, height, mAngleRadians, mAngleRadiansSmall, isRtL());
 
         return new android.graphics.LinearGradient(
-                line.left, line.top, line.right, line.bottom, colors, stops, TileMode.CLAMP);
+                line.left, line.top, line.right, line.bottom, mColors, mStops, TileMode.CLAMP);
     }
 
     private boolean isRtL() {
-        return rtLSupplier != null && rtLSupplier.get();
+        return mRtLSupplier != null && mRtLSupplier.get();
     }
 
     /** Returns a RectF as a shorthand for two points - start coords and end coords */
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/ui/GridRowView.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/ui/GridRowView.java
index a288228c..18cdb4b 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/ui/GridRowView.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/ui/GridRowView.java
@@ -19,23 +19,23 @@
 /** LinearLayout with special measuring code for GridRow */
 public class GridRowView extends LinearLayout {
     private static final String TAG = "GridRowView";
-    private final Supplier<Boolean> isRtlSupplier;
+    private final Supplier<Boolean> mIsRtlSupplier;
 
     // Total width of the GridRowView's internal padding, child widths, and child margins.
     // This will not equal getMeasuredWidth() when the GridRowView is MATCH_PARENT width and the
     // parent is wider than the space required by the GridRowView.
     // This is the analogue of LinearLayout.mTotalLength
     @VisibleForTesting
-    int totalContentWidth = 0;
+    int mTotalContentWidth = 0;
 
     // Copied from LinearLayout.
-    private int viewGravity = Gravity.START | Gravity.TOP;
+    private int mViewGravity = Gravity.START | Gravity.TOP;
 
     // TODO: call to setOrientation(int) not allowed on the given receiver.
     @SuppressWarnings("nullness:method.invocation.invalid")
     public GridRowView(Context context, Supplier<Boolean> isRtlSupplier) {
         super(context);
-        this.isRtlSupplier = isRtlSupplier;
+        this.mIsRtlSupplier = isRtlSupplier;
         super.setOrientation(HORIZONTAL);
     }
 
@@ -107,7 +107,7 @@
             LayoutParams params = ((LayoutParams) view.getLayoutParams());
             if (params.weight == 0
                     && (params.width > 0 || params.width == LayoutParams.WRAP_CONTENT)
-                    && !params.isCollapsible) {
+                    && !params.mIsCollapsible) {
                 if (params.width == LayoutParams.WRAP_CONTENT) {
                     view.measure(unlimitedSpace, getMaxHeightSpecForView(params, maxHeightSpec));
                 } else {
@@ -136,7 +136,7 @@
             }
 
             LayoutParams params = ((LayoutParams) view.getLayoutParams());
-            if (!params.isCollapsible) {
+            if (!params.mIsCollapsible) {
                 continue;
             }
             int viewMaxHeight = getMaxHeightSpecForView(params, maxHeightSpec);
@@ -248,15 +248,15 @@
         }
 
         // Calculate totalContentWidth
-        totalContentWidth = gridRowHorizontalPadding;
+        mTotalContentWidth = gridRowHorizontalPadding;
         for (int i = 0; i < getChildCount(); i++) {
             View view = getChildAt(i);
             if (view.getVisibility() == View.GONE) {
                 continue;
             }
-            totalContentWidth += view.getMeasuredWidth();
+            mTotalContentWidth += view.getMeasuredWidth();
             LayoutParams params = ((LayoutParams) view.getLayoutParams());
-            totalContentWidth += MarginLayoutParamsCompat.getMarginStart(params)
+            mTotalContentWidth += MarginLayoutParamsCompat.getMarginStart(params)
                     + MarginLayoutParamsCompat.getMarginEnd(params);
         }
 
@@ -290,7 +290,7 @@
     // THIS METHOD IS UNTESTED: PROCEED WITH CAUTION!
     @Override
     protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
-        final boolean isLayoutRtl = isRtlSupplier.get();
+        final boolean isLayoutRtl = mIsRtlSupplier.get();
         final int paddingTop = getPaddingTop();
 
         int childTop;
@@ -312,12 +312,12 @@
         switch (Gravity.getAbsoluteGravity(majorGravity, layoutDirection)) {
             case Gravity.RIGHT:
                 // totalContentWidth contains the padding already
-                childLeft = getPaddingLeft() + right - left - totalContentWidth;
+                childLeft = getPaddingLeft() + right - left - mTotalContentWidth;
                 break;
 
             case Gravity.CENTER_HORIZONTAL:
                 // totalContentWidth contains the padding already
-                childLeft = getPaddingLeft() + (right - left - totalContentWidth) / 2;
+                childLeft = getPaddingLeft() + (right - left - mTotalContentWidth) / 2;
                 break;
 
             case Gravity.LEFT:
@@ -390,7 +390,7 @@
      */
     @Override
     public void setGravity(int gravity) {
-        if (viewGravity != gravity) {
+        if (mViewGravity != gravity) {
             if ((gravity & Gravity.RELATIVE_HORIZONTAL_GRAVITY_MASK) == 0) {
                 gravity |= Gravity.START;
             }
@@ -399,7 +399,7 @@
                 gravity |= Gravity.TOP;
             }
 
-            viewGravity = gravity;
+            mViewGravity = gravity;
             requestLayout();
         }
     }
@@ -413,15 +413,15 @@
      */
     @Override
     public int getGravity() {
-        return viewGravity;
+        return mViewGravity;
     }
 
     // (Copied from LinearLayout.java API 27)
     @Override
     public void setHorizontalGravity(int horizontalGravity) {
         final int gravity = horizontalGravity & Gravity.RELATIVE_HORIZONTAL_GRAVITY_MASK;
-        if ((viewGravity & Gravity.RELATIVE_HORIZONTAL_GRAVITY_MASK) != gravity) {
-            viewGravity = (viewGravity & ~Gravity.RELATIVE_HORIZONTAL_GRAVITY_MASK) | gravity;
+        if ((mViewGravity & Gravity.RELATIVE_HORIZONTAL_GRAVITY_MASK) != gravity) {
+            mViewGravity = (mViewGravity & ~Gravity.RELATIVE_HORIZONTAL_GRAVITY_MASK) | gravity;
             requestLayout();
         }
     }
@@ -430,8 +430,8 @@
     @Override
     public void setVerticalGravity(int verticalGravity) {
         final int gravity = verticalGravity & Gravity.VERTICAL_GRAVITY_MASK;
-        if ((viewGravity & Gravity.VERTICAL_GRAVITY_MASK) != gravity) {
-            viewGravity = (viewGravity & ~Gravity.VERTICAL_GRAVITY_MASK) | gravity;
+        if ((mViewGravity & Gravity.VERTICAL_GRAVITY_MASK) != gravity) {
+            mViewGravity = (mViewGravity & ~Gravity.VERTICAL_GRAVITY_MASK) | gravity;
             requestLayout();
         }
     }
@@ -440,7 +440,7 @@
     public boolean hasCollapsibleCells() {
         for (int i = 0; i < getChildCount(); i++) {
             View view = getChildAt(i);
-            if (((LayoutParams) view.getLayoutParams()).isCollapsible) {
+            if (((LayoutParams) view.getLayoutParams()).mIsCollapsible) {
                 return true;
             }
         }
@@ -455,11 +455,11 @@
      * collapsible cell starts to shrink.
      */
     public static class LayoutParams extends LinearLayout.LayoutParams {
-        private final boolean isCollapsible;
+        private final boolean mIsCollapsible;
 
         public LayoutParams(LayoutParams source) {
             super(source);
-            isCollapsible = source.getIsCollapsible();
+            mIsCollapsible = source.getIsCollapsible();
         }
 
         public LayoutParams(int width, int height, boolean isCollapsible) {
@@ -478,43 +478,43 @@
             if (width == MATCH_PARENT) {
                 Logger.wtf(TAG, "GridRowView cells cannot have width MATCH_PARENT.");
             }
-            this.isCollapsible = isCollapsible;
+            this.mIsCollapsible = isCollapsible;
         }
 
         public LayoutParams(Context c, AttributeSet attrs) {
             super(c, attrs);
-            isCollapsible = false;
+            mIsCollapsible = false;
         }
 
         public LayoutParams(int width, int height) {
             super(width, height);
-            isCollapsible = false;
+            mIsCollapsible = false;
         }
 
         public LayoutParams(int width, int height, float weight) {
             super(width, height, weight);
-            isCollapsible = false;
+            mIsCollapsible = false;
         }
 
         public LayoutParams(ViewGroup.LayoutParams p) {
             super(p);
-            isCollapsible = false;
+            mIsCollapsible = false;
         }
 
         public LayoutParams(MarginLayoutParams source) {
             super(source);
-            isCollapsible = false;
+            mIsCollapsible = false;
         }
 
         public LayoutParams(LinearLayout.LayoutParams source) {
             super((MarginLayoutParams) source);
             weight = source.weight;
             gravity = source.gravity;
-            isCollapsible = false;
+            mIsCollapsible = false;
         }
 
         public boolean getIsCollapsible() {
-            return isCollapsible;
+            return mIsCollapsible;
         }
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/ui/RoundedCornerMaskCache.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/ui/RoundedCornerMaskCache.java
index 5d31ba31..d2dfa009 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/ui/RoundedCornerMaskCache.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/ui/RoundedCornerMaskCache.java
@@ -28,101 +28,101 @@
         int BOTTOM_RIGHT = 3;
     }
 
-    private final Canvas canvas;
-    private final Paint paint;
-    private final Paint maskPaint;
-    private final LruCache<Integer, RoundedCornerBitmaps> cache;
+    private final Canvas mCanvas;
+    private final Paint mPaint;
+    private final Paint mMaskPaint;
+    private final LruCache<Integer, RoundedCornerBitmaps> mCache;
 
     public RoundedCornerMaskCache() {
-        paint = new Paint(Paint.ANTI_ALIAS_FLAG);
-        maskPaint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.FILTER_BITMAP_FLAG);
-        maskPaint.setXfermode(new PorterDuffXfermode(Mode.CLEAR));
+        mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
+        mMaskPaint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.FILTER_BITMAP_FLAG);
+        mMaskPaint.setXfermode(new PorterDuffXfermode(Mode.CLEAR));
 
-        canvas = new Canvas();
-        cache = new LruCache<Integer, RoundedCornerBitmaps>(CACHE_SIZE) {
+        mCanvas = new Canvas();
+        mCache = new LruCache<Integer, RoundedCornerBitmaps>(CACHE_SIZE) {
             @Override
             protected RoundedCornerBitmaps create(Integer key) {
-                return new RoundedCornerBitmaps(key, canvas, maskPaint);
+                return new RoundedCornerBitmaps(key, mCanvas, mMaskPaint);
             }
         };
     }
 
     Paint getPaint() {
-        return paint;
+        return mPaint;
     }
 
     Paint getMaskPaint() {
-        return maskPaint;
+        return mMaskPaint;
     }
 
     RoundedCornerBitmaps getMasks(int radius) {
-        RoundedCornerBitmaps masks = cache.get(radius);
+        RoundedCornerBitmaps masks = mCache.get(radius);
         if (masks == null) {
-            masks = new RoundedCornerBitmaps(radius, canvas, maskPaint);
-            cache.put(radius, masks);
+            masks = new RoundedCornerBitmaps(radius, mCanvas, mMaskPaint);
+            mCache.put(radius, masks);
         }
         return masks;
     }
 
     public void purge() {
-        cache.evictAll();
+        mCache.evictAll();
     }
 
     static class RoundedCornerBitmaps {
         @VisibleForTesting
-        final Bitmap[] masks;
-        private final Canvas canvas;
-        private final int radius;
-        private final Paint maskPaint;
+        final Bitmap[] mMasks;
+        private final Canvas mCanvas;
+        private final int mRadius;
+        private final Paint mMaskPaint;
 
         RoundedCornerBitmaps(int radius, Canvas canvas, Paint maskPaint) {
-            masks = new Bitmap[4];
-            this.canvas = canvas;
-            this.radius = radius;
-            this.maskPaint = maskPaint;
+            mMasks = new Bitmap[4];
+            this.mCanvas = canvas;
+            this.mRadius = radius;
+            this.mMaskPaint = maskPaint;
         }
 
         Bitmap get(@Corner int corner) {
             switch (corner) {
                 case Corner.TOP_LEFT:
-                    if (masks[Corner.TOP_LEFT] == null) {
-                        masks[Corner.TOP_LEFT] =
-                                Bitmap.createBitmap(radius, radius, Config.ALPHA_8);
-                        canvas.setBitmap(masks[Corner.TOP_LEFT]);
-                        canvas.drawColor(Color.BLACK);
-                        canvas.drawCircle(radius, radius, radius, maskPaint);
+                    if (mMasks[Corner.TOP_LEFT] == null) {
+                        mMasks[Corner.TOP_LEFT] =
+                                Bitmap.createBitmap(mRadius, mRadius, Config.ALPHA_8);
+                        mCanvas.setBitmap(mMasks[Corner.TOP_LEFT]);
+                        mCanvas.drawColor(Color.BLACK);
+                        mCanvas.drawCircle(mRadius, mRadius, mRadius, mMaskPaint);
                     }
-                    return masks[Corner.TOP_LEFT];
+                    return mMasks[Corner.TOP_LEFT];
 
                 case Corner.TOP_RIGHT:
-                    if (masks[Corner.TOP_RIGHT] == null) {
-                        masks[Corner.TOP_RIGHT] =
-                                Bitmap.createBitmap(radius, radius, Config.ALPHA_8);
-                        canvas.setBitmap(masks[Corner.TOP_RIGHT]);
-                        canvas.drawColor(Color.BLACK);
-                        canvas.drawCircle(0, radius, radius, maskPaint);
+                    if (mMasks[Corner.TOP_RIGHT] == null) {
+                        mMasks[Corner.TOP_RIGHT] =
+                                Bitmap.createBitmap(mRadius, mRadius, Config.ALPHA_8);
+                        mCanvas.setBitmap(mMasks[Corner.TOP_RIGHT]);
+                        mCanvas.drawColor(Color.BLACK);
+                        mCanvas.drawCircle(0, mRadius, mRadius, mMaskPaint);
                     }
-                    return masks[Corner.TOP_RIGHT];
+                    return mMasks[Corner.TOP_RIGHT];
 
                 case Corner.BOTTOM_LEFT:
-                    if (masks[Corner.BOTTOM_LEFT] == null) {
-                        masks[Corner.BOTTOM_LEFT] =
-                                Bitmap.createBitmap(radius, radius, Config.ALPHA_8);
-                        canvas.setBitmap(masks[Corner.BOTTOM_LEFT]);
-                        canvas.drawColor(Color.BLACK);
-                        canvas.drawCircle(radius, 0, radius, maskPaint);
+                    if (mMasks[Corner.BOTTOM_LEFT] == null) {
+                        mMasks[Corner.BOTTOM_LEFT] =
+                                Bitmap.createBitmap(mRadius, mRadius, Config.ALPHA_8);
+                        mCanvas.setBitmap(mMasks[Corner.BOTTOM_LEFT]);
+                        mCanvas.drawColor(Color.BLACK);
+                        mCanvas.drawCircle(mRadius, 0, mRadius, mMaskPaint);
                     }
-                    return masks[Corner.BOTTOM_LEFT];
+                    return mMasks[Corner.BOTTOM_LEFT];
 
                 case Corner.BOTTOM_RIGHT:
-                    if (masks[Corner.BOTTOM_RIGHT] == null) {
-                        masks[Corner.BOTTOM_RIGHT] =
-                                Bitmap.createBitmap(radius, radius, Config.ALPHA_8);
-                        canvas.setBitmap(masks[Corner.BOTTOM_RIGHT]);
-                        canvas.drawColor(Color.BLACK);
-                        canvas.drawCircle(0, 0, radius, maskPaint);
+                    if (mMasks[Corner.BOTTOM_RIGHT] == null) {
+                        mMasks[Corner.BOTTOM_RIGHT] =
+                                Bitmap.createBitmap(mRadius, mRadius, Config.ALPHA_8);
+                        mCanvas.setBitmap(mMasks[Corner.BOTTOM_RIGHT]);
+                        mCanvas.drawColor(Color.BLACK);
+                        mCanvas.drawCircle(0, 0, mRadius, mMaskPaint);
                     }
-                    return masks[Corner.BOTTOM_RIGHT];
+                    return mMasks[Corner.BOTTOM_RIGHT];
 
                 default:
                     throw new IllegalArgumentException(
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/ui/RoundedCornerWrapperView.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/ui/RoundedCornerWrapperView.java
index 62a051c..4da9a94 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/ui/RoundedCornerWrapperView.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/piet/ui/RoundedCornerWrapperView.java
@@ -53,25 +53,25 @@
  * strategies.
  */
 public class RoundedCornerWrapperView extends FrameLayout {
-    private final int radiusOverride;
-    private final RoundedCorners roundedCorners;
-    private final Supplier<Boolean> isRtLSupplier;
-    private final Context context;
-    private final Borders borders;
-    private final boolean allowClipPath;
-    private final boolean allowOutlineRounding;
-    private final boolean hasRoundedCorners;
-    private final boolean allFourCornersRounded;
-    private final RoundedCornerMaskCache maskCache;
+    private final int mRadiusOverride;
+    private final RoundedCorners mRoundedCorners;
+    private final Supplier<Boolean> mIsRtLSupplier;
+    private final Context mContext;
+    private final Borders mBorders;
+    private final boolean mAllowClipPath;
+    private final boolean mAllowOutlineRounding;
+    private final boolean mHasRoundedCorners;
+    private final boolean mAllFourCornersRounded;
+    private final RoundedCornerMaskCache mMaskCache;
 
-    private RoundedCornerDelegate roundingDelegate;
-    private boolean drawSuperCalled;
+    private RoundedCornerDelegate mRoundingDelegate;
+    private boolean mDrawSuperCalled;
 
     // Keep track of current mask configuration so we can use cached values if nothing has changed.
-    int lastWidth = -1;
-    int lastHeight = -1;
+    int mLastWidth = -1;
+    int mLastHeight = -1;
 
-    private int roundedCornerRadius;
+    private int mRoundedCornerRadius;
 
     // Doesn't like the call to setOutlineProvider
     @SuppressWarnings("initialization")
@@ -80,17 +80,17 @@
             Borders borders, boolean allowClipPath, boolean allowOutlineRounding) {
         super(context);
 
-        this.radiusOverride = radiusOverride;
-        this.roundedCorners = roundedCorners;
-        this.isRtLSupplier = isRtLSupplier;
-        this.allowClipPath = allowClipPath;
-        this.allowOutlineRounding = allowOutlineRounding;
-        this.context = context;
-        this.borders = borders;
-        this.maskCache = maskCache;
-        this.hasRoundedCorners =
+        this.mRadiusOverride = radiusOverride;
+        this.mRoundedCorners = roundedCorners;
+        this.mIsRtLSupplier = isRtLSupplier;
+        this.mAllowClipPath = allowClipPath;
+        this.mAllowOutlineRounding = allowOutlineRounding;
+        this.mContext = context;
+        this.mBorders = borders;
+        this.mMaskCache = maskCache;
+        this.mHasRoundedCorners =
                 RoundedCornerViewHelper.hasValidRoundedCorners(roundedCorners, radiusOverride);
-        this.allFourCornersRounded =
+        this.mAllFourCornersRounded =
                 RoundedCornerViewHelper.allFourCornersRounded(roundedCorners.getBitmask());
 
         setRoundingStrategy();
@@ -104,14 +104,14 @@
     }
 
     private void setRoundingStrategy() {
-        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP && allowClipPath) {
+        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP && mAllowClipPath) {
             setRoundingDelegate(RoundingStrategy.CLIP_PATH);
             if (VERSION.SDK_INT < VERSION_CODES.JELLY_BEAN_MR2) {
                 // clipPath doesn't work with hardware rendering on < 18.
                 setLayerType(LAYER_TYPE_SOFTWARE, null);
             }
-        } else if (Build.VERSION.SDK_INT >= VERSION_CODES.LOLLIPOP && allFourCornersRounded
-                && allowOutlineRounding) {
+        } else if (Build.VERSION.SDK_INT >= VERSION_CODES.LOLLIPOP && mAllFourCornersRounded
+                && mAllowOutlineRounding) {
             setRoundingDelegate(RoundingStrategy.OUTLINE_PROVIDER);
         } else {
             setRoundingDelegate(RoundingStrategy.BITMAP_MASKING);
@@ -119,9 +119,9 @@
     }
 
     private void updateRoundingStrategy() {
-        if (roundingDelegate instanceof OutlineProviderRoundedCornerDelegate
+        if (mRoundingDelegate instanceof OutlineProviderRoundedCornerDelegate
                 && this.isAttachedToWindow() && !this.isHardwareAccelerated()) {
-            if (allowClipPath) {
+            if (mAllowClipPath) {
                 setRoundingDelegate(RoundingStrategy.CLIP_PATH);
             } else {
                 setRoundingDelegate(RoundingStrategy.BITMAP_MASKING);
@@ -130,26 +130,26 @@
     }
 
     void setRoundingDelegate(RoundingStrategy strategy) {
-        if (roundingDelegate != null) {
-            roundingDelegate.destroy(this);
+        if (mRoundingDelegate != null) {
+            mRoundingDelegate.destroy(this);
         }
-        roundingDelegate = RoundedCornerDelegateFactory.getDelegate(
-                strategy, maskCache, roundedCorners.getBitmask(), isRtLSupplier.get());
-        roundingDelegate.initializeForView(this);
+        mRoundingDelegate = RoundedCornerDelegateFactory.getDelegate(
+                strategy, mMaskCache, mRoundedCorners.getBitmask(), mIsRtLSupplier.get());
+        mRoundingDelegate.initializeForView(this);
     }
 
     private void setupOutlineProvider() {
-        if (hasRoundedCorners) {
+        if (mHasRoundedCorners) {
             super.setOutlineProvider(new ViewOutlineProvider() {
                 @Override
                 public void getOutline(View view, Outline outline) {
                     int radius = getRadius(view.getWidth(), view.getHeight());
-                    if (allFourCornersRounded) {
+                    if (mAllFourCornersRounded) {
                         outline.setRoundRect(0, 0, view.getWidth(), view.getHeight(), radius);
                         return;
                     }
                     float[] radii = RoundedCornerViewHelper.createRoundedCornerBitMask(
-                            radius, roundedCorners.getBitmask(), isRtLSupplier.get());
+                            radius, mRoundedCorners.getBitmask(), mIsRtLSupplier.get());
                     RoundRectShape outlineShape = new RoundRectShape(radii, null, null);
                     outlineShape.resize(view.getWidth(), view.getHeight());
                     // This actually sets the outline to use this shape
@@ -167,7 +167,7 @@
      */
     @Override
     protected void dispatchDraw(Canvas canvas) {
-        roundingDelegate.dispatchDraw(canvas);
+        mRoundingDelegate.dispatchDraw(canvas);
         super.dispatchDraw(canvas);
     }
 
@@ -180,7 +180,7 @@
     @Override
     public void onDescendantInvalidated(View child, View target) {
         super.onDescendantInvalidated(child, target);
-        roundingDelegate.onDescendantInvalidated(this, target);
+        mRoundingDelegate.onDescendantInvalidated(this, target);
     }
 
     /**
@@ -191,7 +191,7 @@
      */
     @Override
     public ViewParent invalidateChildInParent(final int[] location, final Rect dirty) {
-        roundingDelegate.invalidateChildInParent(this, dirty);
+        mRoundingDelegate.invalidateChildInParent(this, dirty);
         return super.invalidateChildInParent(location, dirty);
     }
 
@@ -204,13 +204,13 @@
      */
     @Override
     public void draw(Canvas canvas) {
-        drawSuperCalled = false;
-        roundingDelegate.draw(this, canvas);
-        checkState(drawSuperCalled, "View.draw() never called in RoundedCornerWrapperView.draw()");
+        mDrawSuperCalled = false;
+        mRoundingDelegate.draw(this, canvas);
+        checkState(mDrawSuperCalled, "View.draw() never called in RoundedCornerWrapperView.draw()");
     }
 
     public void drawSuper(Canvas canvas) {
-        drawSuperCalled = true;
+        mDrawSuperCalled = true;
         super.draw(canvas);
     }
 
@@ -230,8 +230,8 @@
     protected void onSizeChanged(int width, int height, int oldWidth, int oldHeight) {
         super.onSizeChanged(width, height, oldWidth, oldHeight);
         updateRoundingStrategy();
-        roundingDelegate.onSizeChanged(getRadius(width, height), width, height,
-                roundedCorners.getBitmask(), isRtLSupplier.get());
+        mRoundingDelegate.onSizeChanged(getRadius(width, height), width, height,
+                mRoundedCorners.getBitmask(), mIsRtLSupplier.get());
     }
 
     /**
@@ -243,7 +243,7 @@
     @Override
     protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
         super.onLayout(changed, left, top, right, bottom);
-        if (!changed || !hasRoundedCorners) {
+        if (!changed || !mHasRoundedCorners) {
             return;
         }
 
@@ -257,7 +257,7 @@
         int radius = getRadius(width, height);
         addBorders(radius);
 
-        roundingDelegate.onLayout(radius, isRtLSupplier.get(), width, height);
+        mRoundingDelegate.onLayout(radius, mIsRtLSupplier.get(), width, height);
     }
 
     /**
@@ -271,17 +271,17 @@
      * appropriate measurements.
      */
     void addBorders(int radius) {
-        if (borders.getWidth() <= 0) {
+        if (mBorders.getWidth() <= 0) {
             return;
         }
-        boolean isRtL = isRtLSupplier.get();
+        boolean isRtL = mIsRtLSupplier.get();
         // Set up outline of borders
         float[] outerRadii = RoundedCornerViewHelper.createRoundedCornerBitMask(
-                radius, roundedCorners.getBitmask(), isRtL);
+                radius, mRoundedCorners.getBitmask(), isRtL);
 
         // Create a drawable to stroke the border
         BorderDrawable borderDrawable =
-                new BorderDrawable(context, borders, outerRadii, isRtL, lastWidth, lastHeight);
+                new BorderDrawable(mContext, mBorders, outerRadii, isRtL, mLastWidth, mLastHeight);
         this.setForeground(borderDrawable);
     }
 
@@ -294,43 +294,43 @@
      * for the size of the view.
      */
     public int getRadius(int width, int height) {
-        if (!hasRoundedCorners || width == 0 || height == 0) {
+        if (!mHasRoundedCorners || width == 0 || height == 0) {
             return 0;
         }
-        if (radiusOverride > 0) {
-            roundedCornerRadius = radiusOverride;
-            return roundedCornerRadius;
+        if (mRadiusOverride > 0) {
+            mRoundedCornerRadius = mRadiusOverride;
+            return mRoundedCornerRadius;
         }
-        if (width == lastWidth && height == lastHeight) {
-            return roundedCornerRadius;
+        if (width == mLastWidth && height == mLastHeight) {
+            return mRoundedCornerRadius;
         }
         int radius = makeRadius(width, height);
-        lastWidth = width;
-        lastHeight = height;
+        mLastWidth = width;
+        mLastHeight = height;
         return radius;
     }
 
     /** Calculates the corner radius, clipping to width or height when necessary. */
     private int makeRadius(int width, int height) {
         int radius;
-        RadiusOptionsCase radiusOptions = roundedCorners.getRadiusOptionsCase();
+        RadiusOptionsCase radiusOptions = mRoundedCorners.getRadiusOptionsCase();
 
         switch (radiusOptions) {
             case RADIUS_DP:
-                radius = (int) LayoutUtils.dpToPx(roundedCorners.getRadiusDp(), context);
+                radius = (int) LayoutUtils.dpToPx(mRoundedCorners.getRadiusDp(), mContext);
                 break;
             case RADIUS_PERCENTAGE_OF_HEIGHT:
-                radius = roundedCorners.getRadiusPercentageOfHeight() * height / 100;
+                radius = mRoundedCorners.getRadiusPercentageOfHeight() * height / 100;
                 break;
             case RADIUS_PERCENTAGE_OF_WIDTH:
-                radius = roundedCorners.getRadiusPercentageOfWidth() * width / 100;
+                radius = mRoundedCorners.getRadiusPercentageOfWidth() * width / 100;
                 break;
             default:
                 radius = 0;
         }
 
-        roundedCornerRadius =
-                RoundedCornerViewHelper.adjustRadiusIfTooBig(width, height, radius, roundedCorners);
-        return roundedCornerRadius;
+        mRoundedCornerRadius = RoundedCornerViewHelper.adjustRadiusIfTooBig(
+                width, height, radius, mRoundedCorners);
+        return mRoundedCornerRadius;
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/sharedstream/contentchanged/StreamContentChangedListener.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/sharedstream/contentchanged/StreamContentChangedListener.java
index 54cffeb..eea1dbf 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/sharedstream/contentchanged/StreamContentChangedListener.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/sharedstream/contentchanged/StreamContentChangedListener.java
@@ -12,19 +12,19 @@
  * {@link ContentChangedListener} used to notify any number of listeners when content is changed.
  */
 public class StreamContentChangedListener implements ContentChangedListener {
-    private final HashSet<ContentChangedListener> listeners = new HashSet<>();
+    private final HashSet<ContentChangedListener> mListeners = new HashSet<>();
 
     public void addContentChangedListener(ContentChangedListener listener) {
-        listeners.add(listener);
+        mListeners.add(listener);
     }
 
     public void removeContentChangedListener(ContentChangedListener listener) {
-        listeners.remove(listener);
+        mListeners.remove(listener);
     }
 
     @Override
     public void onContentChanged() {
-        for (ContentChangedListener listener : listeners) {
+        for (ContentChangedListener listener : mListeners) {
             listener.onContentChanged();
         }
     }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/sharedstream/contextmenumanager/ContextMenuManagerImpl.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/sharedstream/contextmenumanager/ContextMenuManagerImpl.java
index efafead1..f7ddaf9 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/sharedstream/contextmenumanager/ContextMenuManagerImpl.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/sharedstream/contextmenumanager/ContextMenuManagerImpl.java
@@ -39,20 +39,20 @@
     // above a card.
     private static final int FRACTION_FROM_BOTTOM_EDGE = FRACTION_FROM_EDGE - 1;
 
-    private final MenuMeasurer menuMeasurer;
-    private final Context context;
-    /*@Nullable*/ private View view;
+    private final MenuMeasurer mMenuMeasurer;
+    private final Context mContext;
+    /*@Nullable*/ private View mView;
 
-    /*@Nullable*/ private PopupWindow popupWindow;
+    /*@Nullable*/ private PopupWindow mPopupWindow;
 
     public ContextMenuManagerImpl(MenuMeasurer menuMeasurer, Context context) {
-        this.menuMeasurer = menuMeasurer;
-        this.context = context;
+        this.mMenuMeasurer = menuMeasurer;
+        this.mContext = context;
     }
 
     @Override
     public void setView(View view) {
-        this.view = view;
+        this.mView = view;
     }
 
     /**
@@ -72,15 +72,15 @@
         }
 
         ArrayAdapter<String> adapter =
-                new ArrayAdapter<>(context, R.layout.feed_simple_list_item, items);
+                new ArrayAdapter<>(mContext, R.layout.feed_simple_list_item, items);
 
-        ListView listView = createListView(adapter, context);
+        ListView listView = createListView(adapter, mContext);
 
-        Size measurements = menuMeasurer.measureAdapterContent(
+        Size measurements = mMenuMeasurer.measureAdapterContent(
                 listView, adapter, /* windowPadding= */ 0, getStreamWidth(), getStreamHeight());
 
         PopupWindowWithDimensions popupWindowWithDimensions =
-                createPopupWindow(listView, measurements, context);
+                createPopupWindow(listView, measurements, mContext);
 
         listView.setOnItemClickListener((parent, view, position, id) -> {
             handler.handleClick(position);
@@ -114,7 +114,7 @@
             parent.requestDisallowInterceptTouchEvent(true);
         }
 
-        this.popupWindow = popupWindowWithDimensions.getPopupWindow();
+        this.mPopupWindow = popupWindowWithDimensions.getPopupWindow();
         return true;
     }
 
@@ -259,31 +259,31 @@
      * including anything below the screen.
      */
     int getStreamHeight() {
-        return checkNotNull(view).getHeight();
+        return checkNotNull(mView).getHeight();
     }
 
     /** Gets the width of the Stream. */
     private int getStreamWidth() {
-        return checkNotNull(view).getWidth();
+        return checkNotNull(mView).getWidth();
     }
 
     /** Gets the Y coordinate of the position of the Stream. */
     private int getStreamYPosition() {
-        return getYPosition(checkNotNull(view));
+        return getYPosition(checkNotNull(mView));
     }
 
     private boolean menuShowing() {
-        return popupWindow != null && popupWindow.isShowing();
+        return mPopupWindow != null && mPopupWindow.isShowing();
     }
 
     @Override
     public void dismissPopup() {
-        if (popupWindow == null) {
+        if (mPopupWindow == null) {
             return;
         }
 
-        popupWindow.dismiss();
-        popupWindow = null;
+        mPopupWindow.dismiss();
+        mPopupWindow = null;
     }
 
     private int getYPosition(View view) {
@@ -295,20 +295,20 @@
 
     /** Represents a {@link PopupWindow} that accounts for padding caused by shadows. */
     private static class PopupWindowWithDimensions {
-        private final PopupWindow popupWindow;
-        private final Size size;
+        private final PopupWindow mPopupWindow;
+        private final Size mSize;
 
         PopupWindowWithDimensions(PopupWindow popupWindow, Size size) {
-            this.popupWindow = popupWindow;
-            this.size = size;
+            this.mPopupWindow = popupWindow;
+            this.mSize = size;
         }
 
         PopupWindow getPopupWindow() {
-            return popupWindow;
+            return mPopupWindow;
         }
 
         Size getDimensions() {
-            return size;
+            return mSize;
         }
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/sharedstream/contextmenumanager/FloatingContextMenuManager.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/sharedstream/contextmenumanager/FloatingContextMenuManager.java
index 4b394347..86b779e 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/sharedstream/contextmenumanager/FloatingContextMenuManager.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/sharedstream/contextmenumanager/FloatingContextMenuManager.java
@@ -21,11 +21,11 @@
  * without regard to the anchor view.
  */
 public class FloatingContextMenuManager implements ContextMenuManager {
-    private final Context context;
-    /*@Nullable*/ private AlertDialog alertDialog;
+    private final Context mContext;
+    /*@Nullable*/ private AlertDialog mAlertDialog;
 
     public FloatingContextMenuManager(Context context) {
-        this.context = context;
+        this.mContext = context;
     }
 
     @Override
@@ -36,10 +36,10 @@
         }
 
         ArrayAdapter<String> adapter =
-                new ArrayAdapter<>(context, R.layout.feed_simple_list_item, items);
+                new ArrayAdapter<>(mContext, R.layout.feed_simple_list_item, items);
 
-        ListView listView = createListView(adapter, context);
-        AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(context);
+        ListView listView = createListView(adapter, mContext);
+        AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(mContext);
 
         dialogBuilder.setView(listView);
         AlertDialog alertDialog = dialogBuilder.create();
@@ -54,7 +54,7 @@
         }
         alertDialog.show();
 
-        this.alertDialog = alertDialog;
+        this.mAlertDialog = alertDialog;
         return true;
     }
 
@@ -77,9 +77,9 @@
 
     @Override
     public void dismissPopup() {
-        if (alertDialog != null) {
-            alertDialog.dismiss();
-            alertDialog = null;
+        if (mAlertDialog != null) {
+            mAlertDialog.dismiss();
+            mAlertDialog = null;
         }
     }
 
@@ -89,6 +89,6 @@
     }
 
     private boolean menuShowing() {
-        return alertDialog != null && alertDialog.isShowing();
+        return mAlertDialog != null && mAlertDialog.isShowing();
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/sharedstream/deepestcontenttracker/DeepestContentTracker.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/sharedstream/deepestcontenttracker/DeepestContentTracker.java
index fbeb1c3b..4e4b7a2 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/sharedstream/deepestcontenttracker/DeepestContentTracker.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/sharedstream/deepestcontenttracker/DeepestContentTracker.java
@@ -15,54 +15,54 @@
 public class DeepestContentTracker implements ViewDepthProvider {
     private static final String TAG = "DeepestContentTracker";
 
-    private final List</*@Nullable*/ String> contentIds = new ArrayList<>();
+    private final List</*@Nullable*/ String> mContentIds = new ArrayList<>();
 
     public void updateDeepestContentTracker(int contentPosition, /*@Nullable*/ String contentId) {
         // Fill content ids to size of content position. This is needed in-case we programmatically
         // set scroll position of the recycler view. Add one to contentPosition size in order to
         // more easily perform a set below.
-        while (contentIds.size() < contentPosition + 1) {
-            contentIds.add(null);
+        while (mContentIds.size() < contentPosition + 1) {
+            mContentIds.add(null);
         }
 
         // Just update the content id of the item in the list.
-        contentIds.set(contentPosition, contentId);
+        mContentIds.set(contentPosition, contentId);
     }
 
     public void removeContentId(int contentPosition) {
-        if (contentPosition >= contentIds.size()) {
+        if (contentPosition >= mContentIds.size()) {
             return;
         }
 
-        contentIds.remove(contentPosition);
+        mContentIds.remove(contentPosition);
     }
 
     @VisibleForTesting
     /*@Nullable*/
     String getContentItAtPosition(int position) {
-        if (position >= contentIds.size() || position < 0) {
+        if (position >= mContentIds.size() || position < 0) {
             return null;
         }
 
-        return contentIds.get(position);
+        return mContentIds.get(position);
     }
 
     public void reset() {
-        contentIds.clear();
+        mContentIds.clear();
     }
 
     @Override
     /*@Nullable*/
     public String getChildViewDepth() {
-        if (contentIds.isEmpty()) {
+        if (mContentIds.isEmpty()) {
             return null;
         }
 
-        int i = contentIds.size() - 1;
-        while (contentIds.get(i) == null && i > 0) {
+        int i = mContentIds.size() - 1;
+        while (mContentIds.get(i) == null && i > 0) {
             i--;
         }
 
-        return contentIds.get(i);
+        return mContentIds.get(i);
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/sharedstream/logging/OneShotVisibilityLoggingListener.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/sharedstream/logging/OneShotVisibilityLoggingListener.java
index ad676b8..259982a 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/sharedstream/logging/OneShotVisibilityLoggingListener.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/sharedstream/logging/OneShotVisibilityLoggingListener.java
@@ -6,35 +6,35 @@
 
 /** Implementation of a {@link LoggingListener} that only notifies a listener of the first view. */
 public class OneShotVisibilityLoggingListener implements LoggingListener {
-    private final LoggingListener loggingListener;
-    protected boolean viewLogged;
+    private final LoggingListener mLoggingListener;
+    protected boolean mViewLogged;
 
     public OneShotVisibilityLoggingListener(LoggingListener loggingListener) {
-        this.loggingListener = loggingListener;
+        this.mLoggingListener = loggingListener;
     }
 
     @Override
     public void onViewVisible() {
-        if (viewLogged) {
+        if (mViewLogged) {
             return;
         }
 
-        loggingListener.onViewVisible();
-        viewLogged = true;
+        mLoggingListener.onViewVisible();
+        mViewLogged = true;
     }
 
     @Override
     public void onContentClicked() {
-        loggingListener.onContentClicked();
+        mLoggingListener.onContentClicked();
     }
 
     @Override
     public void onContentSwiped() {
-        loggingListener.onContentSwiped();
+        mLoggingListener.onContentSwiped();
     }
 
     @Override
     public void onScrollStateChanged(int newScrollState) {
-        loggingListener.onScrollStateChanged(newScrollState);
+        mLoggingListener.onScrollStateChanged(newScrollState);
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/sharedstream/logging/SpinnerLogger.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/sharedstream/logging/SpinnerLogger.java
index 7dd9eea..521c55e 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/sharedstream/logging/SpinnerLogger.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/sharedstream/logging/SpinnerLogger.java
@@ -15,16 +15,16 @@
 public class SpinnerLogger {
     private static final String TAG = "SpinnerLogger";
     private static final int SPINNER_INACTIVE = -1;
-    private final BasicLoggingApi basicLoggingApi;
-    private final Clock clock;
+    private final BasicLoggingApi mBasicLoggingApi;
+    private final Clock mClock;
 
-    private long spinnerStartTime = SPINNER_INACTIVE;
+    private long mSpinnerStartTime = SPINNER_INACTIVE;
     @SpinnerType
-    private int spinnerType;
+    private int mSpinnerType;
 
     public SpinnerLogger(BasicLoggingApi basicLoggingApi, Clock clock) {
-        this.basicLoggingApi = basicLoggingApi;
-        this.clock = clock;
+        this.mBasicLoggingApi = basicLoggingApi;
+        this.mClock = clock;
     }
 
     public void spinnerStarted(@SpinnerType int spinnerType) {
@@ -35,9 +35,9 @@
             return;
         }
 
-        basicLoggingApi.onSpinnerStarted(spinnerType);
-        spinnerStartTime = clock.currentTimeMillis();
-        this.spinnerType = spinnerType;
+        mBasicLoggingApi.onSpinnerStarted(spinnerType);
+        mSpinnerStartTime = mClock.currentTimeMillis();
+        this.mSpinnerType = spinnerType;
     }
 
     public void spinnerFinished() {
@@ -46,9 +46,9 @@
             return;
         }
 
-        long spinnerDuration = clock.currentTimeMillis() - spinnerStartTime;
-        basicLoggingApi.onSpinnerFinished((int) spinnerDuration, spinnerType);
-        spinnerStartTime = SPINNER_INACTIVE;
+        long spinnerDuration = mClock.currentTimeMillis() - mSpinnerStartTime;
+        mBasicLoggingApi.onSpinnerFinished((int) spinnerDuration, mSpinnerType);
+        mSpinnerStartTime = SPINNER_INACTIVE;
     }
 
     public void spinnerDestroyedWithoutCompleting() {
@@ -59,18 +59,18 @@
             return;
         }
 
-        long spinnerDuration = clock.currentTimeMillis() - spinnerStartTime;
-        basicLoggingApi.onSpinnerDestroyedWithoutCompleting((int) spinnerDuration, spinnerType);
-        spinnerStartTime = SPINNER_INACTIVE;
+        long spinnerDuration = mClock.currentTimeMillis() - mSpinnerStartTime;
+        mBasicLoggingApi.onSpinnerDestroyedWithoutCompleting((int) spinnerDuration, mSpinnerType);
+        mSpinnerStartTime = SPINNER_INACTIVE;
     }
 
     @VisibleForTesting
     @SpinnerType
     public int getSpinnerType() {
-        return spinnerType;
+        return mSpinnerType;
     }
 
     public boolean isSpinnerActive() {
-        return spinnerStartTime != SPINNER_INACTIVE;
+        return mSpinnerStartTime != SPINNER_INACTIVE;
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/sharedstream/logging/StreamContentLoggingData.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/sharedstream/logging/StreamContentLoggingData.java
index 545df664..1c31ae5 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/sharedstream/logging/StreamContentLoggingData.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/sharedstream/logging/StreamContentLoggingData.java
@@ -13,12 +13,12 @@
 
 /** Implementation of {@link ContentLoggingData} to capture content data when logging events. */
 public class StreamContentLoggingData implements ContentLoggingData {
-    private final int positionInStream;
-    private final long publishedTimeSeconds;
-    private final long timeContentBecameAvailable;
-    private final float score;
-    private final String representationUri;
-    private final boolean isAvailableOffline;
+    private final int mPositionInStream;
+    private final long mPublishedTimeSeconds;
+    private final long mTimeContentBecameAvailable;
+    private final float mScore;
+    private final String mRepresentationUri;
+    private final boolean mIsAvailableOffline;
 
     public StreamContentLoggingData(int positionInStream, BasicLoggingMetadata basicLoggingMetadata,
             RepresentationData representationData, boolean availableOffline) {
@@ -32,48 +32,48 @@
     private StreamContentLoggingData(int positionInStream, long publishedTimeSeconds,
             long timeContentBecameAvailable, float score, String representationUri,
             boolean isAvailableOffline) {
-        this.positionInStream = positionInStream;
-        this.publishedTimeSeconds = publishedTimeSeconds;
-        this.timeContentBecameAvailable = timeContentBecameAvailable;
-        this.score = score;
-        this.representationUri = representationUri;
-        this.isAvailableOffline = isAvailableOffline;
+        this.mPositionInStream = positionInStream;
+        this.mPublishedTimeSeconds = publishedTimeSeconds;
+        this.mTimeContentBecameAvailable = timeContentBecameAvailable;
+        this.mScore = score;
+        this.mRepresentationUri = representationUri;
+        this.mIsAvailableOffline = isAvailableOffline;
     }
 
     @Override
     public int getPositionInStream() {
-        return positionInStream;
+        return mPositionInStream;
     }
 
     @Override
     public long getPublishedTimeSeconds() {
-        return publishedTimeSeconds;
+        return mPublishedTimeSeconds;
     }
 
     @Override
     public long getTimeContentBecameAvailable() {
-        return timeContentBecameAvailable;
+        return mTimeContentBecameAvailable;
     }
 
     @Override
     public float getScore() {
-        return score;
+        return mScore;
     }
 
     @Override
     public String getRepresentationUri() {
-        return representationUri;
+        return mRepresentationUri;
     }
 
     @Override
     public boolean isAvailableOffline() {
-        return isAvailableOffline;
+        return mIsAvailableOffline;
     }
 
     @Override
     public int hashCode() {
-        return Objects.hash(positionInStream, publishedTimeSeconds, timeContentBecameAvailable,
-                score, representationUri, isAvailableOffline);
+        return Objects.hash(mPositionInStream, mPublishedTimeSeconds, mTimeContentBecameAvailable,
+                mScore, mRepresentationUri, mIsAvailableOffline);
     }
 
     @Override
@@ -87,32 +87,32 @@
 
         StreamContentLoggingData that = (StreamContentLoggingData) o;
 
-        if (positionInStream != that.positionInStream) {
+        if (mPositionInStream != that.mPositionInStream) {
             return false;
         }
-        if (publishedTimeSeconds != that.publishedTimeSeconds) {
+        if (mPublishedTimeSeconds != that.mPublishedTimeSeconds) {
             return false;
         }
-        if (timeContentBecameAvailable != that.timeContentBecameAvailable) {
+        if (mTimeContentBecameAvailable != that.mTimeContentBecameAvailable) {
             return false;
         }
-        if (Float.compare(that.score, score) != 0) {
+        if (Float.compare(that.mScore, mScore) != 0) {
             return false;
         }
-        if (isAvailableOffline != that.isAvailableOffline) {
+        if (mIsAvailableOffline != that.mIsAvailableOffline) {
             return false;
         }
 
-        return Objects.equals(representationUri, that.representationUri);
+        return Objects.equals(mRepresentationUri, that.mRepresentationUri);
     }
 
     @Override
     public String toString() {
         return "StreamContentLoggingData{"
-                + "positionInStream=" + positionInStream
-                + ", publishedTimeSeconds=" + publishedTimeSeconds
-                + ", timeContentBecameAvailable=" + timeContentBecameAvailable + ", score=" + score
-                + ", representationUri='" + representationUri + '\'' + '}';
+                + "positionInStream=" + mPositionInStream
+                + ", publishedTimeSeconds=" + mPublishedTimeSeconds
+                + ", timeContentBecameAvailable=" + mTimeContentBecameAvailable
+                + ", score=" + mScore + ", representationUri='" + mRepresentationUri + '\'' + '}';
     }
 
     /**
@@ -122,11 +122,11 @@
      * <p>Will not create a new instance if unneeded.
      */
     public StreamContentLoggingData createWithOfflineStatus(boolean offlineStatus) {
-        if (offlineStatus == this.isAvailableOffline) {
+        if (offlineStatus == this.mIsAvailableOffline) {
             return this;
         }
 
-        return new StreamContentLoggingData(positionInStream, publishedTimeSeconds,
-                timeContentBecameAvailable, score, representationUri, offlineStatus);
+        return new StreamContentLoggingData(mPositionInStream, mPublishedTimeSeconds,
+                mTimeContentBecameAvailable, mScore, mRepresentationUri, offlineStatus);
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/sharedstream/logging/UiSessionRequestLogger.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/sharedstream/logging/UiSessionRequestLogger.java
index 045fec0d..087df1d5 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/sharedstream/logging/UiSessionRequestLogger.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/sharedstream/logging/UiSessionRequestLogger.java
@@ -16,109 +16,109 @@
 /** Logs the initial event after sessions have been requested by the UI. */
 public class UiSessionRequestLogger implements ModelProviderObserver {
     private static final String TAG = "UiSessionRequestLogger";
-    private final Clock clock;
-    private final BasicLoggingApi basicLoggingApi;
-    private int sessionCount;
-    /*@Nullable*/ private SessionRequestState sessionRequestState;
+    private final Clock mClock;
+    private final BasicLoggingApi mBasicLoggingApi;
+    private int mSessionCount;
+    /*@Nullable*/ private SessionRequestState mSessionRequestState;
 
     public UiSessionRequestLogger(Clock clock, BasicLoggingApi basicLoggingApi) {
-        this.clock = clock;
-        this.basicLoggingApi = basicLoggingApi;
+        this.mClock = clock;
+        this.mBasicLoggingApi = basicLoggingApi;
     }
 
     /** Should be called whenever the UI requests a new session from the {@link ModelProvider}. */
     public void onSessionRequested(ModelProvider modelProvider) {
-        if (sessionRequestState != null) {
-            sessionRequestState.modelProvider.unregisterObserver(this);
+        if (mSessionRequestState != null) {
+            mSessionRequestState.mModelProvider.unregisterObserver(this);
         }
 
-        this.sessionRequestState = new SessionRequestState(modelProvider, clock);
+        this.mSessionRequestState = new SessionRequestState(modelProvider, mClock);
         modelProvider.registerObserver(this);
     }
 
     @Override
     public void onSessionStart(UiContext uiContext) {
-        if (sessionRequestState == null) {
+        if (mSessionRequestState == null) {
             Logger.wtf(TAG, "onSessionStart() called without SessionRequestState.");
             return;
         }
 
-        SessionRequestState localSessionRequestState = sessionRequestState;
+        SessionRequestState localSessionRequestState = mSessionRequestState;
 
-        basicLoggingApi.onInitialSessionEvent(
-                SessionEvent.STARTED, localSessionRequestState.getElapsedTime(), ++sessionCount);
+        mBasicLoggingApi.onInitialSessionEvent(
+                SessionEvent.STARTED, localSessionRequestState.getElapsedTime(), ++mSessionCount);
 
         localSessionRequestState.getModelProvider().unregisterObserver(this);
-        sessionRequestState = null;
+        mSessionRequestState = null;
     }
 
     @Override
     public void onSessionFinished(UiContext uiContext) {
-        if (sessionRequestState == null) {
+        if (mSessionRequestState == null) {
             Logger.wtf(TAG, "onSessionFinished() called without SessionRequestState.");
             return;
         }
 
-        SessionRequestState localSessionRequestState = sessionRequestState;
+        SessionRequestState localSessionRequestState = mSessionRequestState;
 
-        basicLoggingApi.onInitialSessionEvent(SessionEvent.FINISHED_IMMEDIATELY,
-                localSessionRequestState.getElapsedTime(), ++sessionCount);
+        mBasicLoggingApi.onInitialSessionEvent(SessionEvent.FINISHED_IMMEDIATELY,
+                localSessionRequestState.getElapsedTime(), ++mSessionCount);
 
         localSessionRequestState.getModelProvider().unregisterObserver(this);
-        sessionRequestState = null;
+        mSessionRequestState = null;
     }
 
     @Override
     public void onError(ModelError modelError) {
-        if (sessionRequestState == null) {
+        if (mSessionRequestState == null) {
             Logger.wtf(TAG, "onError() called without SessionRequestState.");
             return;
         }
 
-        SessionRequestState localSessionRequestState = sessionRequestState;
+        SessionRequestState localSessionRequestState = mSessionRequestState;
 
-        basicLoggingApi.onInitialSessionEvent(
-                SessionEvent.ERROR, localSessionRequestState.getElapsedTime(), ++sessionCount);
+        mBasicLoggingApi.onInitialSessionEvent(
+                SessionEvent.ERROR, localSessionRequestState.getElapsedTime(), ++mSessionCount);
 
         localSessionRequestState.getModelProvider().unregisterObserver(this);
-        sessionRequestState = null;
+        mSessionRequestState = null;
     }
 
     /** Should be called whenever the UI is destroyed, and will log the event if necessary. */
     public void onDestroy() {
-        if (sessionRequestState == null) {
+        if (mSessionRequestState == null) {
             // We don't wtf here as to allow onDestroy() to be called regardless of the internal
             // state.
             return;
         }
 
-        SessionRequestState localSessionRequestState = sessionRequestState;
+        SessionRequestState localSessionRequestState = mSessionRequestState;
 
-        basicLoggingApi.onInitialSessionEvent(SessionEvent.USER_ABANDONED,
-                localSessionRequestState.getElapsedTime(), ++sessionCount);
+        mBasicLoggingApi.onInitialSessionEvent(SessionEvent.USER_ABANDONED,
+                localSessionRequestState.getElapsedTime(), ++mSessionCount);
 
         localSessionRequestState.getModelProvider().unregisterObserver(this);
-        sessionRequestState = null;
+        mSessionRequestState = null;
     }
 
     /** Encapsulates the state of whether a session has been requested and when it was requested. */
     private static class SessionRequestState {
-        private final long sessionRequestTime;
-        private final ModelProvider modelProvider;
-        private final Clock clock;
+        private final long mSessionRequestTime;
+        private final ModelProvider mModelProvider;
+        private final Clock mClock;
 
         private SessionRequestState(ModelProvider modelProvider, Clock clock) {
-            this.sessionRequestTime = clock.elapsedRealtime();
-            this.modelProvider = modelProvider;
-            this.clock = clock;
+            this.mSessionRequestTime = clock.elapsedRealtime();
+            this.mModelProvider = modelProvider;
+            this.mClock = clock;
         }
 
         int getElapsedTime() {
-            return (int) (clock.elapsedRealtime() - sessionRequestTime);
+            return (int) (mClock.elapsedRealtime() - mSessionRequestTime);
         }
 
         ModelProvider getModelProvider() {
-            return modelProvider;
+            return mModelProvider;
         }
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/sharedstream/logging/VisibilityMonitor.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/sharedstream/logging/VisibilityMonitor.java
index f1c871f..5a7af92 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/sharedstream/logging/VisibilityMonitor.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/sharedstream/logging/VisibilityMonitor.java
@@ -19,37 +19,38 @@
     public static final double DEFAULT_VIEW_LOG_THRESHOLD = .66;
     private static final String TAG = "VisibilityMonitor";
 
-    private final View view;
-    private final double viewLogThreshold;
-    private boolean visible;
-    /*@Nullable*/ private VisibilityListener visibilityListener;
+    private final View mView;
+    private final double mViewLogThreshold;
+    private boolean mVisible;
+    /*@Nullable*/ private VisibilityListener mVisibilityListener;
 
     public VisibilityMonitor(View view, Configuration configuration) {
-        this.view = view;
-        this.viewLogThreshold = configuration.getValueOrDefault(
+        this.mView = view;
+        this.mViewLogThreshold = configuration.getValueOrDefault(
                 ConfigKey.VIEW_LOG_THRESHOLD, DEFAULT_VIEW_LOG_THRESHOLD);
     }
 
     public VisibilityMonitor(View view, double viewLogThreshold) {
-        this.view = view;
-        this.viewLogThreshold = viewLogThreshold;
+        this.mView = view;
+        this.mViewLogThreshold = viewLogThreshold;
     }
 
     @Override
     public boolean onPreDraw() {
-        ViewParent parent = view.getParent();
+        ViewParent parent = mView.getParent();
         if (parent != null) {
-            Rect rect = new Rect(0, 0, view.getWidth(), view.getHeight());
+            Rect rect = new Rect(0, 0, mView.getWidth(), mView.getHeight());
 
             @SuppressWarnings("argument.type.incompatible")
-            boolean childVisibleRectNotEmpty = parent.getChildVisibleRect(view, rect, null);
-            if (childVisibleRectNotEmpty && rect.height() >= viewLogThreshold * view.getHeight()) {
-                if (!visible) {
+            boolean childVisibleRectNotEmpty = parent.getChildVisibleRect(mView, rect, null);
+            if (childVisibleRectNotEmpty
+                    && rect.height() >= mViewLogThreshold * mView.getHeight()) {
+                if (!mVisible) {
                     notifyListenerOnVisible();
-                    visible = true;
+                    mVisible = true;
                 }
             } else {
-                visible = false;
+                mVisible = false;
             }
         }
         return true;
@@ -57,13 +58,13 @@
 
     @Override
     public void onViewAttachedToWindow(View v) {
-        view.getViewTreeObserver().addOnPreDrawListener(this);
+        mView.getViewTreeObserver().addOnPreDrawListener(this);
     }
 
     @Override
     public void onViewDetachedFromWindow(View v) {
-        visible = false;
-        view.getViewTreeObserver().removeOnPreDrawListener(this);
+        mVisible = false;
+        mView.getViewTreeObserver().removeOnPreDrawListener(this);
     }
 
     public void setListener(/*@Nullable*/ VisibilityListener visibilityListener) {
@@ -71,7 +72,7 @@
             detach();
         }
 
-        this.visibilityListener = visibilityListener;
+        this.mVisibilityListener = visibilityListener;
 
         if (visibilityListener != null) {
             attach();
@@ -79,22 +80,22 @@
     }
 
     private void attach() {
-        view.addOnAttachStateChangeListener(this);
-        if (ViewCompat.isAttachedToWindow(view)) {
-            view.getViewTreeObserver().addOnPreDrawListener(this);
+        mView.addOnAttachStateChangeListener(this);
+        if (ViewCompat.isAttachedToWindow(mView)) {
+            mView.getViewTreeObserver().addOnPreDrawListener(this);
         }
     }
 
     private void detach() {
-        view.removeOnAttachStateChangeListener(this);
-        if (ViewCompat.isAttachedToWindow(view)) {
-            view.getViewTreeObserver().removeOnPreDrawListener(this);
+        mView.removeOnAttachStateChangeListener(this);
+        if (ViewCompat.isAttachedToWindow(mView)) {
+            mView.getViewTreeObserver().removeOnPreDrawListener(this);
         }
     }
 
     private void notifyListenerOnVisible() {
-        if (visibilityListener != null) {
-            visibilityListener.onViewVisible();
+        if (mVisibilityListener != null) {
+            mVisibilityListener.onViewVisible();
         }
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/sharedstream/offlinemonitor/StreamOfflineMonitor.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/sharedstream/offlinemonitor/StreamOfflineMonitor.java
index 116499f..66f99771 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/sharedstream/offlinemonitor/StreamOfflineMonitor.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/sharedstream/offlinemonitor/StreamOfflineMonitor.java
@@ -22,18 +22,18 @@
 public class StreamOfflineMonitor implements OfflineStatusListener {
     private static final String TAG = "StreamOfflineMonitor";
 
-    private final Set<String> contentToRequestStatus = new HashSet<>();
-    private final Set<String> offlineContent = new HashSet<>();
-    private final OfflineIndicatorApi offlineIndicatorApi;
+    private final Set<String> mContentToRequestStatus = new HashSet<>();
+    private final Set<String> mOfflineContent = new HashSet<>();
+    private final OfflineIndicatorApi mOfflineIndicatorApi;
 
     @VisibleForTesting
-    protected final Map<String, List<Consumer<Boolean>>> offlineStatusConsumersMap =
+    protected final Map<String, List<Consumer<Boolean>>> mOfflineStatusConsumersMap =
             new HashMap<>();
 
     @SuppressWarnings("nullness:argument.type.incompatible")
     public StreamOfflineMonitor(OfflineIndicatorApi offlineIndicatorApi) {
         offlineIndicatorApi.addOfflineStatusListener(this);
-        this.offlineIndicatorApi = offlineIndicatorApi;
+        this.mOfflineIndicatorApi = offlineIndicatorApi;
     }
 
     /**
@@ -45,10 +45,10 @@
      * additional offline stories. At that point, any relevant listeners will be notified.
      */
     public boolean isAvailableOffline(String url) {
-        if (offlineContent.contains(url)) {
+        if (mOfflineContent.contains(url)) {
             return true;
         }
-        contentToRequestStatus.add(url);
+        mContentToRequestStatus.add(url);
         return false;
     }
 
@@ -57,13 +57,13 @@
      * Only triggered on change, not immediately upon registering.
      */
     public void addOfflineStatusConsumer(String url, Consumer<Boolean> isOfflineConsumer) {
-        if (!offlineStatusConsumersMap.containsKey(url)) {
+        if (!mOfflineStatusConsumersMap.containsKey(url)) {
             // Initializing size of lists to 1 as it is unlikely that we would have more than one
             // listener per URL.
-            offlineStatusConsumersMap.put(url, new ArrayList<>(1));
+            mOfflineStatusConsumersMap.put(url, new ArrayList<>(1));
         }
 
-        offlineStatusConsumersMap.get(url).add(isOfflineConsumer);
+        mOfflineStatusConsumersMap.get(url).add(isOfflineConsumer);
     }
 
     /**
@@ -71,22 +71,22 @@
      * story.
      */
     public void removeOfflineStatusConsumer(String url, Consumer<Boolean> isOfflineConsumer) {
-        if (!offlineStatusConsumersMap.containsKey(url)) {
+        if (!mOfflineStatusConsumersMap.containsKey(url)) {
             Logger.w(TAG, "Removing consumer for url %s with no list of consumers", url);
             return;
         }
 
-        if (!offlineStatusConsumersMap.get(url).remove(isOfflineConsumer)) {
+        if (!mOfflineStatusConsumersMap.get(url).remove(isOfflineConsumer)) {
             Logger.w(TAG, "Removing consumer for url %s that isn't on list of consumers", url);
         }
 
-        if (offlineStatusConsumersMap.get(url).isEmpty()) {
-            offlineStatusConsumersMap.remove(url);
+        if (mOfflineStatusConsumersMap.get(url).isEmpty()) {
+            mOfflineStatusConsumersMap.remove(url);
         }
     }
 
     private void notifyConsumers(String url, boolean availableOffline) {
-        List<Consumer<Boolean>> offlineStatusConsumers = offlineStatusConsumersMap.get(url);
+        List<Consumer<Boolean>> offlineStatusConsumers = mOfflineStatusConsumersMap.get(url);
         if (offlineStatusConsumers == null) {
             return;
         }
@@ -97,37 +97,37 @@
     }
 
     public void requestOfflineStatusForNewContent() {
-        if (contentToRequestStatus.isEmpty()) {
+        if (mContentToRequestStatus.isEmpty()) {
             return;
         }
 
-        offlineIndicatorApi.getOfflineStatus(
-                new ArrayList<>(contentToRequestStatus), offlineUrls -> {
+        mOfflineIndicatorApi.getOfflineStatus(
+                new ArrayList<>(mContentToRequestStatus), offlineUrls -> {
                     for (String offlineUrl : offlineUrls) {
                         updateOfflineStatus(offlineUrl, true);
                     }
                 });
-        contentToRequestStatus.clear();
+        mContentToRequestStatus.clear();
     }
 
     @Override
     public void updateOfflineStatus(String url, boolean availableOffline) {
         // If the new offline status is the same as our knowledge of it, no-op.
-        if (offlineContent.contains(url) == availableOffline) {
+        if (mOfflineContent.contains(url) == availableOffline) {
             return;
         }
 
         if (availableOffline) {
-            offlineContent.add(url);
+            mOfflineContent.add(url);
         } else {
-            offlineContent.remove(url);
+            mOfflineContent.remove(url);
         }
 
         notifyConsumers(url, availableOffline);
     }
 
     public void onDestroy() {
-        offlineStatusConsumersMap.clear();
-        offlineIndicatorApi.removeOfflineStatusListener(this);
+        mOfflineStatusConsumersMap.clear();
+        mOfflineIndicatorApi.removeOfflineStatusListener(this);
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/sharedstream/piet/PietCustomElementProvider.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/sharedstream/piet/PietCustomElementProvider.java
index 495537d3..d417dde0 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/sharedstream/piet/PietCustomElementProvider.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/sharedstream/piet/PietCustomElementProvider.java
@@ -18,31 +18,31 @@
 public class PietCustomElementProvider implements CustomElementProvider {
     private static final String TAG = "PietCustomElementPro";
 
-    private final Context context;
-    /*@Nullable*/ private final CustomElementProvider hostCustomElementProvider;
+    private final Context mContext;
+    /*@Nullable*/ private final CustomElementProvider mHostCustomElementProvider;
 
     public PietCustomElementProvider(
             Context context, /*@Nullable*/ CustomElementProvider hostCustomElementProvider) {
-        this.context = context;
-        this.hostCustomElementProvider = hostCustomElementProvider;
+        this.mContext = context;
+        this.mHostCustomElementProvider = hostCustomElementProvider;
     }
 
     @Override
     public View createCustomElement(CustomElementData customElementData) {
         // We don't currently implement any custom elements yet.  Delegate to host if there is one.
-        if (hostCustomElementProvider != null) {
-            return hostCustomElementProvider.createCustomElement(customElementData);
+        if (mHostCustomElementProvider != null) {
+            return mHostCustomElementProvider.createCustomElement(customElementData);
         }
 
         // Just return an empty view if there is not host.
         Logger.w(TAG, "Received request for unknown custom element");
-        return new View(context);
+        return new View(mContext);
     }
 
     @Override
     public void releaseCustomView(View customElementView, CustomElementData customElementData) {
-        if (hostCustomElementProvider != null) {
-            hostCustomElementProvider.releaseCustomView(customElementView, customElementData);
+        if (mHostCustomElementProvider != null) {
+            mHostCustomElementProvider.releaseCustomView(customElementView, customElementData);
             return;
         }
 
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/sharedstream/piet/PietEventLogger.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/sharedstream/piet/PietEventLogger.java
index 953001b..1136012 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/sharedstream/piet/PietEventLogger.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/sharedstream/piet/PietEventLogger.java
@@ -12,14 +12,14 @@
 
 /** Logger that logs to the {@link BasicLoggingApi} any Piet errors. */
 public class PietEventLogger {
-    private final BasicLoggingApi basicLoggingApi;
+    private final BasicLoggingApi mBasicLoggingApi;
 
     public PietEventLogger(BasicLoggingApi basicLoggingApi) {
-        this.basicLoggingApi = basicLoggingApi;
+        this.mBasicLoggingApi = basicLoggingApi;
     }
 
     public void logEvents(List<ErrorCode> pietErrors) {
-        basicLoggingApi.onPietFrameRenderingEvent(convertErrorCodes(pietErrors));
+        mBasicLoggingApi.onPietFrameRenderingEvent(convertErrorCodes(pietErrors));
     }
 
     private List<Integer> convertErrorCodes(List<ErrorCode> errorCodes) {
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/sharedstream/piet/PietHostBindingProvider.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/sharedstream/piet/PietHostBindingProvider.java
index 15758d44..89fc893 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/sharedstream/piet/PietHostBindingProvider.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/sharedstream/piet/PietHostBindingProvider.java
@@ -18,14 +18,14 @@
 public class PietHostBindingProvider extends HostBindingProvider {
     private static final String TAG = "PietHostBindingProvider";
 
-    private final StreamOfflineMonitor offlineMonitor;
-    /*@Nullable*/ private final HostBindingProvider hostHostBindingProvider;
+    private final StreamOfflineMonitor mOfflineMonitor;
+    /*@Nullable*/ private final HostBindingProvider mHostBindingProvider;
 
     public PietHostBindingProvider(
             /*@Nullable*/ HostBindingProvider hostHostBindingProvider,
             StreamOfflineMonitor offlineMonitor) {
-        this.hostHostBindingProvider = hostHostBindingProvider;
-        this.offlineMonitor = offlineMonitor;
+        this.mHostBindingProvider = hostHostBindingProvider;
+        this.mOfflineMonitor = offlineMonitor;
     }
 
     @Override
@@ -36,8 +36,8 @@
             return genericBindingResult;
         }
 
-        if (hostHostBindingProvider != null) {
-            return hostHostBindingProvider.getCustomElementDataBindingForValue(bindingValue);
+        if (mHostBindingProvider != null) {
+            return mHostBindingProvider.getCustomElementDataBindingForValue(bindingValue);
         }
         return super.getCustomElementDataBindingForValue(bindingValue);
     }
@@ -50,8 +50,8 @@
             return genericBindingResult;
         }
 
-        if (hostHostBindingProvider != null) {
-            return hostHostBindingProvider.getParameterizedTextBindingForValue(bindingValue);
+        if (mHostBindingProvider != null) {
+            return mHostBindingProvider.getParameterizedTextBindingForValue(bindingValue);
         }
         return super.getParameterizedTextBindingForValue(bindingValue);
     }
@@ -64,8 +64,8 @@
             return genericBindingResult;
         }
 
-        if (hostHostBindingProvider != null) {
-            return hostHostBindingProvider.getChunkedTextBindingForValue(bindingValue);
+        if (mHostBindingProvider != null) {
+            return mHostBindingProvider.getChunkedTextBindingForValue(bindingValue);
         }
         return super.getChunkedTextBindingForValue(bindingValue);
     }
@@ -78,8 +78,8 @@
             return genericBindingResult;
         }
 
-        if (hostHostBindingProvider != null) {
-            return hostHostBindingProvider.getImageBindingForValue(bindingValue);
+        if (mHostBindingProvider != null) {
+            return mHostBindingProvider.getImageBindingForValue(bindingValue);
         }
         return super.getImageBindingForValue(bindingValue);
     }
@@ -92,8 +92,8 @@
             return genericBindingResult;
         }
 
-        if (hostHostBindingProvider != null) {
-            return hostHostBindingProvider.getActionsBindingForValue(bindingValue);
+        if (mHostBindingProvider != null) {
+            return mHostBindingProvider.getActionsBindingForValue(bindingValue);
         }
         return super.getActionsBindingForValue(bindingValue);
     }
@@ -106,8 +106,8 @@
             return genericBindingResult;
         }
 
-        if (hostHostBindingProvider != null) {
-            return hostHostBindingProvider.getGridCellWidthBindingForValue(bindingValue);
+        if (mHostBindingProvider != null) {
+            return mHostBindingProvider.getGridCellWidthBindingForValue(bindingValue);
         }
         return super.getGridCellWidthBindingForValue(bindingValue);
     }
@@ -120,8 +120,8 @@
             return genericBindingResult;
         }
 
-        if (hostHostBindingProvider != null) {
-            return hostHostBindingProvider.getLogDataBindingForValue(bindingValue);
+        if (mHostBindingProvider != null) {
+            return mHostBindingProvider.getLogDataBindingForValue(bindingValue);
         }
         return super.getLogDataBindingForValue(bindingValue);
     }
@@ -134,8 +134,8 @@
             return genericBindingResult;
         }
 
-        if (hostHostBindingProvider != null) {
-            return hostHostBindingProvider.getTemplateBindingForValue(bindingValue);
+        if (mHostBindingProvider != null) {
+            return mHostBindingProvider.getTemplateBindingForValue(bindingValue);
         }
         return super.getTemplateBindingForValue(bindingValue);
     }
@@ -148,8 +148,8 @@
             return genericBindingResult;
         }
 
-        if (hostHostBindingProvider != null) {
-            return hostHostBindingProvider.getStyleBindingForValue(bindingValue);
+        if (mHostBindingProvider != null) {
+            return mHostBindingProvider.getStyleBindingForValue(bindingValue);
         }
         return super.getStyleBindingForValue(bindingValue);
     }
@@ -162,8 +162,8 @@
             return genericBindingResult;
         }
 
-        if (hostHostBindingProvider != null) {
-            return hostHostBindingProvider.getVisibilityBindingForValue(bindingValue);
+        if (mHostBindingProvider != null) {
+            return mHostBindingProvider.getVisibilityBindingForValue(bindingValue);
         }
 
         return super.getVisibilityBindingForValue(bindingValue);
@@ -195,7 +195,7 @@
             return null;
         }
 
-        return offlineMonitor.isAvailableOffline(offlineExtension.getUrl())
+        return mOfflineMonitor.isAvailableOffline(offlineExtension.getUrl())
                 ? offlineExtension.getOfflineBinding()
                 : offlineExtension.getNotOfflineBinding();
     }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/sharedstream/piet/PietImageLoader.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/sharedstream/piet/PietImageLoader.java
index bb56ccf..b5b5fd1 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/sharedstream/piet/PietImageLoader.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/sharedstream/piet/PietImageLoader.java
@@ -19,11 +19,11 @@
 
 /** A Piet {@link ImageLoader} which uses {@link ImageLoaderApi} to load images. */
 public class PietImageLoader implements ImageLoader {
-    private final ImageLoaderApi imageLoaderApi;
+    private final ImageLoaderApi mImageLoaderApi;
 
     @Inject
     public PietImageLoader(ImageLoaderApi imageLoaderApi) {
-        this.imageLoaderApi = imageLoaderApi;
+        this.mImageLoaderApi = imageLoaderApi;
     }
 
     @Override
@@ -34,6 +34,6 @@
             urls.add(source.getUrl());
         }
 
-        imageLoaderApi.loadDrawable(urls, widthPx, heightPx, consumer);
+        mImageLoaderApi.loadDrawable(urls, widthPx, heightPx, consumer);
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/sharedstream/piet/PietStringFormatter.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/sharedstream/piet/PietStringFormatter.java
index 27bd739..9606d8e3 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/sharedstream/piet/PietStringFormatter.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/sharedstream/piet/PietStringFormatter.java
@@ -13,18 +13,18 @@
 
 /** Formats strings for Piet. */
 public class PietStringFormatter implements StringFormatter {
-    private final Clock clock;
+    private final Clock mClock;
 
     @Inject
     public PietStringFormatter(Clock clock) {
-        this.clock = clock;
+        this.mClock = clock;
     }
 
     @Override
     public String getRelativeElapsedString(long elapsedTimeMillis) {
         return DateUtils
-                .getRelativeTimeSpanString(clock.currentTimeMillis() - elapsedTimeMillis,
-                        clock.currentTimeMillis(), DateUtils.MINUTE_IN_MILLIS)
+                .getRelativeTimeSpanString(mClock.currentTimeMillis() - elapsedTimeMillis,
+                        mClock.currentTimeMillis(), DateUtils.MINUTE_IN_MILLIS)
                 .toString();
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/sharedstream/publicapi/menumeasurer/MenuMeasurer.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/sharedstream/publicapi/menumeasurer/MenuMeasurer.java
index 516891a..11d10c8 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/sharedstream/publicapi/menumeasurer/MenuMeasurer.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/sharedstream/publicapi/menumeasurer/MenuMeasurer.java
@@ -21,10 +21,10 @@
     public static final int NO_MAX_WIDTH = Integer.MAX_VALUE;
     private static final String TAG = "MenuMeasurer";
 
-    private final Context context;
+    private final Context mContext;
 
     public MenuMeasurer(Context context) {
-        this.context = context;
+        this.mContext = context;
     }
 
     // TODO: Test measureAdapterContent fully instead of just calculateSize.
@@ -59,7 +59,7 @@
             }
         }
 
-        int widthUnit = context.getResources().getDimensionPixelSize(R.dimen.menu_width_multiple);
+        int widthUnit = mContext.getResources().getDimensionPixelSize(R.dimen.menu_width_multiple);
 
         int width = Math.min(roundLargestPopupContentWidth(largestWidth, widthUnit),
                 maxWidth - windowPadding - windowPadding);
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/sharedstream/publicapi/menumeasurer/Size.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/sharedstream/publicapi/menumeasurer/Size.java
index 9f6440d..27f3cfe 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/sharedstream/publicapi/menumeasurer/Size.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/sharedstream/publicapi/menumeasurer/Size.java
@@ -9,22 +9,22 @@
  * android.util.Size} which is only available in API 21.
  */
 public class Size {
-    private final int width;
-    private final int height;
+    private final int mWidth;
+    private final int mHeight;
 
     public Size(int width, int height) {
-        this.width = width;
-        this.height = height;
+        this.mWidth = width;
+        this.mHeight = height;
     }
 
     /** Gets the width of the size in pixels. */
     public int getWidth() {
-        return width;
+        return mWidth;
     }
 
     /** Gets the height of the size in pixels. */
     public int getHeight() {
-        return height;
+        return mHeight;
     }
 
     @Override
@@ -38,11 +38,11 @@
 
         Size size = (Size) o;
 
-        return width == size.width && height == size.height;
+        return mWidth == size.mWidth && mHeight == size.mHeight;
     }
 
     @Override
     public int hashCode() {
-        return 31 * width + height;
+        return 31 * mWidth + mHeight;
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/sharedstream/removetrackingfactory/StreamRemoveTrackingFactory.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/sharedstream/removetrackingfactory/StreamRemoveTrackingFactory.java
index 9a8ca55..4f2078d9 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/sharedstream/removetrackingfactory/StreamRemoveTrackingFactory.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/sharedstream/removetrackingfactory/StreamRemoveTrackingFactory.java
@@ -13,13 +13,13 @@
 
 /** {@link RemoveTrackingFactory} to notify host of removed content. */
 public class StreamRemoveTrackingFactory implements RemoveTrackingFactory<ContentRemoval> {
-    private final ModelProvider modelProvider;
-    private final FeedKnownContent feedKnownContent;
+    private final ModelProvider mModelProvider;
+    private final FeedKnownContent mFeedKnownContent;
 
     public StreamRemoveTrackingFactory(
             ModelProvider modelProvider, FeedKnownContent feedKnownContent) {
-        this.modelProvider = modelProvider;
-        this.feedKnownContent = feedKnownContent;
+        this.mModelProvider = modelProvider;
+        this.mFeedKnownContent = feedKnownContent;
     }
 
     /*@Nullable*/
@@ -31,7 +31,7 @@
         }
 
         // Only notify host on the StreamScope that requested the dismiss.
-        if (!requestingSessionId.equals(modelProvider.getSessionId())) {
+        if (!requestingSessionId.equals(mModelProvider.getSessionId())) {
             return null;
         }
 
@@ -47,6 +47,7 @@
                             mutationContext.isUserInitiated());
                 },
                 removedContent
-                -> feedKnownContent.getKnownContentHostNotifier().onContentRemoved(removedContent));
+                -> mFeedKnownContent.getKnownContentHostNotifier().onContentRemoved(
+                        removedContent));
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/sharedstream/scroll/PietScrollObserver.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/sharedstream/scroll/PietScrollObserver.java
index 43ec690..cda023a 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/sharedstream/scroll/PietScrollObserver.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/sharedstream/scroll/PietScrollObserver.java
@@ -15,10 +15,10 @@
 
 /** Scroll observer that triggers Piet scroll actions. */
 public class PietScrollObserver implements ScrollObserver {
-    private final FrameAdapter frameAdapter;
-    private final View viewport;
-    private final ScrollObservable scrollObservable;
-    private final FirstDrawTrigger firstDrawTrigger;
+    private final FrameAdapter mFrameAdapter;
+    private final View mViewport;
+    private final ScrollObservable mScrollObservable;
+    private final FirstDrawTrigger mFirstDrawTrigger;
 
     /**
      * Construct a PietScrollObserver.
@@ -34,11 +34,11 @@
     @SuppressWarnings("initialization") // Doesn't like the OnAttachStateChangeListener.
     public PietScrollObserver(
             FrameAdapter frameAdapter, View viewport, ScrollObservable scrollObservable) {
-        this.frameAdapter = frameAdapter;
-        this.viewport = viewport;
-        this.scrollObservable = scrollObservable;
+        this.mFrameAdapter = frameAdapter;
+        this.mViewport = viewport;
+        this.mScrollObservable = scrollObservable;
 
-        firstDrawTrigger = new FirstDrawTrigger();
+        mFirstDrawTrigger = new FirstDrawTrigger();
 
         frameAdapter.getFrameContainer().addOnAttachStateChangeListener(
                 new OnAttachStateChangeListener() {
@@ -63,7 +63,7 @@
         // triggering while the feed is scrolling; not sure how frequently the observer triggers
         // during scroll.
         if (newState == RecyclerView.SCROLL_STATE_IDLE) {
-            frameAdapter.triggerViewActions(viewport);
+            mFrameAdapter.triggerViewActions(mViewport);
         }
     }
 
@@ -74,14 +74,14 @@
 
     /** Install the first-draw triggering observer. */
     public void installFirstDrawTrigger() {
-        frameAdapter.getFrameContainer().getViewTreeObserver().addOnGlobalLayoutListener(
-                firstDrawTrigger);
+        mFrameAdapter.getFrameContainer().getViewTreeObserver().addOnGlobalLayoutListener(
+                mFirstDrawTrigger);
     }
 
     /** Uninstall the first-draw triggering observer. */
     public void uninstallFirstDrawTrigger() {
-        frameAdapter.getFrameContainer().getViewTreeObserver().removeOnGlobalLayoutListener(
-                firstDrawTrigger);
+        mFrameAdapter.getFrameContainer().getViewTreeObserver().removeOnGlobalLayoutListener(
+                mFirstDrawTrigger);
     }
 
     class FirstDrawTrigger implements OnGlobalLayoutListener {
@@ -89,8 +89,8 @@
         public void onGlobalLayout() {
             uninstallFirstDrawTrigger();
 
-            if (scrollObservable.getCurrentScrollState() == RecyclerView.SCROLL_STATE_IDLE) {
-                frameAdapter.triggerViewActions(viewport);
+            if (mScrollObservable.getCurrentScrollState() == RecyclerView.SCROLL_STATE_IDLE) {
+                mFrameAdapter.triggerViewActions(mViewport);
             }
         }
     }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/sharedstream/scroll/ScrollListenerNotifier.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/sharedstream/scroll/ScrollListenerNotifier.java
index de53ba2..71c5ef55 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/sharedstream/scroll/ScrollListenerNotifier.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/sharedstream/scroll/ScrollListenerNotifier.java
@@ -24,28 +24,28 @@
 public class ScrollListenerNotifier implements ScrollObserver {
     private static final String TAG = "StreamScrollMonitor";
 
-    private final MainThreadRunner mainThreadRunner;
-    private final Set<ScrollListener> scrollListeners;
-    private final ContentChangedListener contentChangedListener;
+    private final MainThreadRunner mMainThreadRunner;
+    private final Set<ScrollListener> mScrollListeners;
+    private final ContentChangedListener mContentChangedListener;
 
     // Doesn't like adding itself to the scrollobservable
     @SuppressWarnings("initialization")
     public ScrollListenerNotifier(ContentChangedListener childChangeListener,
             ScrollObservable scrollObservable, MainThreadRunner mainThreadRunner) {
-        this.contentChangedListener = childChangeListener;
-        this.mainThreadRunner = mainThreadRunner;
+        this.mContentChangedListener = childChangeListener;
+        this.mMainThreadRunner = mainThreadRunner;
 
-        scrollListeners = new HashSet<>();
+        mScrollListeners = new HashSet<>();
 
         scrollObservable.addScrollObserver(this);
     }
 
     public void addScrollListener(ScrollListener listener) {
-        scrollListeners.add(listener);
+        mScrollListeners.add(listener);
     }
 
     public void removeScrollListener(ScrollListener listener) {
-        scrollListeners.remove(listener);
+        mScrollListeners.remove(listener);
     }
 
     /**
@@ -53,7 +53,7 @@
      * appropriate deltas.
      */
     public void onProgrammaticScroll(RecyclerView recyclerView) {
-        mainThreadRunner.execute(TAG + " onProgrammaticScroll", () -> {
+        mMainThreadRunner.execute(TAG + " onProgrammaticScroll", () -> {
             // Post scroll as this allows users of scroll to retrieve new heights/widths of change.
             onScroll(recyclerView, "", UNKNOWN_SCROLL_DELTA, UNKNOWN_SCROLL_DELTA);
         });
@@ -77,18 +77,18 @@
     @Override
     public void onScrollStateChanged(View view, String featureId, int newState, long timestamp) {
         if (newState == RecyclerView.SCROLL_STATE_IDLE) {
-            contentChangedListener.onContentChanged();
+            mContentChangedListener.onContentChanged();
         }
 
         int scrollState = convertRecyclerViewScrollStateToListenerState(newState);
-        for (ScrollListener scrollListener : scrollListeners) {
+        for (ScrollListener scrollListener : mScrollListeners) {
             scrollListener.onScrollStateChanged(scrollState);
         }
     }
 
     @Override
     public void onScroll(View view, String featureId, int dx, int dy) {
-        for (ScrollListener scrollListener : scrollListeners) {
+        for (ScrollListener scrollListener : mScrollListeners) {
             scrollListener.onScrolled(dx, dy);
         }
     }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/sharedstream/scroll/ScrollLogger.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/sharedstream/scroll/ScrollLogger.java
index 2f715d7..a16a550 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/sharedstream/scroll/ScrollLogger.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/sharedstream/scroll/ScrollLogger.java
@@ -8,19 +8,19 @@
 
 /** */
 public class ScrollLogger {
-    private final BasicLoggingApi api;
+    private final BasicLoggingApi mApi;
     // We don't want to log scrolls that are tiny since the user probably didn't mean to actually
     // scroll.
     private static final int SCROLL_TOLERANCE = 10;
 
     public ScrollLogger(BasicLoggingApi api) {
-        this.api = api;
+        this.mApi = api;
     }
     /** Handles logging of scrolling. */
     public void handleScroll(@ScrollType int scrollType, int scrollAmount) {
         if (Math.abs(scrollAmount) <= SCROLL_TOLERANCE) {
             return;
         }
-        api.onScroll(scrollType, scrollAmount);
+        mApi.onScroll(scrollType, scrollAmount);
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/sharedstream/scroll/ScrollTracker.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/sharedstream/scroll/ScrollTracker.java
index 3eb17a8b..e230ab5 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/sharedstream/scroll/ScrollTracker.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/sharedstream/scroll/ScrollTracker.java
@@ -16,22 +16,22 @@
     // onScroll events are very noisy, so we collate them together to avoid over-reporting scrolls.
     private static final long SCROLL_EVENT_COLLATE_MILLIS = 200L;
 
-    private final MainThreadRunner mainThreadRunner;
-    private final Clock clock;
+    private final MainThreadRunner mMainThreadRunner;
+    private final Clock mClock;
 
-    /*@Nullable*/ protected ScrollNotifier scrollNotifier;
-    /*@Nullable*/ protected CancelableTask task;
+    /*@Nullable*/ protected ScrollNotifier mScrollNotifier;
+    /*@Nullable*/ protected CancelableTask mTask;
 
     public ScrollTracker(MainThreadRunner mainThreadRunner, Clock clock) {
-        this.mainThreadRunner = mainThreadRunner;
-        this.clock = clock;
+        this.mMainThreadRunner = mainThreadRunner;
+        this.mClock = clock;
     }
 
     public void onUnbind() {
-        ScrollTracker.ScrollNotifier localScrollNotifier = scrollNotifier;
+        ScrollTracker.ScrollNotifier localScrollNotifier = mScrollNotifier;
         if (localScrollNotifier != null) {
-            if (task != null) {
-                task.cancel();
+            if (mTask != null) {
+                mTask.cancel();
             }
             localScrollNotifier.run();
         }
@@ -47,42 +47,43 @@
         amount = dy;
 
         int previousTotalScroll = 0;
-        ScrollNotifier previousScrollNotifier = scrollNotifier;
-        if (previousScrollNotifier != null && !(task != null && task.canceled())) {
-            if (previousScrollNotifier.positiveScroll == positiveScroll) {
+        ScrollNotifier previousScrollNotifier = mScrollNotifier;
+        if (previousScrollNotifier != null && !(mTask != null && mTask.canceled())) {
+            if (previousScrollNotifier.mPositiveScroll == positiveScroll) {
                 // Same direction, so merge the existing scroll with the new one.
-                previousTotalScroll = previousScrollNotifier.scrollAmount;
-                if (task != null) {
-                    task.cancel();
+                previousTotalScroll = previousScrollNotifier.mScrollAmount;
+                if (mTask != null) {
+                    mTask.cancel();
                 }
             }
         }
 
         amount += previousTotalScroll;
-        scrollNotifier = new ScrollNotifier(positiveScroll, amount, clock.currentTimeMillis());
-        task = mainThreadRunner.executeWithDelay(TAG, scrollNotifier, SCROLL_EVENT_COLLATE_MILLIS);
+        mScrollNotifier = new ScrollNotifier(positiveScroll, amount, mClock.currentTimeMillis());
+        mTask = mMainThreadRunner.executeWithDelay(
+                TAG, mScrollNotifier, SCROLL_EVENT_COLLATE_MILLIS);
     }
 
     protected abstract void onScrollEvent(int scrollAmount, long timestamp);
 
     private class ScrollNotifier implements Runnable {
-        final boolean positiveScroll;
-        final int scrollAmount;
-        final long timestamp;
+        final boolean mPositiveScroll;
+        final int mScrollAmount;
+        final long mTimestamp;
 
         public ScrollNotifier(boolean positiveScroll, int scrollAmount, long timestamp) {
-            this.positiveScroll = positiveScroll;
-            this.scrollAmount = scrollAmount;
-            this.timestamp = timestamp;
+            this.mPositiveScroll = positiveScroll;
+            this.mScrollAmount = scrollAmount;
+            this.mTimestamp = timestamp;
         }
 
         @Override
         public void run() {
-            onScrollEvent(scrollAmount, timestamp);
-            if (scrollNotifier == this) {
-                scrollNotifier = null;
-                if (task != null) {
-                    task.cancel();
+            onScrollEvent(mScrollAmount, mTimestamp);
+            if (mScrollNotifier == this) {
+                mScrollNotifier = null;
+                if (mTask != null) {
+                    mTask.cancel();
                 }
             }
         }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/sharedstream/ui/MaterialSpinnerView.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/sharedstream/ui/MaterialSpinnerView.java
index 89453863..bd805df 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/sharedstream/ui/MaterialSpinnerView.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/sharedstream/ui/MaterialSpinnerView.java
@@ -14,7 +14,7 @@
 
 /** View compatible with KitKat that shows a Material themed spinner. */
 public class MaterialSpinnerView extends AppCompatImageView {
-    private final CircularProgressDrawable spinner;
+    private final CircularProgressDrawable mSpinner;
 
     public MaterialSpinnerView(Context context) {
         this(context, null);
@@ -29,16 +29,16 @@
     @SuppressWarnings({"nullness:argument.type.incompatible", "nullness:method.invocation.invalid"})
     public MaterialSpinnerView(Context context, /*@Nullable*/ AttributeSet attrs, int defStyle) {
         super(context, attrs, defStyle);
-        spinner = new CircularProgressDrawable(context);
-        spinner.setStyle(CircularProgressDrawable.DEFAULT);
-        setImageDrawable(spinner);
+        mSpinner = new CircularProgressDrawable(context);
+        mSpinner.setStyle(CircularProgressDrawable.DEFAULT);
+        setImageDrawable(mSpinner);
         TypedValue typedValue = new TypedValue();
         Theme theme = context.getTheme();
         theme.resolveAttribute(R.attr.feedSpinnerColor, typedValue, true);
-        spinner.setColorSchemeColors(typedValue.data);
+        mSpinner.setColorSchemeColors(typedValue.data);
 
         if (getVisibility() == View.VISIBLE) {
-            spinner.start();
+            mSpinner.start();
         }
     }
 
@@ -46,10 +46,10 @@
     public void setVisibility(int visibility) {
         super.setVisibility(visibility);
 
-        if (spinner.isRunning() && getVisibility() != View.VISIBLE) {
-            spinner.stop();
-        } else if (!spinner.isRunning() && getVisibility() == View.VISIBLE) {
-            spinner.start();
+        if (mSpinner.isRunning() && getVisibility() != View.VISIBLE) {
+            mSpinner.stop();
+        } else if (!mSpinner.isRunning() && getVisibility() == View.VISIBLE) {
+            mSpinner.start();
         }
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/actionmanager/FakeActionReader.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/actionmanager/FakeActionReader.java
index 2b0d6a5..41e771b 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/actionmanager/FakeActionReader.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/actionmanager/FakeActionReader.java
@@ -14,18 +14,19 @@
 
 /** Fake implementation of {@link ActionReader}. */
 public final class FakeActionReader implements ActionReader {
-    private final ArrayList<DismissActionWithSemanticProperties> dismissActions = new ArrayList<>();
+    private final ArrayList<DismissActionWithSemanticProperties> mDismissActions =
+            new ArrayList<>();
 
     @Override
     public Result<List<DismissActionWithSemanticProperties>>
     getDismissActionsWithSemanticProperties() {
-        return Result.success(dismissActions);
+        return Result.success(mDismissActions);
     }
 
     /** Adds a dismiss action with semantic properties. */
     public FakeActionReader addDismissActionsWithSemanticProperties(
             DismissActionWithSemanticProperties... dismissActionsToAdd) {
-        Collections.addAll(dismissActions, dismissActionsToAdd);
+        Collections.addAll(mDismissActions, dismissActionsToAdd);
         return this;
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/android/LinearLayoutManagerForTest.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/android/LinearLayoutManagerForTest.java
index 99ec1fe..42db5c55 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/android/LinearLayoutManagerForTest.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/android/LinearLayoutManagerForTest.java
@@ -16,7 +16,7 @@
 
 /** A {@link LinearLayoutManager} used for testing. */
 public final class LinearLayoutManagerForTest extends LinearLayoutManager {
-    private final Map<Integer, View> childMap;
+    private final Map<Integer, View> mChildMap;
 
     public int firstVisibleItemPosition = RecyclerView.NO_POSITION;
     public int firstVisibleViewOffset;
@@ -28,7 +28,7 @@
 
     public LinearLayoutManagerForTest(Context context) {
         super(context);
-        this.childMap = new HashMap<>();
+        this.mChildMap = new HashMap<>();
     }
 
     @Override
@@ -43,8 +43,8 @@
 
     @Override
     public View findViewByPosition(int position) {
-        if (childMap.containsKey(position)) {
-            return checkNotNull(childMap.get(position),
+        if (mChildMap.containsKey(position)) {
+            return checkNotNull(mChildMap.get(position),
                     "addChildToPosition(int position, View child) should be called prior to "
                             + "findViewByPosition(int position).");
         }
@@ -58,6 +58,6 @@
     }
 
     public void addChildToPosition(int position, View child) {
-        childMap.put(position, child);
+        mChildMap.put(position, child);
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/conformance/network/NetworkClientConformanceTest.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/conformance/network/NetworkClientConformanceTest.java
index 9d804cb..3a525a7 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/conformance/network/NetworkClientConformanceTest.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/conformance/network/NetworkClientConformanceTest.java
@@ -19,7 +19,7 @@
 import java.util.Collections;
 
 public abstract class NetworkClientConformanceTest {
-    protected NetworkClient networkClient;
+    protected NetworkClient mNetworkClient;
 
     /** Defines a valid URI for the provided method. */
     protected Uri getValidUri(@HttpMethod String httpMethod) {
@@ -40,7 +40,7 @@
             assertThat(response.getResponseCode()).isNotNull();
         });
 
-        networkClient.send(request, responseConsumer);
+        mNetworkClient.send(request, responseConsumer);
         waitForRequest();
         assertThat(responseConsumer.isCalled()).isTrue();
     }
@@ -56,7 +56,7 @@
             assertThat(response.getResponseCode()).isNotNull();
         });
 
-        networkClient.send(request, responseConsumer);
+        mNetworkClient.send(request, responseConsumer);
         waitForRequest();
         assertThat(responseConsumer.isCalled()).isTrue();
     }
@@ -72,7 +72,7 @@
             assertThat(response.getResponseCode()).isNotNull();
         });
 
-        networkClient.send(request, responseConsumer);
+        mNetworkClient.send(request, responseConsumer);
         waitForRequest();
         assertThat(responseConsumer.isCalled()).isTrue();
     }
@@ -88,7 +88,7 @@
             assertThat(response.getResponseCode()).isNotNull();
         });
 
-        networkClient.send(request, responseConsumer);
+        mNetworkClient.send(request, responseConsumer);
         waitForRequest();
         assertThat(responseConsumer.isCalled()).isTrue();
     }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/conformance/scheduler/SchedulerConformanceTest.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/conformance/scheduler/SchedulerConformanceTest.java
index 3bcb5ee..5f690424 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/conformance/scheduler/SchedulerConformanceTest.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/conformance/scheduler/SchedulerConformanceTest.java
@@ -13,29 +13,29 @@
     private static final int NOT_FOUND = 404;
     private static final int SERVER_ERROR = 500;
 
-    protected SchedulerApi scheduler;
+    protected SchedulerApi mScheduler;
 
     @Test
     public void shouldSessionRequestData() {
         // Should not throw error
-        scheduler.shouldSessionRequestData(new SessionState(false, 0, false));
+        mScheduler.shouldSessionRequestData(new SessionState(false, 0, false));
     }
 
     @Test
     public void onReceiveNewContent() {
         // Should not throw error
-        scheduler.onReceiveNewContent(System.currentTimeMillis());
+        mScheduler.onReceiveNewContent(System.currentTimeMillis());
     }
 
     @Test
     public void onRequestError_notFound() {
         // Should not throw error
-        scheduler.onRequestError(NOT_FOUND);
+        mScheduler.onRequestError(NOT_FOUND);
     }
 
     @Test
     public void onRequestError_serverError() {
         // Should not throw error
-        scheduler.onRequestError(SERVER_ERROR);
+        mScheduler.onRequestError(SERVER_ERROR);
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/conformance/storage/ContentStorageConformanceTest.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/conformance/storage/ContentStorageConformanceTest.java
index 156129b..48c648b1 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/conformance/storage/ContentStorageConformanceTest.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/conformance/storage/ContentStorageConformanceTest.java
@@ -36,36 +36,36 @@
     private static final byte[] OTHER_DATA = "other data".getBytes(Charset.forName("UTF-8"));
 
     // Helper consumers to make tests cleaner
-    private final Consumer<Result<Map<String, byte[]>>> isKey0Data0 = input -> {
+    private final Consumer<Result<Map<String, byte[]>>> mIsKey0Data0 = input -> {
         assertThat(input.isSuccessful()).isTrue();
         Map<String, byte[]> valueMap = input.getValue();
         assertThat(valueMap.get(KEY_0)).isEqualTo(DATA_0);
     };
-    private final Consumer<Result<Map<String, byte[]>>> isKey0EmptyData = input -> {
+    private final Consumer<Result<Map<String, byte[]>>> mIsKey0EmptyData = input -> {
         assertThat(input.isSuccessful()).isTrue();
         Map<String, byte[]> valueMap = input.getValue();
         assertThat(valueMap.get(KEY_0)).isNull();
     };
-    private final Consumer<Result<Map<String, byte[]>>> isKey0Data1 = input -> {
+    private final Consumer<Result<Map<String, byte[]>>> mIsKey0Data1 = input -> {
         assertThat(input.isSuccessful()).isTrue();
         Map<String, byte[]> valueMap = input.getValue();
         assertThat(valueMap.get(KEY_0)).isEqualTo(DATA_1);
     };
 
-    private final Consumer<Result<Map<String, byte[]>>> isKey0Data0Key1Data1 = result -> {
+    private final Consumer<Result<Map<String, byte[]>>> mIsKey0Data0Key1Data1 = result -> {
         assertThat(result.isSuccessful()).isTrue();
         Map<String, byte[]> input = result.getValue();
         assertThat(input.get(KEY_0)).isEqualTo(DATA_0);
         assertThat(input.get(KEY_1)).isEqualTo(DATA_1);
     };
-    private final Consumer<Result<Map<String, byte[]>>> isKey0EmptyDataKey1EmptyData = input -> {
+    private final Consumer<Result<Map<String, byte[]>>> mIsKey0EmptyDataKey1EmptyData = input -> {
         assertThat(input.isSuccessful()).isTrue();
         Map<String, byte[]> valueMap = input.getValue();
         assertThat(valueMap.get(KEY_0)).isNull();
         assertThat(valueMap.get(KEY_1)).isNull();
     };
     private final Consumer<Result<Map<String, byte[]>>>
-            isKey0EmptyDataKey1EmptyDataOtherKeyEmptyData = input -> {
+            mIsKey0EmptyDataKey1EmptyDataOtherKeyEmptyData = input -> {
         assertThat(input.isSuccessful()).isTrue();
         Map<String, byte[]> valueMap = input.getValue();
         assertThat(valueMap.get(KEY_0)).isNull();
@@ -73,7 +73,7 @@
         assertThat(valueMap.get(OTHER_KEY)).isNull();
     };
 
-    private final Consumer<Result<Map<String, byte[]>>> isKey0Data0Key1Data1OtherKeyOtherData =
+    private final Consumer<Result<Map<String, byte[]>>> mIsKey0Data0Key1Data1OtherKeyOtherData =
             result -> {
         assertThat(result.isSuccessful()).isTrue();
         Map<String, byte[]> input = result.getValue();
@@ -82,7 +82,7 @@
         assertThat(input.get(OTHER_KEY)).isEqualTo(OTHER_DATA);
     };
     private final Consumer<Result<Map<String, byte[]>>>
-            isKey0EmptyDataKey1EmptyDataOtherKeyOtherData = result -> {
+            mIsKey0EmptyDataKey1EmptyDataOtherKeyOtherData = result -> {
         assertThat(result.isSuccessful()).isTrue();
         Map<String, byte[]> input = result.getValue();
         assertThat(input.get(KEY_0)).isNull();
@@ -90,196 +90,196 @@
         assertThat(input.get(OTHER_KEY)).isEqualTo(OTHER_DATA);
     };
 
-    private final Consumer<CommitResult> isSuccess =
+    private final Consumer<CommitResult> mIsSuccess =
             input -> assertThat(input).isEqualTo(CommitResult.SUCCESS);
 
-    private final Consumer<Result<List<String>>> isKey0Key1 = result -> {
+    private final Consumer<Result<List<String>>> mIsKey0Key1 = result -> {
         assertThat(result.isSuccessful()).isTrue();
         assertThat(result.getValue()).containsExactly(KEY_0, KEY_1);
     };
 
-    protected ContentStorage storage;
+    protected ContentStorage mStorage;
 
-    private RequiredConsumer<CommitResult> assertSuccessConsumer;
+    private RequiredConsumer<CommitResult> mAssertSuccessConsumer;
 
     @Before
     public final void testSetup() {
-        assertSuccessConsumer = new RequiredConsumer<>(isSuccess);
+        mAssertSuccessConsumer = new RequiredConsumer<>(mIsSuccess);
     }
 
     @Test
     public void missingKey() {
         RequiredConsumer<Result<Map<String, byte[]>>> consumer =
-                new RequiredConsumer<>(isKey0EmptyData);
-        storage.get(Collections.singletonList(KEY_0), consumer);
+                new RequiredConsumer<>(mIsKey0EmptyData);
+        mStorage.get(Collections.singletonList(KEY_0), consumer);
         assertThat(consumer.isCalled()).isTrue();
     }
 
     @Test
     public void missingKey_multipleKeys() {
         RequiredConsumer<Result<Map<String, byte[]>>> consumer =
-                new RequiredConsumer<>(isKey0EmptyDataKey1EmptyData);
-        storage.get(Arrays.asList(KEY_0, KEY_1), consumer);
+                new RequiredConsumer<>(mIsKey0EmptyDataKey1EmptyData);
+        mStorage.get(Arrays.asList(KEY_0, KEY_1), consumer);
         assertThat(consumer.isCalled()).isTrue();
     }
 
     @Test
     public void storeAndRetrieve() {
-        storage.commit(
-                new ContentMutation.Builder().upsert(KEY_0, DATA_0).build(), assertSuccessConsumer);
-        assertThat(assertSuccessConsumer.isCalled()).isTrue();
+        mStorage.commit(new ContentMutation.Builder().upsert(KEY_0, DATA_0).build(),
+                mAssertSuccessConsumer);
+        assertThat(mAssertSuccessConsumer.isCalled()).isTrue();
         RequiredConsumer<Result<Map<String, byte[]>>> byteConsumer =
-                new RequiredConsumer<>(isKey0Data0);
-        storage.get(Collections.singletonList(KEY_0), byteConsumer);
+                new RequiredConsumer<>(mIsKey0Data0);
+        mStorage.get(Collections.singletonList(KEY_0), byteConsumer);
         assertThat(byteConsumer.isCalled()).isTrue();
     }
 
     @Test
     public void storeAndRetrieve_multipleKeys() {
-        storage.commit(
+        mStorage.commit(
                 new ContentMutation.Builder().upsert(KEY_0, DATA_0).upsert(KEY_1, DATA_1).build(),
-                assertSuccessConsumer);
-        assertThat(assertSuccessConsumer.isCalled()).isTrue();
+                mAssertSuccessConsumer);
+        assertThat(mAssertSuccessConsumer.isCalled()).isTrue();
         RequiredConsumer<Result<Map<String, byte[]>>> byteConsumer =
-                new RequiredConsumer<>(isKey0Data0Key1Data1);
-        storage.get(Arrays.asList(KEY_0, KEY_1), byteConsumer);
+                new RequiredConsumer<>(mIsKey0Data0Key1Data1);
+        mStorage.get(Arrays.asList(KEY_0, KEY_1), byteConsumer);
         assertThat(byteConsumer.isCalled()).isTrue();
     }
 
     @Test
     public void storeAndOverwrite_chained() {
-        storage.commit(
+        mStorage.commit(
                 new ContentMutation.Builder().upsert(KEY_0, DATA_0).upsert(KEY_0, DATA_1).build(),
-                assertSuccessConsumer);
-        assertThat(assertSuccessConsumer.isCalled()).isTrue();
+                mAssertSuccessConsumer);
+        assertThat(mAssertSuccessConsumer.isCalled()).isTrue();
         RequiredConsumer<Result<Map<String, byte[]>>> byteConsumer =
-                new RequiredConsumer<>(isKey0Data1);
-        storage.get(Collections.singletonList(KEY_0), byteConsumer);
+                new RequiredConsumer<>(mIsKey0Data1);
+        mStorage.get(Collections.singletonList(KEY_0), byteConsumer);
         assertThat(byteConsumer.isCalled()).isTrue();
     }
 
     @Test
     public void storeAndOverwrite_separate() {
-        storage.commit(
-                new ContentMutation.Builder().upsert(KEY_0, DATA_0).build(), assertSuccessConsumer);
-        assertThat(assertSuccessConsumer.isCalled()).isTrue();
+        mStorage.commit(new ContentMutation.Builder().upsert(KEY_0, DATA_0).build(),
+                mAssertSuccessConsumer);
+        assertThat(mAssertSuccessConsumer.isCalled()).isTrue();
 
         RequiredConsumer<Result<Map<String, byte[]>>> byteConsumer =
-                new RequiredConsumer<>(isKey0Data0);
-        storage.get(Collections.singletonList(KEY_0), byteConsumer);
+                new RequiredConsumer<>(mIsKey0Data0);
+        mStorage.get(Collections.singletonList(KEY_0), byteConsumer);
         assertThat(byteConsumer.isCalled()).isTrue();
 
         // Reset assertSuccessConsumer
-        assertSuccessConsumer = new RequiredConsumer<>(
+        mAssertSuccessConsumer = new RequiredConsumer<>(
                 input -> { assertThat(input).isEqualTo(CommitResult.SUCCESS); });
-        storage.commit(
-                new ContentMutation.Builder().upsert(KEY_0, DATA_1).build(), assertSuccessConsumer);
-        assertThat(assertSuccessConsumer.isCalled()).isTrue();
+        mStorage.commit(new ContentMutation.Builder().upsert(KEY_0, DATA_1).build(),
+                mAssertSuccessConsumer);
+        assertThat(mAssertSuccessConsumer.isCalled()).isTrue();
 
         RequiredConsumer<Result<Map<String, byte[]>>> byteConsumer2 =
-                new RequiredConsumer<>(isKey0Data1);
-        storage.get(Collections.singletonList(KEY_0), byteConsumer2);
+                new RequiredConsumer<>(mIsKey0Data1);
+        mStorage.get(Collections.singletonList(KEY_0), byteConsumer2);
         assertThat(byteConsumer2.isCalled()).isTrue();
     }
 
     @Test
     public void storeAndDelete() {
-        storage.commit(
+        mStorage.commit(
                 new ContentMutation.Builder().upsert(KEY_0, DATA_0).upsert(KEY_1, DATA_1).build(),
-                assertSuccessConsumer);
-        assertThat(assertSuccessConsumer.isCalled()).isTrue();
+                mAssertSuccessConsumer);
+        assertThat(mAssertSuccessConsumer.isCalled()).isTrue();
 
         // Confirm Key 0 and 1 are present
         RequiredConsumer<Result<Map<String, byte[]>>> byteConsumer =
-                new RequiredConsumer<>(isKey0Data0Key1Data1);
-        storage.get(Arrays.asList(KEY_0, KEY_1), byteConsumer);
+                new RequiredConsumer<>(mIsKey0Data0Key1Data1);
+        mStorage.get(Arrays.asList(KEY_0, KEY_1), byteConsumer);
         assertThat(byteConsumer.isCalled()).isTrue();
 
         // Delete Key 0
-        RequiredConsumer<CommitResult> deleteConsumer = new RequiredConsumer<>(isSuccess);
-        storage.commit(new ContentMutation.Builder().delete(KEY_0).build(), deleteConsumer);
+        RequiredConsumer<CommitResult> deleteConsumer = new RequiredConsumer<>(mIsSuccess);
+        mStorage.commit(new ContentMutation.Builder().delete(KEY_0).build(), deleteConsumer);
         assertThat(deleteConsumer.isCalled()).isTrue();
 
         // Confirm that Key 0 is deleted and Key 1 is present
-        byteConsumer = new RequiredConsumer<>(isKey0EmptyData);
-        storage.get(Arrays.asList(KEY_0, KEY_1), byteConsumer);
+        byteConsumer = new RequiredConsumer<>(mIsKey0EmptyData);
+        mStorage.get(Arrays.asList(KEY_0, KEY_1), byteConsumer);
         assertThat(byteConsumer.isCalled()).isTrue();
     }
 
     @Test
     public void storeAndDeleteByPrefix() {
-        storage.commit(new ContentMutation.Builder()
-                               .upsert(KEY_0, DATA_0)
-                               .upsert(KEY_1, DATA_1)
-                               .upsert(OTHER_KEY, OTHER_DATA)
-                               .build(),
-                assertSuccessConsumer);
-        assertThat(assertSuccessConsumer.isCalled()).isTrue();
+        mStorage.commit(new ContentMutation.Builder()
+                                .upsert(KEY_0, DATA_0)
+                                .upsert(KEY_1, DATA_1)
+                                .upsert(OTHER_KEY, OTHER_DATA)
+                                .build(),
+                mAssertSuccessConsumer);
+        assertThat(mAssertSuccessConsumer.isCalled()).isTrue();
 
         // Confirm Key 0, Key 1, and Other are present
         RequiredConsumer<Result<Map<String, byte[]>>> byteConsumer =
-                new RequiredConsumer<>(isKey0Data0Key1Data1OtherKeyOtherData);
-        storage.get(Arrays.asList(KEY_0, KEY_1, OTHER_KEY), byteConsumer);
+                new RequiredConsumer<>(mIsKey0Data0Key1Data1OtherKeyOtherData);
+        mStorage.get(Arrays.asList(KEY_0, KEY_1, OTHER_KEY), byteConsumer);
         assertThat(byteConsumer.isCalled()).isTrue();
 
         // Delete by prefix Key
-        RequiredConsumer<CommitResult> deleteConsumer = new RequiredConsumer<>(isSuccess);
-        storage.commit(new ContentMutation.Builder().deleteByPrefix(KEY).build(), deleteConsumer);
+        RequiredConsumer<CommitResult> deleteConsumer = new RequiredConsumer<>(mIsSuccess);
+        mStorage.commit(new ContentMutation.Builder().deleteByPrefix(KEY).build(), deleteConsumer);
 
         // Confirm Key 0 and Key 1 are deleted, and Other is present
-        byteConsumer = new RequiredConsumer<>(isKey0EmptyDataKey1EmptyDataOtherKeyOtherData);
-        storage.get(Arrays.asList(KEY_0, KEY_1, OTHER_KEY), byteConsumer);
+        byteConsumer = new RequiredConsumer<>(mIsKey0EmptyDataKey1EmptyDataOtherKeyOtherData);
+        mStorage.get(Arrays.asList(KEY_0, KEY_1, OTHER_KEY), byteConsumer);
         assertThat(byteConsumer.isCalled()).isTrue();
     }
 
     @Test
     public void storeAndDeleteAll() {
-        storage.commit(new ContentMutation.Builder()
-                               .upsert(KEY_0, DATA_0)
-                               .upsert(KEY_1, DATA_1)
-                               .upsert(OTHER_KEY, OTHER_DATA)
-                               .build(),
-                assertSuccessConsumer);
-        assertThat(assertSuccessConsumer.isCalled()).isTrue();
+        mStorage.commit(new ContentMutation.Builder()
+                                .upsert(KEY_0, DATA_0)
+                                .upsert(KEY_1, DATA_1)
+                                .upsert(OTHER_KEY, OTHER_DATA)
+                                .build(),
+                mAssertSuccessConsumer);
+        assertThat(mAssertSuccessConsumer.isCalled()).isTrue();
 
         // Confirm Key 0, Key 1, and Other are present
         RequiredConsumer<Result<Map<String, byte[]>>> byteConsumer =
-                new RequiredConsumer<>(isKey0Data0Key1Data1OtherKeyOtherData);
-        storage.get(Arrays.asList(KEY_0, KEY_1, OTHER_KEY), byteConsumer);
+                new RequiredConsumer<>(mIsKey0Data0Key1Data1OtherKeyOtherData);
+        mStorage.get(Arrays.asList(KEY_0, KEY_1, OTHER_KEY), byteConsumer);
         assertThat(byteConsumer.isCalled()).isTrue();
 
         // Delete all
-        RequiredConsumer<CommitResult> deleteConsumer = new RequiredConsumer<>(isSuccess);
-        storage.commit(new ContentMutation.Builder().deleteAll().build(), deleteConsumer);
+        RequiredConsumer<CommitResult> deleteConsumer = new RequiredConsumer<>(mIsSuccess);
+        mStorage.commit(new ContentMutation.Builder().deleteAll().build(), deleteConsumer);
 
         // Confirm all keys are deleted
-        byteConsumer = new RequiredConsumer<>(isKey0EmptyDataKey1EmptyDataOtherKeyEmptyData);
-        storage.get(Arrays.asList(KEY_0, KEY_1, OTHER_KEY), byteConsumer);
+        byteConsumer = new RequiredConsumer<>(mIsKey0EmptyDataKey1EmptyDataOtherKeyEmptyData);
+        mStorage.get(Arrays.asList(KEY_0, KEY_1, OTHER_KEY), byteConsumer);
         assertThat(byteConsumer.isCalled()).isTrue();
     }
 
     @Test
     public void multipleValues_getAll() {
-        storage.commit(
+        mStorage.commit(
                 new ContentMutation.Builder().upsert(KEY_0, DATA_0).upsert(KEY_1, DATA_1).build(),
-                assertSuccessConsumer);
-        assertThat(assertSuccessConsumer.isCalled()).isTrue();
+                mAssertSuccessConsumer);
+        assertThat(mAssertSuccessConsumer.isCalled()).isTrue();
 
         RequiredConsumer<Result<Map<String, byte[]>>> mapConsumer =
-                new RequiredConsumer<>(isKey0Data0Key1Data1);
-        storage.getAll(KEY, mapConsumer);
+                new RequiredConsumer<>(mIsKey0Data0Key1Data1);
+        mStorage.getAll(KEY, mapConsumer);
         assertThat(mapConsumer.isCalled()).isTrue();
     }
 
     @Test
     public void multipleValues_getAllKeys() {
-        storage.commit(
+        mStorage.commit(
                 new ContentMutation.Builder().upsert(KEY_0, DATA_0).upsert(KEY_1, DATA_1).build(),
-                assertSuccessConsumer);
-        assertThat(assertSuccessConsumer.isCalled()).isTrue();
+                mAssertSuccessConsumer);
+        assertThat(mAssertSuccessConsumer.isCalled()).isTrue();
 
-        RequiredConsumer<Result<List<String>>> listConsumer = new RequiredConsumer<>(isKey0Key1);
-        storage.getAllKeys(listConsumer);
+        RequiredConsumer<Result<List<String>>> listConsumer = new RequiredConsumer<>(mIsKey0Key1);
+        mStorage.getAllKeys(listConsumer);
         assertThat(listConsumer.isCalled()).isTrue();
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/conformance/storage/ContentStorageDirectConformanceTest.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/conformance/storage/ContentStorageDirectConformanceTest.java
index 13eede8..e8f783b3 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/conformance/storage/ContentStorageDirectConformanceTest.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/conformance/storage/ContentStorageDirectConformanceTest.java
@@ -32,18 +32,18 @@
     private static final byte[] DATA_1 = "data 1".getBytes(Charset.forName("UTF-8"));
     private static final byte[] OTHER_DATA = "other data".getBytes(Charset.forName("UTF-8"));
 
-    protected ContentStorageDirect storage;
+    protected ContentStorageDirect mStorage;
 
     @Test
     public void missingKey() {
-        Result<Map<String, byte[]>> result = storage.get(Collections.singletonList(KEY_0));
+        Result<Map<String, byte[]>> result = mStorage.get(Collections.singletonList(KEY_0));
         Map<String, byte[]> valueMap = result.getValue();
         assertThat(valueMap.get(KEY_0)).isNull();
     }
 
     @Test
     public void missingKey_multipleKeys() {
-        Result<Map<String, byte[]>> result = storage.get(Arrays.asList(KEY_0, KEY_1));
+        Result<Map<String, byte[]>> result = mStorage.get(Arrays.asList(KEY_0, KEY_1));
         Map<String, byte[]> valueMap = result.getValue();
         assertThat(valueMap.get(KEY_0)).isNull();
         assertThat(valueMap.get(KEY_1)).isNull();
@@ -52,21 +52,21 @@
     @Test
     public void storeAndRetrieve() {
         CommitResult commitResult =
-                storage.commit(new ContentMutation.Builder().upsert(KEY_0, DATA_0).build());
+                mStorage.commit(new ContentMutation.Builder().upsert(KEY_0, DATA_0).build());
         assertThat(commitResult).isEqualTo(CommitResult.SUCCESS);
 
-        Result<Map<String, byte[]>> result = storage.get(Collections.singletonList(KEY_0));
+        Result<Map<String, byte[]>> result = mStorage.get(Collections.singletonList(KEY_0));
         Map<String, byte[]> input = result.getValue();
         assertThat(input.get(KEY_0)).isEqualTo(DATA_0);
     }
 
     @Test
     public void storeAndRetrieve_multipleKeys() {
-        CommitResult commitResult = storage.commit(
+        CommitResult commitResult = mStorage.commit(
                 new ContentMutation.Builder().upsert(KEY_0, DATA_0).upsert(KEY_1, DATA_1).build());
         assertThat(commitResult).isEqualTo(CommitResult.SUCCESS);
 
-        Result<Map<String, byte[]>> result = storage.get(Arrays.asList(KEY_0, KEY_1));
+        Result<Map<String, byte[]>> result = mStorage.get(Arrays.asList(KEY_0, KEY_1));
         Map<String, byte[]> input = result.getValue();
         assertThat(input.get(KEY_0)).isEqualTo(DATA_0);
         assertThat(input.get(KEY_1)).isEqualTo(DATA_1);
@@ -74,11 +74,11 @@
 
     @Test
     public void storeAndOverwrite_chained() {
-        CommitResult commitResult = storage.commit(
+        CommitResult commitResult = mStorage.commit(
                 new ContentMutation.Builder().upsert(KEY_0, DATA_0).upsert(KEY_0, DATA_1).build());
         assertThat(commitResult).isEqualTo(CommitResult.SUCCESS);
 
-        Result<Map<String, byte[]>> result = storage.get(Collections.singletonList(KEY_0));
+        Result<Map<String, byte[]>> result = mStorage.get(Collections.singletonList(KEY_0));
         Map<String, byte[]> valueMap = result.getValue();
         assertThat(valueMap.get(KEY_0)).isEqualTo(DATA_1);
     }
@@ -86,65 +86,65 @@
     @Test
     public void storeAndOverwrite_separate() {
         CommitResult commitResult =
-                storage.commit(new ContentMutation.Builder().upsert(KEY_0, DATA_0).build());
+                mStorage.commit(new ContentMutation.Builder().upsert(KEY_0, DATA_0).build());
         assertThat(commitResult).isEqualTo(CommitResult.SUCCESS);
 
-        Result<Map<String, byte[]>> result = storage.get(Collections.singletonList(KEY_0));
+        Result<Map<String, byte[]>> result = mStorage.get(Collections.singletonList(KEY_0));
         Map<String, byte[]> valueMap = result.getValue();
         assertThat(valueMap.get(KEY_0)).isEqualTo(DATA_0);
 
-        commitResult = storage.commit(new ContentMutation.Builder().upsert(KEY_0, DATA_1).build());
+        commitResult = mStorage.commit(new ContentMutation.Builder().upsert(KEY_0, DATA_1).build());
         assertThat(commitResult).isEqualTo(CommitResult.SUCCESS);
 
-        result = storage.get(Collections.singletonList(KEY_0));
+        result = mStorage.get(Collections.singletonList(KEY_0));
         valueMap = result.getValue();
         assertThat(valueMap.get(KEY_0)).isEqualTo(DATA_1);
     }
 
     @Test
     public void storeAndDelete() {
-        CommitResult commitResult = storage.commit(
+        CommitResult commitResult = mStorage.commit(
                 new ContentMutation.Builder().upsert(KEY_0, DATA_0).upsert(KEY_1, DATA_1).build());
         assertThat(commitResult).isEqualTo(CommitResult.SUCCESS);
 
         // Confirm Key 0 and 1 are present
-        Result<Map<String, byte[]>> result = storage.get(Arrays.asList(KEY_0, KEY_1));
+        Result<Map<String, byte[]>> result = mStorage.get(Arrays.asList(KEY_0, KEY_1));
         Map<String, byte[]> input = result.getValue();
         assertThat(input.get(KEY_0)).isEqualTo(DATA_0);
         assertThat(input.get(KEY_1)).isEqualTo(DATA_1);
 
         // Delete Key 0
-        commitResult = storage.commit(new ContentMutation.Builder().delete(KEY_0).build());
+        commitResult = mStorage.commit(new ContentMutation.Builder().delete(KEY_0).build());
         assertThat(commitResult).isEqualTo(CommitResult.SUCCESS);
 
         // Confirm that Key 0 is deleted and Key 1 is present
-        Result<Map<String, byte[]>> result2 = storage.get(Arrays.asList(KEY_0, KEY_1));
+        Result<Map<String, byte[]>> result2 = mStorage.get(Arrays.asList(KEY_0, KEY_1));
         Map<String, byte[]> valueMap = result2.getValue();
         assertThat(valueMap.get(KEY_0)).isNull();
     }
 
     @Test
     public void storeAndDeleteByPrefix() {
-        CommitResult commitResult = storage.commit(new ContentMutation.Builder()
-                                                           .upsert(KEY_0, DATA_0)
-                                                           .upsert(KEY_1, DATA_1)
-                                                           .upsert(OTHER_KEY, OTHER_DATA)
-                                                           .build());
+        CommitResult commitResult = mStorage.commit(new ContentMutation.Builder()
+                                                            .upsert(KEY_0, DATA_0)
+                                                            .upsert(KEY_1, DATA_1)
+                                                            .upsert(OTHER_KEY, OTHER_DATA)
+                                                            .build());
         assertThat(commitResult).isEqualTo(CommitResult.SUCCESS);
 
         // Confirm Key 0, Key 1, and Other are present
-        Result<Map<String, byte[]>> result = storage.get(Arrays.asList(KEY_0, KEY_1, OTHER_KEY));
+        Result<Map<String, byte[]>> result = mStorage.get(Arrays.asList(KEY_0, KEY_1, OTHER_KEY));
         Map<String, byte[]> valueMap = result.getValue();
         assertThat(valueMap.get(KEY_0)).isEqualTo(DATA_0);
         assertThat(valueMap.get(KEY_1)).isEqualTo(DATA_1);
         assertThat(valueMap.get(OTHER_KEY)).isEqualTo(OTHER_DATA);
 
         // Delete by prefix Key
-        commitResult = storage.commit(new ContentMutation.Builder().deleteByPrefix(KEY).build());
+        commitResult = mStorage.commit(new ContentMutation.Builder().deleteByPrefix(KEY).build());
         assertThat(commitResult).isEqualTo(CommitResult.SUCCESS);
 
         // Confirm Key 0 and Key 1 are deleted, and Other is present
-        result = storage.get(Arrays.asList(KEY_0, KEY_1, OTHER_KEY));
+        result = mStorage.get(Arrays.asList(KEY_0, KEY_1, OTHER_KEY));
         valueMap = result.getValue();
         assertThat(valueMap.get(KEY_0)).isNull();
         assertThat(valueMap.get(KEY_1)).isNull();
@@ -153,26 +153,26 @@
 
     @Test
     public void storeAndDeleteAll() {
-        CommitResult commitResult = storage.commit(new ContentMutation.Builder()
-                                                           .upsert(KEY_0, DATA_0)
-                                                           .upsert(KEY_1, DATA_1)
-                                                           .upsert(OTHER_KEY, OTHER_DATA)
-                                                           .build());
+        CommitResult commitResult = mStorage.commit(new ContentMutation.Builder()
+                                                            .upsert(KEY_0, DATA_0)
+                                                            .upsert(KEY_1, DATA_1)
+                                                            .upsert(OTHER_KEY, OTHER_DATA)
+                                                            .build());
         assertThat(commitResult).isEqualTo(CommitResult.SUCCESS);
 
         // Confirm Key 0, Key 1, and Other are present
-        Result<Map<String, byte[]>> result = storage.get(Arrays.asList(KEY_0, KEY_1, OTHER_KEY));
+        Result<Map<String, byte[]>> result = mStorage.get(Arrays.asList(KEY_0, KEY_1, OTHER_KEY));
         Map<String, byte[]> valueMap = result.getValue();
         assertThat(valueMap.get(KEY_0)).isEqualTo(DATA_0);
         assertThat(valueMap.get(KEY_1)).isEqualTo(DATA_1);
         assertThat(valueMap.get(OTHER_KEY)).isEqualTo(OTHER_DATA);
 
         // Delete all
-        commitResult = storage.commit(new ContentMutation.Builder().deleteAll().build());
+        commitResult = mStorage.commit(new ContentMutation.Builder().deleteAll().build());
         assertThat(commitResult).isEqualTo(CommitResult.SUCCESS);
 
         // Confirm all keys are deleted
-        result = storage.get(Arrays.asList(KEY_0, KEY_1, OTHER_KEY));
+        result = mStorage.get(Arrays.asList(KEY_0, KEY_1, OTHER_KEY));
         valueMap = result.getValue();
         assertThat(valueMap.get(KEY_0)).isNull();
         assertThat(valueMap.get(KEY_1)).isNull();
@@ -181,11 +181,11 @@
 
     @Test
     public void multipleValues_getAll() {
-        CommitResult commitResult = storage.commit(
+        CommitResult commitResult = mStorage.commit(
                 new ContentMutation.Builder().upsert(KEY_0, DATA_0).upsert(KEY_1, DATA_1).build());
         assertThat(commitResult).isEqualTo(CommitResult.SUCCESS);
 
-        Result<Map<String, byte[]>> result = storage.getAll(KEY);
+        Result<Map<String, byte[]>> result = mStorage.getAll(KEY);
         Map<String, byte[]> input = result.getValue();
         assertThat(input.get(KEY_0)).isEqualTo(DATA_0);
         assertThat(input.get(KEY_1)).isEqualTo(DATA_1);
@@ -193,11 +193,11 @@
 
     @Test
     public void multipleValues_getAllKeys() {
-        CommitResult commitResult = storage.commit(
+        CommitResult commitResult = mStorage.commit(
                 new ContentMutation.Builder().upsert(KEY_0, DATA_0).upsert(KEY_1, DATA_1).build());
         assertThat(commitResult).isEqualTo(CommitResult.SUCCESS);
 
-        Result<List<String>> result = storage.getAllKeys();
+        Result<List<String>> result = mStorage.getAllKeys();
         assertThat(result.getValue()).containsExactly(KEY_0, KEY_1);
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/conformance/storage/JournalStorageConformanceTest.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/conformance/storage/JournalStorageConformanceTest.java
index d004639..3a89c42 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/conformance/storage/JournalStorageConformanceTest.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/conformance/storage/JournalStorageConformanceTest.java
@@ -31,13 +31,13 @@
     private static final byte[] DATA_0 = "data 0".getBytes(Charset.forName("UTF-8"));
     private static final byte[] DATA_1 = "data 1".getBytes(Charset.forName("UTF-8"));
 
-    private final Consumer<Result<List<String>>> isJournal1 = result -> {
+    private final Consumer<Result<List<String>>> mIsJournal1 = result -> {
         assertThat(result.isSuccessful()).isTrue();
         List<String> input = result.getValue();
         assertThat(input).hasSize(1);
         assertThat(input).contains(JOURNAL_NAME);
     };
-    private final Consumer<Result<List<String>>> isJournal1AndJournal2 = result -> {
+    private final Consumer<Result<List<String>>> mIsJournal1AndJournal2 = result -> {
         assertThat(result.isSuccessful()).isTrue();
         List<String> input = result.getValue();
         assertThat(input).hasSize(2);
@@ -45,7 +45,7 @@
         assertThat(input).contains(JOURNAL_COPY_NAME);
     };
 
-    private final Consumer<Result<List<byte[]>>> isData0AndData1 = result -> {
+    private final Consumer<Result<List<byte[]>>> mIsData0AndData1 = result -> {
         assertThat(result.isSuccessful()).isTrue();
         List<byte[]> input = result.getValue();
         // We should get back one byte array, containing the bytes of DATA_0 and DATA_1.
@@ -54,7 +54,7 @@
         assertThat(Arrays.equals(input.get(0), DATA_0)).isTrue();
         assertThat(Arrays.equals(input.get(1), DATA_1)).isTrue();
     };
-    private final Consumer<Result<List<byte[]>>> isEmptyList = result -> {
+    private final Consumer<Result<List<byte[]>>> mIsEmptyList = result -> {
         assertThat(result.isSuccessful()).isTrue();
         List<byte[]> input = result.getValue();
 
@@ -62,171 +62,171 @@
         assertThat(input).isNotNull();
         assertThat(input).isEmpty();
     };
-    private final Consumer<CommitResult> isSuccess =
+    private final Consumer<CommitResult> mIsSuccess =
             input -> assertThat(input).isEqualTo(CommitResult.SUCCESS);
-    private final Consumer<Result<Boolean>> isFalse = result -> {
+    private final Consumer<Result<Boolean>> mIsFalse = result -> {
         assertThat(result.isSuccessful()).isTrue();
         Boolean input = result.getValue();
         assertThat(input).isFalse();
     };
-    private final Consumer<Result<Boolean>> isTrue = result -> {
+    private final Consumer<Result<Boolean>> mIsTrue = result -> {
         assertThat(result.isSuccessful()).isTrue();
         Boolean input = result.getValue();
         assertThat(input).isTrue();
     };
 
-    protected JournalStorage journalStorage;
+    protected JournalStorage mJournalStorage;
 
     @Test
     public void readOfEmptyJournalReturnsEmptyData() {
         // Try to read some blobs from an empty journal store.
-        RequiredConsumer<Result<List<byte[]>>> readConsumer = new RequiredConsumer<>(isEmptyList);
-        journalStorage.read(JOURNAL_NAME, readConsumer);
+        RequiredConsumer<Result<List<byte[]>>> readConsumer = new RequiredConsumer<>(mIsEmptyList);
+        mJournalStorage.read(JOURNAL_NAME, readConsumer);
         assertThat(readConsumer.isCalled()).isTrue();
     }
 
     @Test
     public void appendToJournal() {
         // Write some data and put the result from the callback into commitResult.
-        RequiredConsumer<CommitResult> commitConsumer = new RequiredConsumer<>(isSuccess);
-        journalStorage.commit(
+        RequiredConsumer<CommitResult> commitConsumer = new RequiredConsumer<>(mIsSuccess);
+        mJournalStorage.commit(
                 new JournalMutation.Builder(JOURNAL_NAME).append(DATA_0).append(DATA_1).build(),
                 commitConsumer);
         assertThat(commitConsumer.isCalled()).isTrue();
 
         // Read the data back into blobs.
         RequiredConsumer<Result<List<byte[]>>> readConsumer =
-                new RequiredConsumer<>(isData0AndData1);
-        journalStorage.read(JOURNAL_NAME, readConsumer);
+                new RequiredConsumer<>(mIsData0AndData1);
+        mJournalStorage.read(JOURNAL_NAME, readConsumer);
         assertThat(readConsumer.isCalled()).isTrue();
     }
 
     @Test
     public void copyJournal() {
         // Write some data.
-        RequiredConsumer<CommitResult> commitConsumer = new RequiredConsumer<>(isSuccess);
-        journalStorage.commit(
+        RequiredConsumer<CommitResult> commitConsumer = new RequiredConsumer<>(mIsSuccess);
+        mJournalStorage.commit(
                 new JournalMutation.Builder(JOURNAL_NAME).append(DATA_0).append(DATA_1).build(),
                 commitConsumer);
         assertThat(commitConsumer.isCalled()).isTrue();
 
         // Copy the data into a new journal and put the result from the callback into commitResult.
-        commitConsumer = new RequiredConsumer<>(isSuccess);
-        journalStorage.commit(
+        commitConsumer = new RequiredConsumer<>(mIsSuccess);
+        mJournalStorage.commit(
                 new JournalMutation.Builder(JOURNAL_NAME).copy(JOURNAL_COPY_NAME).build(),
                 commitConsumer);
         assertThat(commitConsumer.isCalled()).isTrue();
 
         // Read the data back into blobs.
         RequiredConsumer<Result<List<byte[]>>> readConsumer =
-                new RequiredConsumer<>(isData0AndData1);
-        journalStorage.read(JOURNAL_COPY_NAME, readConsumer);
+                new RequiredConsumer<>(mIsData0AndData1);
+        mJournalStorage.read(JOURNAL_COPY_NAME, readConsumer);
         assertThat(readConsumer.isCalled()).isTrue();
     }
 
     @Test
     public void deleteJournal() {
         // Write some data.
-        RequiredConsumer<CommitResult> commitConsumer = new RequiredConsumer<>(isSuccess);
-        journalStorage.commit(
+        RequiredConsumer<CommitResult> commitConsumer = new RequiredConsumer<>(mIsSuccess);
+        mJournalStorage.commit(
                 new JournalMutation.Builder(JOURNAL_NAME).append(DATA_0).append(DATA_1).build(),
                 commitConsumer);
         assertThat(commitConsumer.isCalled()).isTrue();
 
         // Delete the journal and put the result from the callback into commitResult.
-        commitConsumer = new RequiredConsumer<>(isSuccess);
-        journalStorage.commit(
+        commitConsumer = new RequiredConsumer<>(mIsSuccess);
+        mJournalStorage.commit(
                 new JournalMutation.Builder(JOURNAL_NAME).delete().build(), commitConsumer);
         assertThat(commitConsumer.isCalled()).isTrue();
 
         // Try to read the deleted journal.
-        RequiredConsumer<Result<List<byte[]>>> readConsumer = new RequiredConsumer<>(isEmptyList);
-        journalStorage.read(JOURNAL_NAME, readConsumer);
+        RequiredConsumer<Result<List<byte[]>>> readConsumer = new RequiredConsumer<>(mIsEmptyList);
+        mJournalStorage.read(JOURNAL_NAME, readConsumer);
         assertThat(readConsumer.isCalled()).isTrue();
     }
 
     @Test
     public void deleteAllJournals() {
         // Write some data, then copy into two journals.
-        RequiredConsumer<CommitResult> commitConsumer = new RequiredConsumer<>(isSuccess);
-        journalStorage.commit(new JournalMutation.Builder(JOURNAL_NAME)
-                                      .append(DATA_0)
-                                      .append(DATA_1)
-                                      .copy(JOURNAL_COPY_NAME)
-                                      .build(),
+        RequiredConsumer<CommitResult> commitConsumer = new RequiredConsumer<>(mIsSuccess);
+        mJournalStorage.commit(new JournalMutation.Builder(JOURNAL_NAME)
+                                       .append(DATA_0)
+                                       .append(DATA_1)
+                                       .copy(JOURNAL_COPY_NAME)
+                                       .build(),
                 commitConsumer);
         assertThat(commitConsumer.isCalled()).isTrue();
 
         // Delete all journals
-        commitConsumer = new RequiredConsumer<>(isSuccess);
-        journalStorage.deleteAll(commitConsumer);
+        commitConsumer = new RequiredConsumer<>(mIsSuccess);
+        mJournalStorage.deleteAll(commitConsumer);
         assertThat(commitConsumer.isCalled()).isTrue();
 
         // Try to read the deleted journals
-        RequiredConsumer<Result<Boolean>> existsConsumer = new RequiredConsumer<>(isFalse);
-        journalStorage.exists(JOURNAL_NAME, existsConsumer);
+        RequiredConsumer<Result<Boolean>> existsConsumer = new RequiredConsumer<>(mIsFalse);
+        mJournalStorage.exists(JOURNAL_NAME, existsConsumer);
         assertThat(existsConsumer.isCalled()).isTrue();
-        existsConsumer = new RequiredConsumer<>(isFalse);
-        journalStorage.exists(JOURNAL_COPY_NAME, existsConsumer);
+        existsConsumer = new RequiredConsumer<>(mIsFalse);
+        mJournalStorage.exists(JOURNAL_COPY_NAME, existsConsumer);
         assertThat(existsConsumer.isCalled()).isTrue();
     }
 
     @Test
     public void exists() {
         // Write some data.
-        RequiredConsumer<CommitResult> commitConsumer = new RequiredConsumer<>(isSuccess);
-        journalStorage.commit(
+        RequiredConsumer<CommitResult> commitConsumer = new RequiredConsumer<>(mIsSuccess);
+        mJournalStorage.commit(
                 new JournalMutation.Builder(JOURNAL_NAME).append(DATA_0).append(DATA_1).build(),
                 commitConsumer);
         assertThat(commitConsumer.isCalled()).isTrue();
 
-        RequiredConsumer<Result<Boolean>> existsConsumer = new RequiredConsumer<>(isTrue);
-        journalStorage.exists(JOURNAL_NAME, existsConsumer);
+        RequiredConsumer<Result<Boolean>> existsConsumer = new RequiredConsumer<>(mIsTrue);
+        mJournalStorage.exists(JOURNAL_NAME, existsConsumer);
         assertThat(existsConsumer.isCalled()).isTrue();
     }
 
     @Test
     public void exists_doesNotExist() {
-        RequiredConsumer<Result<Boolean>> existsConsumer = new RequiredConsumer<>(isFalse);
-        journalStorage.exists(JOURNAL_NAME, existsConsumer);
+        RequiredConsumer<Result<Boolean>> existsConsumer = new RequiredConsumer<>(mIsFalse);
+        mJournalStorage.exists(JOURNAL_NAME, existsConsumer);
         assertThat(existsConsumer.isCalled()).isTrue();
     }
 
     @Test
     public void getAllJournals_singleJournal() {
         // Write some data.
-        RequiredConsumer<CommitResult> commitConsumer = new RequiredConsumer<>(isSuccess);
-        journalStorage.commit(
+        RequiredConsumer<CommitResult> commitConsumer = new RequiredConsumer<>(mIsSuccess);
+        mJournalStorage.commit(
                 new JournalMutation.Builder(JOURNAL_NAME).append(DATA_0).append(DATA_1).build(),
                 commitConsumer);
         assertThat(commitConsumer.isCalled()).isTrue();
 
         RequiredConsumer<Result<List<String>>> getAllJournalsConsumer =
-                new RequiredConsumer<>(isJournal1);
-        journalStorage.getAllJournals(getAllJournalsConsumer);
+                new RequiredConsumer<>(mIsJournal1);
+        mJournalStorage.getAllJournals(getAllJournalsConsumer);
         assertThat(getAllJournalsConsumer.isCalled()).isTrue();
     }
 
     @Test
     public void getAllJournals_multipleJournals() {
         // Write some data.
-        RequiredConsumer<CommitResult> commitConsumer = new RequiredConsumer<>(isSuccess);
-        journalStorage.commit(new JournalMutation.Builder(JOURNAL_NAME)
-                                      .append(DATA_0)
-                                      .append(DATA_1)
-                                      .copy(JOURNAL_COPY_NAME)
-                                      .build(),
+        RequiredConsumer<CommitResult> commitConsumer = new RequiredConsumer<>(mIsSuccess);
+        mJournalStorage.commit(new JournalMutation.Builder(JOURNAL_NAME)
+                                       .append(DATA_0)
+                                       .append(DATA_1)
+                                       .copy(JOURNAL_COPY_NAME)
+                                       .build(),
                 commitConsumer);
         assertThat(commitConsumer.isCalled()).isTrue();
 
         RequiredConsumer<Result<List<String>>> getAllJournalsConsumer =
-                new RequiredConsumer<>(isJournal1AndJournal2);
-        journalStorage.getAllJournals(getAllJournalsConsumer);
+                new RequiredConsumer<>(mIsJournal1AndJournal2);
+        mJournalStorage.getAllJournals(getAllJournalsConsumer);
         assertThat(getAllJournalsConsumer.isCalled()).isTrue();
     }
 
     @Test
-    public void StreamLocalAction_roundTrip() {
+    public void streamLocalAction_roundTrip() {
         // Write a Stream action with known breaking data ([INTERNAL LINK])
         StreamLocalAction action =
                 StreamLocalAction.newBuilder()
@@ -234,8 +234,8 @@
                         .setAction(1)
                         .setFeatureContentId("FEATURE::stories.f::5726498306727238903")
                         .build();
-        RequiredConsumer<CommitResult> commitConsumer = new RequiredConsumer<>(isSuccess);
-        journalStorage.commit(
+        RequiredConsumer<CommitResult> commitConsumer = new RequiredConsumer<>(mIsSuccess);
+        mJournalStorage.commit(
                 new JournalMutation.Builder(JOURNAL_NAME).append(action.toByteArray()).build(),
                 commitConsumer);
         assertThat(commitConsumer.isCalled()).isTrue();
@@ -253,7 +253,7 @@
             }
             assertThat(parsedAction).isEqualTo(action);
         });
-        journalStorage.read(JOURNAL_NAME, readConsumer);
+        mJournalStorage.read(JOURNAL_NAME, readConsumer);
         assertThat(readConsumer.isCalled()).isTrue();
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/conformance/storage/JournalStorageDirectConformanceTest.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/conformance/storage/JournalStorageDirectConformanceTest.java
index 9ba173d..e377cc3 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/conformance/storage/JournalStorageDirectConformanceTest.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/conformance/storage/JournalStorageDirectConformanceTest.java
@@ -29,12 +29,12 @@
     private static final byte[] DATA_0 = "data 0".getBytes(Charset.forName("UTF-8"));
     private static final byte[] DATA_1 = "data 1".getBytes(Charset.forName("UTF-8"));
 
-    protected JournalStorageDirect journalStorage;
+    protected JournalStorageDirect mJournalStorage;
 
     @Test
     public void readOfEmptyJournalReturnsEmptyData() {
         // Try to read some blobs from an empty journal store.
-        Result<List<byte[]>> result = journalStorage.read(JOURNAL_NAME);
+        Result<List<byte[]>> result = mJournalStorage.read(JOURNAL_NAME);
         List<byte[]> input = result.getValue();
 
         // The result should be an empty List.
@@ -45,12 +45,12 @@
     @Test
     public void appendToJournal() {
         // Write some data
-        CommitResult commitResult = journalStorage.commit(
+        CommitResult commitResult = mJournalStorage.commit(
                 new JournalMutation.Builder(JOURNAL_NAME).append(DATA_0).append(DATA_1).build());
         assertThat(commitResult).isEqualTo(CommitResult.SUCCESS);
 
         // Read the data back into blobs.
-        Result<List<byte[]>> result = journalStorage.read(JOURNAL_NAME);
+        Result<List<byte[]>> result = mJournalStorage.read(JOURNAL_NAME);
         List<byte[]> input = result.getValue();
         // We should get back one byte array, containing the bytes of DATA_0 and DATA_1.
         assertThat(input).isNotNull();
@@ -62,17 +62,17 @@
     @Test
     public void copyJournal() {
         // Write some data.
-        CommitResult commitResult = journalStorage.commit(
+        CommitResult commitResult = mJournalStorage.commit(
                 new JournalMutation.Builder(JOURNAL_NAME).append(DATA_0).append(DATA_1).build());
         assertThat(commitResult).isEqualTo(CommitResult.SUCCESS);
 
         // Copy the data into a new journal
-        commitResult = journalStorage.commit(
+        commitResult = mJournalStorage.commit(
                 new JournalMutation.Builder(JOURNAL_NAME).copy(JOURNAL_COPY_NAME).build());
         assertThat(commitResult).isEqualTo(CommitResult.SUCCESS);
 
         // Read the data back into blobs.
-        Result<List<byte[]>> result = journalStorage.read(JOURNAL_COPY_NAME);
+        Result<List<byte[]>> result = mJournalStorage.read(JOURNAL_COPY_NAME);
         List<byte[]> input = result.getValue();
         // We should get back one byte array, containing the bytes of DATA_0 and DATA_1.
         assertThat(input).isNotNull();
@@ -84,17 +84,17 @@
     @Test
     public void deleteJournal() {
         // Write some data.
-        CommitResult commitResult = journalStorage.commit(
+        CommitResult commitResult = mJournalStorage.commit(
                 new JournalMutation.Builder(JOURNAL_NAME).append(DATA_0).append(DATA_1).build());
         assertThat(commitResult).isEqualTo(CommitResult.SUCCESS);
 
         // Delete the journal
         commitResult =
-                journalStorage.commit(new JournalMutation.Builder(JOURNAL_NAME).delete().build());
+                mJournalStorage.commit(new JournalMutation.Builder(JOURNAL_NAME).delete().build());
         assertThat(commitResult).isEqualTo(CommitResult.SUCCESS);
 
         // Try to read the deleted journal.
-        Result<List<byte[]>> result = journalStorage.read(JOURNAL_NAME);
+        Result<List<byte[]>> result = mJournalStorage.read(JOURNAL_NAME);
         List<byte[]> input = result.getValue();
 
         // The result should be an empty List.
@@ -105,23 +105,23 @@
     @Test
     public void deleteAllJournals() {
         // Write some data, then copy into two journals.
-        CommitResult commitResult = journalStorage.commit(new JournalMutation.Builder(JOURNAL_NAME)
-                                                                  .append(DATA_0)
-                                                                  .append(DATA_1)
-                                                                  .copy(JOURNAL_COPY_NAME)
-                                                                  .build());
+        CommitResult commitResult = mJournalStorage.commit(new JournalMutation.Builder(JOURNAL_NAME)
+                                                                   .append(DATA_0)
+                                                                   .append(DATA_1)
+                                                                   .copy(JOURNAL_COPY_NAME)
+                                                                   .build());
         assertThat(commitResult).isEqualTo(CommitResult.SUCCESS);
 
         // Delete all journals
-        commitResult = journalStorage.deleteAll();
+        commitResult = mJournalStorage.deleteAll();
         assertThat(commitResult).isEqualTo(CommitResult.SUCCESS);
 
         // Try to read the deleted journals
-        Result<Boolean> result = journalStorage.exists(JOURNAL_NAME);
+        Result<Boolean> result = mJournalStorage.exists(JOURNAL_NAME);
         Boolean input = result.getValue();
         assertThat(input).isFalse();
 
-        result = journalStorage.exists(JOURNAL_COPY_NAME);
+        result = mJournalStorage.exists(JOURNAL_COPY_NAME);
         input = result.getValue();
         assertThat(input).isFalse();
     }
@@ -129,18 +129,18 @@
     @Test
     public void exists() {
         // Write some data.
-        CommitResult commitResult = journalStorage.commit(
+        CommitResult commitResult = mJournalStorage.commit(
                 new JournalMutation.Builder(JOURNAL_NAME).append(DATA_0).append(DATA_1).build());
         assertThat(commitResult).isEqualTo(CommitResult.SUCCESS);
 
-        Result<Boolean> result = journalStorage.exists(JOURNAL_NAME);
+        Result<Boolean> result = mJournalStorage.exists(JOURNAL_NAME);
         Boolean input = result.getValue();
         assertThat(input).isTrue();
     }
 
     @Test
     public void exists_doesNotExist() {
-        Result<Boolean> result = journalStorage.exists(JOURNAL_NAME);
+        Result<Boolean> result = mJournalStorage.exists(JOURNAL_NAME);
         Boolean input = result.getValue();
         assertThat(input).isFalse();
     }
@@ -148,11 +148,11 @@
     @Test
     public void getAllJournals_singleJournal() {
         // Write some data.
-        CommitResult commitResult = journalStorage.commit(
+        CommitResult commitResult = mJournalStorage.commit(
                 new JournalMutation.Builder(JOURNAL_NAME).append(DATA_0).append(DATA_1).build());
         assertThat(commitResult).isEqualTo(CommitResult.SUCCESS);
 
-        Result<List<String>> result = journalStorage.getAllJournals();
+        Result<List<String>> result = mJournalStorage.getAllJournals();
         List<String> input = result.getValue();
         assertThat(input).hasSize(1);
         assertThat(input).contains(JOURNAL_NAME);
@@ -161,14 +161,14 @@
     @Test
     public void getAllJournals_multipleJournals() {
         // Write some data.
-        CommitResult commitResult = journalStorage.commit(new JournalMutation.Builder(JOURNAL_NAME)
-                                                                  .append(DATA_0)
-                                                                  .append(DATA_1)
-                                                                  .copy(JOURNAL_COPY_NAME)
-                                                                  .build());
+        CommitResult commitResult = mJournalStorage.commit(new JournalMutation.Builder(JOURNAL_NAME)
+                                                                   .append(DATA_0)
+                                                                   .append(DATA_1)
+                                                                   .copy(JOURNAL_COPY_NAME)
+                                                                   .build());
         assertThat(commitResult).isEqualTo(CommitResult.SUCCESS);
 
-        Result<List<String>> result = journalStorage.getAllJournals();
+        Result<List<String>> result = mJournalStorage.getAllJournals();
         List<String> input = result.getValue();
         assertThat(input).hasSize(2);
         assertThat(input).contains(JOURNAL_NAME);
@@ -176,7 +176,7 @@
     }
 
     @Test
-    public void StreamLocalAction_roundTrip() {
+    public void streamLocalAction_roundTrip() {
         // Write a Stream action with known breaking data ([INTERNAL LINK])
         StreamLocalAction action =
                 StreamLocalAction.newBuilder()
@@ -184,12 +184,12 @@
                         .setAction(1)
                         .setFeatureContentId("FEATURE::stories.f::5726498306727238903")
                         .build();
-        CommitResult commitResult = journalStorage.commit(
+        CommitResult commitResult = mJournalStorage.commit(
                 new JournalMutation.Builder(JOURNAL_NAME).append(action.toByteArray()).build());
         assertThat(commitResult).isEqualTo(CommitResult.SUCCESS);
 
         // Ensure that it can be parsed back correctly
-        Result<List<byte[]>> result = journalStorage.read(JOURNAL_NAME);
+        Result<List<byte[]>> result = mJournalStorage.read(JOURNAL_NAME);
         List<byte[]> bytes = result.getValue();
         assertThat(bytes).hasSize(1);
         StreamLocalAction parsedAction = null;
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/host/offlineindicator/FakeOfflineIndicatorApi.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/host/offlineindicator/FakeOfflineIndicatorApi.java
index cf245fa0..4b4390f 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/host/offlineindicator/FakeOfflineIndicatorApi.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/host/offlineindicator/FakeOfflineIndicatorApi.java
@@ -15,12 +15,12 @@
 
 /** Fake used for tests using the {@link OfflineIndicatorApi}. */
 public class FakeOfflineIndicatorApi implements OfflineIndicatorApi {
-    private final Set<String> offlineUrls;
-    private final Set<OfflineStatusListener> listeners;
+    private final Set<String> mOfflineUrls;
+    private final Set<OfflineStatusListener> mListeners;
 
     private FakeOfflineIndicatorApi(String[] urls) {
-        offlineUrls = new HashSet<>(Arrays.asList(urls));
-        listeners = new HashSet<>();
+        mOfflineUrls = new HashSet<>(Arrays.asList(urls));
+        mListeners = new HashSet<>();
     }
 
     public static FakeOfflineIndicatorApi createWithOfflineUrls(String... urls) {
@@ -34,7 +34,7 @@
     @Override
     public void getOfflineStatus(
             List<String> urlsToRetrieve, Consumer<List<String>> urlListConsumer) {
-        HashSet<String> copiedHashSet = new HashSet<>(offlineUrls);
+        HashSet<String> copiedHashSet = new HashSet<>(mOfflineUrls);
         copiedHashSet.retainAll(urlsToRetrieve);
 
         urlListConsumer.accept(new ArrayList<>(copiedHashSet));
@@ -42,12 +42,12 @@
 
     @Override
     public void addOfflineStatusListener(OfflineStatusListener offlineStatusListener) {
-        listeners.add(offlineStatusListener);
+        mListeners.add(offlineStatusListener);
     }
 
     @Override
     public void removeOfflineStatusListener(OfflineStatusListener offlineStatusListener) {
-        listeners.remove(offlineStatusListener);
+        mListeners.remove(offlineStatusListener);
     }
 
     /**
@@ -55,13 +55,13 @@
      * observers.
      */
     public void setOfflineStatus(String url, boolean isAvailable) {
-        boolean statusChanged = isAvailable ? offlineUrls.add(url) : offlineUrls.remove(url);
+        boolean statusChanged = isAvailable ? mOfflineUrls.add(url) : mOfflineUrls.remove(url);
 
         if (!statusChanged) {
             return;
         }
 
-        for (OfflineStatusListener listener : listeners) {
+        for (OfflineStatusListener listener : mListeners) {
             listener.updateOfflineStatus(url, isAvailable);
         }
     }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/host/scheduler/FakeSchedulerApi.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/host/scheduler/FakeSchedulerApi.java
index 8ee8533f..0e9806d 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/host/scheduler/FakeSchedulerApi.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/host/scheduler/FakeSchedulerApi.java
@@ -9,12 +9,12 @@
 
 /** Fake implementation of {@link SchedulerApi}. */
 public final class FakeSchedulerApi implements SchedulerApi {
-    private final ThreadUtils threadUtils;
+    private final ThreadUtils mThreadUtils;
     @RequestBehavior
-    private int requestBehavior = RequestBehavior.NO_REQUEST_WITH_CONTENT;
+    private int mRequestBehavior = RequestBehavior.NO_REQUEST_WITH_CONTENT;
 
     public FakeSchedulerApi(ThreadUtils threadUtils) {
-        this.threadUtils = threadUtils;
+        this.mThreadUtils = threadUtils;
     }
 
     @Override
@@ -26,13 +26,13 @@
     @Override
     @RequestBehavior
     public int shouldSessionRequestData(SessionState sessionState) {
-        threadUtils.checkMainThread();
-        return requestBehavior;
+        mThreadUtils.checkMainThread();
+        return mRequestBehavior;
     }
 
     /** Sets the result returned from {@link shouldSessionRequestData( SessionState )}. */
     public FakeSchedulerApi setRequestBehavior(@RequestBehavior int requestBehavior) {
-        this.requestBehavior = requestBehavior;
+        this.mRequestBehavior = requestBehavior;
         return this;
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/host/stream/FakeCardConfiguration.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/host/stream/FakeCardConfiguration.java
index ae29a9a..a9c3814 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/host/stream/FakeCardConfiguration.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/host/stream/FakeCardConfiguration.java
@@ -14,9 +14,9 @@
 public class FakeCardConfiguration implements CardConfiguration {
     private static final ColorDrawable COLOR_DRAWABLE = new ColorDrawable(Color.RED);
 
-    private int bottomMargin = 1;
-    private int startMargin = 2;
-    private int endMargin = 3;
+    private int mBottomMargin = 1;
+    private int mStartMargin = 2;
+    private int mEndMargin = 3;
 
     @Override
     public int getDefaultCornerRadius() {
@@ -30,28 +30,28 @@
 
     @Override
     public int getCardBottomMargin() {
-        return bottomMargin;
+        return mBottomMargin;
     }
 
     @Override
     public int getCardStartMargin() {
-        return startMargin;
+        return mStartMargin;
     }
 
     @Override
     public int getCardEndMargin() {
-        return endMargin;
+        return mEndMargin;
     }
 
     public void setCardStartMargin(int cardStartMargin) {
-        this.startMargin = cardStartMargin;
+        this.mStartMargin = cardStartMargin;
     }
 
     public void setCardEndMargin(int cardEndMargin) {
-        this.endMargin = cardEndMargin;
+        this.mEndMargin = cardEndMargin;
     }
 
     public void setCardBottomMargin(int cardBottomMargin) {
-        this.bottomMargin = cardBottomMargin;
+        this.mBottomMargin = cardBottomMargin;
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/host/stream/FakeTooltipSupportedApi.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/host/stream/FakeTooltipSupportedApi.java
index f99e0ac..d0d7582 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/host/stream/FakeTooltipSupportedApi.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/host/stream/FakeTooltipSupportedApi.java
@@ -13,24 +13,24 @@
 
 /** Fake implementation of {@link TooltipSupportedApi}. */
 public final class FakeTooltipSupportedApi implements TooltipSupportedApi {
-    private final ArrayList<String> unsupportedFeatures = new ArrayList<>();
-    private final ThreadUtils threadUtils;
-    /*@Nullable*/ private String lastFeatureName;
+    private final ArrayList<String> mUnsupportedFeatures = new ArrayList<>();
+    private final ThreadUtils mThreadUtils;
+    /*@Nullable*/ private String mLastFeatureName;
 
     public FakeTooltipSupportedApi(ThreadUtils threadUtils) {
-        this.threadUtils = threadUtils;
+        this.mThreadUtils = threadUtils;
     }
 
     @Override
     public void wouldTriggerHelpUi(@FeatureName String featureName, Consumer<Boolean> consumer) {
-        threadUtils.checkMainThread();
-        lastFeatureName = featureName;
-        consumer.accept(!unsupportedFeatures.contains(featureName));
+        mThreadUtils.checkMainThread();
+        mLastFeatureName = featureName;
+        consumer.accept(!mUnsupportedFeatures.contains(featureName));
     }
 
     /** Adds an unsupported feature. */
     public FakeTooltipSupportedApi addUnsupportedFeature(String featureName) {
-        unsupportedFeatures.add(featureName);
+        mUnsupportedFeatures.add(featureName);
         return this;
     }
 
@@ -40,6 +40,6 @@
      */
     /*@Nullable*/
     public String getLatestFeatureName() {
-        return lastFeatureName;
+        return mLastFeatureName;
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/modelprovider/FakeModelChild.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/modelprovider/FakeModelChild.java
index 3af2800..f824491c 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/modelprovider/FakeModelChild.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/modelprovider/FakeModelChild.java
@@ -13,11 +13,11 @@
 
 /** Fake for {@link com.google.android.libraries.feed.api.internal.modelprovider.ModelChild}. */
 public class FakeModelChild implements ModelChild {
-    private final String contentId;
+    private final String mContentId;
 
-    private final /*@Nullable*/ ModelFeature modelFeature;
-    private final /*@Nullable*/ ModelToken modelToken;
-    private final /*@Nullable*/ String parentId;
+    private final /*@Nullable*/ ModelFeature mModelFeature;
+    private final /*@Nullable*/ ModelToken mModelToken;
+    private final /*@Nullable*/ String mParentId;
 
     public static Builder newBuilder() {
         return new Builder();
@@ -29,19 +29,19 @@
             /*@Nullable*/ String parentId) {
         // A ModelChild can't represent both a ModelFeature and a ModelToken.
         checkState(modelFeature == null || modelToken == null);
-        this.contentId = contentId;
-        this.modelFeature = modelFeature;
-        this.modelToken = modelToken;
-        this.parentId = parentId;
+        this.mContentId = contentId;
+        this.mModelFeature = modelFeature;
+        this.mModelToken = modelToken;
+        this.mParentId = parentId;
     }
 
     @Override
     public @Type int getType() {
-        if (modelFeature != null) {
+        if (mModelFeature != null) {
             return Type.FEATURE;
         }
 
-        if (modelToken != null) {
+        if (mModelToken != null) {
             return Type.TOKEN;
         }
 
@@ -50,69 +50,69 @@
 
     @Override
     public String getContentId() {
-        return contentId;
+        return mContentId;
     }
 
     @Override
     public boolean hasParentId() {
-        return parentId != null;
+        return mParentId != null;
     }
 
     @Override
     public /*@Nullable*/ String getParentId() {
-        return parentId;
+        return mParentId;
     }
 
     @Override
     public ModelFeature getModelFeature() {
-        checkState(modelFeature != null,
+        checkState(mModelFeature != null,
                 "Must call setModelFeature on builder to have a ModelFeature");
 
         // checkNotNull for nullness checker, if modelFeature is null, the checkState above will
         // fail.
-        return checkNotNull(modelFeature);
+        return checkNotNull(mModelFeature);
     }
 
     @Override
     public ModelToken getModelToken() {
-        checkState(modelToken != null, "Must call setModelToken on builder to have a ModelToken");
+        checkState(mModelToken != null, "Must call setModelToken on builder to have a ModelToken");
 
         // checkNotNull for nullness checker, if modelToken is null, the checkState above will fail.
-        return checkNotNull(modelToken);
+        return checkNotNull(mModelToken);
     }
 
     public static class Builder {
-        private String contentId = "";
-        private /*@Nullable*/ ModelFeature modelFeature;
-        private /*@Nullable*/ ModelToken modelToken;
-        private /*@Nullable*/ String parentId;
+        private String mContentId = "";
+        private /*@Nullable*/ ModelFeature mModelFeature;
+        private /*@Nullable*/ ModelToken mModelToken;
+        private /*@Nullable*/ String mParentId;
 
         private Builder() {}
 
         public Builder setContentId(String contentId) {
-            this.contentId = contentId;
+            this.mContentId = contentId;
             return this;
         }
 
         public Builder setParentId(/*@Nullable*/ String parentId) {
-            this.parentId = parentId;
+            this.mParentId = parentId;
             return this;
         }
 
         public Builder setModelFeature(ModelFeature modelFeature) {
-            checkState(modelToken == null);
-            this.modelFeature = modelFeature;
+            checkState(mModelToken == null);
+            this.mModelFeature = modelFeature;
             return this;
         }
 
         public Builder setModelToken(ModelToken modelToken) {
-            checkState(modelFeature == null);
-            this.modelToken = modelToken;
+            checkState(mModelFeature == null);
+            this.mModelToken = modelToken;
             return this;
         }
 
         public FakeModelChild build() {
-            return new FakeModelChild(contentId, modelFeature, modelToken, parentId);
+            return new FakeModelChild(mContentId, mModelFeature, mModelToken, mParentId);
         }
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/modelprovider/FakeModelCursor.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/modelprovider/FakeModelCursor.java
index 57de3f4..907051a 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/modelprovider/FakeModelCursor.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/modelprovider/FakeModelCursor.java
@@ -20,12 +20,12 @@
 
 /** A fake {@link ModelCursor} for testing. */
 public class FakeModelCursor implements ModelCursor {
-    private List<ModelChild> modelChildren;
-    private int currentIndex;
+    private List<ModelChild> mModelChildren;
+    private int mCurrentIndex;
 
     public FakeModelCursor(List<ModelChild> modelChildren) {
-        currentIndex = 0;
-        this.modelChildren = modelChildren;
+        mCurrentIndex = 0;
+        this.mModelChildren = modelChildren;
     }
 
     public static FakeModelCursor emptyCursor() {
@@ -37,7 +37,7 @@
     }
 
     public void setModelChildren(List<ModelChild> modelChildren) {
-        this.modelChildren = modelChildren;
+        this.mModelChildren = modelChildren;
     }
 
     @Override
@@ -46,24 +46,24 @@
         if (isAtEnd()) {
             return null;
         }
-        return modelChildren.get(currentIndex++);
+        return mModelChildren.get(mCurrentIndex++);
     }
 
     @Override
     public boolean isAtEnd() {
-        return currentIndex >= modelChildren.size();
+        return mCurrentIndex >= mModelChildren.size();
     }
 
     public ModelChild getChildAt(int i) {
-        return modelChildren.get(i);
+        return mModelChildren.get(i);
     }
 
     public List<ModelChild> getModelChildren() {
-        return ImmutableList.copyOf(modelChildren);
+        return ImmutableList.copyOf(mModelChildren);
     }
 
     public static class Builder {
-        final List<ModelChild> cursorChildren = new ArrayList<>();
+        final List<ModelChild> mCursorChildren = new ArrayList<>();
 
         private Builder() {}
 
@@ -82,7 +82,7 @@
         }
 
         public Builder addChild(ModelChild child) {
-            cursorChildren.add(child);
+            mCursorChildren.add(child);
             return this;
         }
 
@@ -118,7 +118,7 @@
         public Builder addChildWithModelFeature(FakeModelFeature modelFeature) {
             ModelChild cardChild =
                     FakeModelChild.newBuilder().setModelFeature(modelFeature).build();
-            cursorChildren.add(cardChild);
+            mCursorChildren.add(cardChild);
             return this;
         }
 
@@ -128,7 +128,7 @@
                                            .setModelFeature(modelFeature)
                                            .setContentId(contentId)
                                            .build();
-            cursorChildren.add(cardChild);
+            mCursorChildren.add(cardChild);
             return this;
         }
 
@@ -154,7 +154,7 @@
         public Builder addToken(ModelToken token) {
             ModelChild tokenChild = FakeModelChild.newBuilder().setModelToken(token).build();
 
-            cursorChildren.add(tokenChild);
+            mCursorChildren.add(tokenChild);
 
             return this;
         }
@@ -167,7 +167,7 @@
                                                    .build())
                             .setContentId(contentId)
                             .build();
-            cursorChildren.add(tokenChild);
+            mCursorChildren.add(tokenChild);
             return this;
         }
 
@@ -176,7 +176,7 @@
         }
 
         public FakeModelCursor build() {
-            return new FakeModelCursor(cursorChildren);
+            return new FakeModelCursor(mCursorChildren);
         }
     }
 
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/modelprovider/FakeModelFeature.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/modelprovider/FakeModelFeature.java
index 1f90d3a8..114bc24 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/modelprovider/FakeModelFeature.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/modelprovider/FakeModelFeature.java
@@ -15,13 +15,13 @@
 
 /** Fake for {@link ModelFeature}. */
 public class FakeModelFeature implements ModelFeature {
-    private final StreamFeature streamFeature;
-    private final ModelCursor modelCursor;
-    private final HashSet<FeatureChangeObserver> observers = new HashSet<>();
+    private final StreamFeature mStreamFeature;
+    private final ModelCursor mModelCursor;
+    private final HashSet<FeatureChangeObserver> mObservers = new HashSet<>();
 
     private FakeModelFeature(ModelCursor modelCursor, StreamFeature streamFeature) {
-        this.modelCursor = modelCursor;
-        this.streamFeature = streamFeature;
+        this.mModelCursor = modelCursor;
+        this.mStreamFeature = streamFeature;
     }
 
     public static Builder newBuilder() {
@@ -29,23 +29,23 @@
     }
 
     public HashSet<FeatureChangeObserver> getObservers() {
-        return observers;
+        return mObservers;
     }
 
     public void triggerOnChange(FeatureChange change) {
-        for (FeatureChangeObserver observer : observers) {
+        for (FeatureChangeObserver observer : mObservers) {
             observer.onChange(change);
         }
     }
 
     @Override
     public StreamFeature getStreamFeature() {
-        return streamFeature;
+        return mStreamFeature;
     }
 
     @Override
     public ModelCursor getCursor() {
-        return modelCursor;
+        return mModelCursor;
     }
 
     @Override
@@ -56,32 +56,32 @@
 
     @Override
     public void registerObserver(FeatureChangeObserver observer) {
-        this.observers.add(observer);
+        this.mObservers.add(observer);
     }
 
     @Override
     public void unregisterObserver(FeatureChangeObserver observer) {
-        this.observers.remove(observer);
+        this.mObservers.remove(observer);
     }
 
     public static class Builder {
-        private ModelCursor modelCursor = new FakeModelCursor(new ArrayList<>());
-        private StreamFeature streamFeature = StreamFeature.getDefaultInstance();
+        private ModelCursor mModelCursor = new FakeModelCursor(new ArrayList<>());
+        private StreamFeature mStreamFeature = StreamFeature.getDefaultInstance();
 
         private Builder() {}
 
         public Builder setModelCursor(ModelCursor modelCursor) {
-            this.modelCursor = modelCursor;
+            this.mModelCursor = modelCursor;
             return this;
         }
 
         public Builder setStreamFeature(StreamFeature streamFeature) {
-            this.streamFeature = streamFeature;
+            this.mStreamFeature = streamFeature;
             return this;
         }
 
         public FakeModelFeature build() {
-            return new FakeModelFeature(modelCursor, streamFeature);
+            return new FakeModelFeature(mModelCursor, mStreamFeature);
         }
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/modelprovider/FakeModelMutation.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/modelprovider/FakeModelMutation.java
index d3cc2be09..071ebe86 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/modelprovider/FakeModelMutation.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/modelprovider/FakeModelMutation.java
@@ -13,33 +13,33 @@
 
 /** Fake ModelMutation for tests. */
 public final class FakeModelMutation implements ModelMutation {
-    public final List<StreamStructure> addedChildren = new ArrayList<>();
-    public final List<StreamStructure> removedChildren = new ArrayList<>();
-    public final List<StreamStructure> updateChildren = new ArrayList<>();
-    public MutationContext mutationContext;
-    boolean commitCalled;
+    public final List<StreamStructure> mAddedChildren = new ArrayList<>();
+    public final List<StreamStructure> mRemovedChildren = new ArrayList<>();
+    public final List<StreamStructure> mUpdateChildren = new ArrayList<>();
+    public MutationContext mMutationContext;
+    boolean mCommitCalled;
 
     @Override
     public ModelMutation addChild(StreamStructure streamStructure) {
-        addedChildren.add(streamStructure);
+        mAddedChildren.add(streamStructure);
         return this;
     }
 
     @Override
     public ModelMutation removeChild(StreamStructure streamStructure) {
-        removedChildren.add(streamStructure);
+        mRemovedChildren.add(streamStructure);
         return this;
     }
 
     @Override
     public ModelMutation updateChild(StreamStructure streamStructure) {
-        updateChildren.add(streamStructure);
+        mUpdateChildren.add(streamStructure);
         return this;
     }
 
     @Override
     public ModelMutation setMutationContext(MutationContext mutationContext) {
-        this.mutationContext = mutationContext;
+        this.mMutationContext = mutationContext;
         return this;
     }
 
@@ -55,20 +55,20 @@
 
     @Override
     public void commit() {
-        commitCalled = true;
+        mCommitCalled = true;
     }
 
     /** Clears the commit. */
     public FakeModelMutation clearCommit() {
-        commitCalled = false;
-        addedChildren.clear();
-        removedChildren.clear();
-        updateChildren.clear();
+        mCommitCalled = false;
+        mAddedChildren.clear();
+        mRemovedChildren.clear();
+        mUpdateChildren.clear();
         return this;
     }
 
     /** Returns whether this mutation was committed. */
     public boolean isCommitted() {
-        return commitCalled;
+        return mCommitCalled;
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/modelprovider/FakeModelProvider.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/modelprovider/FakeModelProvider.java
index 9c8ef442..c10b1016 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/modelprovider/FakeModelProvider.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/modelprovider/FakeModelProvider.java
@@ -27,32 +27,32 @@
  * needed.
  */
 public class FakeModelProvider implements ModelProvider {
-    private final Set<ModelProviderObserver> observers = new HashSet<>();
-    private ModelFeature rootFeature;
-    private boolean wasRefreshTriggered;
-    private boolean tokensEnabled = true;
-    /*@Nullable*/ private String sessionId;
+    private final Set<ModelProviderObserver> mObservers = new HashSet<>();
+    private ModelFeature mRootFeature;
+    private boolean mWasRefreshTriggered;
+    private boolean mTokensEnabled = true;
+    /*@Nullable*/ private String mSessionId;
     @RequestReason
-    private int lastRequestReason = RequestReason.UNKNOWN;
-    /*@Nullable*/ private ModelFeature immediateSessionStartModel;
-    /*@Nullable*/ private UiContext unusedTriggerRefreshUiContext;
-    private FakeModelMutation latestModelMutation = new FakeModelMutation();
-    private boolean isInvalidated;
+    private int mLastRequestReason = RequestReason.UNKNOWN;
+    /*@Nullable*/ private ModelFeature mImmediateSessionStartModel;
+    /*@Nullable*/ private UiContext mUnusedTriggerRefreshUiContext;
+    private FakeModelMutation mLatestModelMutation = new FakeModelMutation();
+    private boolean mIsInvalidated;
 
     @Override
     public ModelMutation edit() {
-        latestModelMutation = new FakeModelMutation();
-        return latestModelMutation;
+        mLatestModelMutation = new FakeModelMutation();
+        return mLatestModelMutation;
     }
 
     @Override
     public void invalidate() {
-        isInvalidated = true;
+        mIsInvalidated = true;
     }
 
     @Override
     public void invalidate(UiContext uiContext) {
-        isInvalidated = true;
+        mIsInvalidated = true;
     }
 
     @Override
@@ -64,7 +64,7 @@
     @Override
     /*@Nullable*/
     public ModelFeature getRootFeature() {
-        return rootFeature;
+        return mRootFeature;
     }
 
     @Override
@@ -81,7 +81,7 @@
 
     @Override
     public boolean handleToken(ModelToken modelToken) {
-        return tokensEnabled;
+        return mTokensEnabled;
     }
 
     @Override
@@ -91,9 +91,9 @@
 
     @Override
     public void triggerRefresh(@RequestReason int requestReason, UiContext uiContext) {
-        wasRefreshTriggered = true;
-        lastRequestReason = requestReason;
-        unusedTriggerRefreshUiContext = uiContext;
+        mWasRefreshTriggered = true;
+        mLastRequestReason = requestReason;
+        mUnusedTriggerRefreshUiContext = uiContext;
     }
 
     @Override
@@ -104,17 +104,17 @@
     @Override
     /*@Nullable*/
     public String getSessionId() {
-        return sessionId;
+        return mSessionId;
     }
 
     @Override
     public List<ModelChild> getAllRootChildren() {
         ImmutableList.Builder<ModelChild> listBuilder = ImmutableList.builder();
-        if (rootFeature == null) {
+        if (mRootFeature == null) {
             return listBuilder.build();
         }
 
-        ModelCursor cursor = rootFeature.getCursor();
+        ModelCursor cursor = mRootFeature.getCursor();
         ModelChild child;
         while ((child = cursor.getNextItem()) != null) {
             listBuilder.add(child);
@@ -127,17 +127,17 @@
 
     @Override
     public void registerObserver(ModelProviderObserver observer) {
-        if (immediateSessionStartModel != null) {
-            this.rootFeature = immediateSessionStartModel;
+        if (mImmediateSessionStartModel != null) {
+            this.mRootFeature = mImmediateSessionStartModel;
             observer.onSessionStart(UiContext.getDefaultInstance());
         }
 
-        observers.add(observer);
+        mObservers.add(observer);
     }
 
     @Override
     public void unregisterObserver(ModelProviderObserver observer) {
-        observers.remove(observer);
+        mObservers.remove(observer);
     }
 
     public void triggerOnSessionStart(ModelFeature rootFeature) {
@@ -145,8 +145,8 @@
     }
 
     public void triggerOnSessionStart(ModelFeature rootFeature, UiContext uiContext) {
-        this.rootFeature = rootFeature;
-        for (ModelProviderObserver observer : observers) {
+        this.mRootFeature = rootFeature;
+        for (ModelProviderObserver observer : mObservers) {
             observer.onSessionStart(uiContext);
         }
     }
@@ -156,49 +156,49 @@
     }
 
     public void triggerOnSessionFinished(UiContext uiContext) {
-        for (ModelProviderObserver observer : observers) {
+        for (ModelProviderObserver observer : mObservers) {
             observer.onSessionFinished(uiContext);
         }
     }
 
     public void triggerOnError(ModelError modelError) {
-        for (ModelProviderObserver observer : observers) {
+        for (ModelProviderObserver observer : mObservers) {
             observer.onError(modelError);
         }
     }
 
     public boolean wasRefreshTriggered() {
-        return wasRefreshTriggered;
+        return mWasRefreshTriggered;
     }
 
     public Set<ModelProviderObserver> getObservers() {
-        return observers;
+        return mObservers;
     }
 
     public void setSessionId(String sessionId) {
-        this.sessionId = sessionId;
+        this.mSessionId = sessionId;
     }
 
     @RequestReason
     public int getLastRequestReason() {
-        return lastRequestReason;
+        return mLastRequestReason;
     }
 
     public void triggerOnSessionStartImmediately(ModelFeature modelFeature) {
-        immediateSessionStartModel = modelFeature;
+        mImmediateSessionStartModel = modelFeature;
     }
 
     public void setTokensEnabled(boolean value) {
-        tokensEnabled = value;
+        mTokensEnabled = value;
     }
 
     /** Returns the last {@link FakeModelMutation} returned from the {@link edit()} method. */
     public FakeModelMutation getLatestModelMutation() {
-        return latestModelMutation;
+        return mLatestModelMutation;
     }
 
     /** Returns whether this {@link ModelProvider} has been invalidated. */
     public boolean isInvalidated() {
-        return isInvalidated;
+        return mIsInvalidated;
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/modelprovider/FakeModelProviderFactory.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/modelprovider/FakeModelProviderFactory.java
index 5acb4272..46bd484 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/modelprovider/FakeModelProviderFactory.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/modelprovider/FakeModelProviderFactory.java
@@ -16,44 +16,44 @@
  * needed.
  */
 public class FakeModelProviderFactory implements ModelProviderFactory {
-    private FakeModelProvider modelProvider;
-    private String createSessionId;
-    /*@Nullable*/ private ViewDepthProvider viewDepthProvider;
+    private FakeModelProvider mModelProvider;
+    private String mCreateSessionId;
+    /*@Nullable*/ private ViewDepthProvider mViewDepthProvider;
 
     @Override
     public ModelProvider create(String sessionId, UiContext uiContext) {
-        this.modelProvider = new FakeModelProvider();
-        this.createSessionId = sessionId;
-        return modelProvider;
+        this.mModelProvider = new FakeModelProvider();
+        this.mCreateSessionId = sessionId;
+        return mModelProvider;
     }
 
     @Override
     public ModelProvider createNew(
             /*@Nullable*/ ViewDepthProvider viewDepthProvider, UiContext uiContext) {
-        this.viewDepthProvider = viewDepthProvider;
-        this.modelProvider = new FakeModelProvider();
-        return modelProvider;
+        this.mViewDepthProvider = viewDepthProvider;
+        this.mModelProvider = new FakeModelProvider();
+        return mModelProvider;
     }
 
     @Override
     public ModelProvider createNew(
             /*@Nullable*/ ViewDepthProvider viewDepthProvider,
             /*@Nullable*/ Predicate<StreamStructure> filterPredicate, UiContext uiContext) {
-        this.viewDepthProvider = viewDepthProvider;
-        this.modelProvider = new FakeModelProvider();
-        return modelProvider;
+        this.mViewDepthProvider = viewDepthProvider;
+        this.mModelProvider = new FakeModelProvider();
+        return mModelProvider;
     }
 
     public FakeModelProvider getLatestModelProvider() {
-        return modelProvider;
+        return mModelProvider;
     }
 
     public String getLatestCreateSessionId() {
-        return createSessionId;
+        return mCreateSessionId;
     }
 
     /*@Nullable*/
     public ViewDepthProvider getViewDepthProvider() {
-        return viewDepthProvider;
+        return mViewDepthProvider;
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/modelprovider/FakeModelToken.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/modelprovider/FakeModelToken.java
index 4824eb0..7edfcb2 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/modelprovider/FakeModelToken.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/modelprovider/FakeModelToken.java
@@ -12,13 +12,13 @@
 
 /** Fake for {@link ModelToken}. */
 public class FakeModelToken implements ModelToken {
-    private final StreamToken streamToken;
-    private final boolean isSynthetic;
-    private final HashSet<TokenCompletedObserver> observers = new HashSet<>();
+    private final StreamToken mStreamToken;
+    private final boolean mIsSynthetic;
+    private final HashSet<TokenCompletedObserver> mObservers = new HashSet<>();
 
     private FakeModelToken(StreamToken streamToken, boolean isSynthetic) {
-        this.streamToken = streamToken;
-        this.isSynthetic = isSynthetic;
+        this.mStreamToken = streamToken;
+        this.mIsSynthetic = isSynthetic;
     }
 
     public static Builder newBuilder() {
@@ -26,47 +26,47 @@
     }
 
     public HashSet<TokenCompletedObserver> getObservers() {
-        return observers;
+        return mObservers;
     }
 
     @Override
     public StreamToken getStreamToken() {
-        return streamToken;
+        return mStreamToken;
     }
 
     @Override
     public void registerObserver(TokenCompletedObserver observer) {
-        observers.add(observer);
+        mObservers.add(observer);
     }
 
     @Override
     public void unregisterObserver(TokenCompletedObserver observer) {
-        observers.remove(observer);
+        mObservers.remove(observer);
     }
 
     @Override
     public boolean isSynthetic() {
-        return isSynthetic;
+        return mIsSynthetic;
     }
 
     public static class Builder {
-        private StreamToken streamToken = StreamToken.getDefaultInstance();
-        private boolean isSynthetic;
+        private StreamToken mStreamToken = StreamToken.getDefaultInstance();
+        private boolean mIsSynthetic;
 
         private Builder() {}
 
         public Builder setStreamToken(StreamToken streamToken) {
-            this.streamToken = streamToken;
+            this.mStreamToken = streamToken;
             return this;
         }
 
         public Builder setIsSynthetic(boolean isSynthetic) {
-            this.isSynthetic = isSynthetic;
+            this.mIsSynthetic = isSynthetic;
             return this;
         }
 
         public FakeModelToken build() {
-            return new FakeModelToken(streamToken, isSynthetic);
+            return new FakeModelToken(mStreamToken, mIsSynthetic);
         }
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/modelprovider/FakeViewDepthProvider.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/modelprovider/FakeViewDepthProvider.java
index 4d3a6dd..52b67943 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/modelprovider/FakeViewDepthProvider.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/modelprovider/FakeViewDepthProvider.java
@@ -8,18 +8,18 @@
 
 /** Fake implementation of {@link ViewDepthProvider}. */
 public final class FakeViewDepthProvider implements ViewDepthProvider {
-    /*@Nullable*/ private String childViewDepth = null;
+    /*@Nullable*/ private String mChildViewDepth = null;
 
     public FakeViewDepthProvider() {}
 
     @Override
     /*@Nullable*/
     public String getChildViewDepth() {
-        return childViewDepth;
+        return mChildViewDepth;
     }
 
     public FakeViewDepthProvider setChildViewDepth(String childViewDepth) {
-        this.childViewDepth = childViewDepth;
+        this.mChildViewDepth = childViewDepth;
         return this;
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/modelprovider/FeatureChangeBuilder.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/modelprovider/FeatureChangeBuilder.java
index 962e173f..797e908 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/modelprovider/FeatureChangeBuilder.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/modelprovider/FeatureChangeBuilder.java
@@ -16,16 +16,16 @@
  * instances.
  */
 public class FeatureChangeBuilder {
-    private final List<ModelChild> removedChildren = new ArrayList<>();
-    private final List<ModelChild> appendedChildren = new ArrayList<>();
+    private final List<ModelChild> mRemovedChildren = new ArrayList<>();
+    private final List<ModelChild> mAppendedChildren = new ArrayList<>();
 
     public FeatureChangeBuilder addChildForRemoval(ModelChild modelChild) {
-        removedChildren.add(modelChild);
+        mRemovedChildren.add(modelChild);
         return this;
     }
 
     public FeatureChangeBuilder addChildForAppending(ModelChild modelChild) {
-        appendedChildren.add(modelChild);
+        mAppendedChildren.add(modelChild);
         return this;
     }
 
@@ -51,12 +51,12 @@
                 return new ChildChanges() {
                     @Override
                     public List<ModelChild> getAppendedChildren() {
-                        return appendedChildren;
+                        return mAppendedChildren;
                     }
 
                     @Override
                     public List<ModelChild> getRemovedChildren() {
-                        return removedChildren;
+                        return mRemovedChildren;
                     }
                 };
             }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/network/FakeNetworkClient.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/network/FakeNetworkClient.java
index 9bb47ff..cbbfbdb4 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/network/FakeNetworkClient.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/network/FakeNetworkClient.java
@@ -14,28 +14,28 @@
 
 /** Fake implementation of {@link NetworkClient}. */
 public final class FakeNetworkClient implements NetworkClient {
-    private final FakeThreadUtils fakeThreadUtils;
-    private final ArrayList<HttpResponse> responses = new ArrayList<>();
-    /*@Nullable*/ private HttpRequest request;
-    /*@Nullable*/ private HttpResponse defaultResponse;
+    private final FakeThreadUtils mFakeThreadUtils;
+    private final ArrayList<HttpResponse> mResponses = new ArrayList<>();
+    /*@Nullable*/ private HttpRequest mRequest;
+    /*@Nullable*/ private HttpResponse mDefaultResponse;
 
     public FakeNetworkClient(FakeThreadUtils fakeThreadUtils) {
-        this.fakeThreadUtils = fakeThreadUtils;
+        this.mFakeThreadUtils = fakeThreadUtils;
     }
 
     @Override
     public void send(HttpRequest request, Consumer<HttpResponse> responseConsumer) {
-        this.request = request;
-        boolean policy = fakeThreadUtils.enforceMainThread(true);
+        this.mRequest = request;
+        boolean policy = mFakeThreadUtils.enforceMainThread(true);
         try {
-            if (responses.isEmpty() && defaultResponse != null) {
-                responseConsumer.accept(defaultResponse);
+            if (mResponses.isEmpty() && mDefaultResponse != null) {
+                responseConsumer.accept(mDefaultResponse);
                 return;
             }
 
-            responseConsumer.accept(responses.remove(0));
+            responseConsumer.accept(mResponses.remove(0));
         } finally {
-            fakeThreadUtils.enforceMainThread(policy);
+            mFakeThreadUtils.enforceMainThread(policy);
         }
     }
 
@@ -44,19 +44,19 @@
 
     /** Adds a response to the {@link FakeNetworkClient} to be returned in order. */
     public FakeNetworkClient addResponse(HttpResponse response) {
-        responses.add(response);
+        mResponses.add(response);
         return this;
     }
 
     /** Sets a default response to use if no other response is available. */
     public FakeNetworkClient setDefaultResponse(HttpResponse response) {
-        defaultResponse = response;
+        mDefaultResponse = response;
         return this;
     }
 
     /** Returns the last {@link HttpRequest} sent. */
     /*@Nullable*/
     public HttpRequest getLatestRequest() {
-        return request;
+        return mRequest;
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/protocoladapter/FakeProtocolAdapter.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/protocoladapter/FakeProtocolAdapter.java
index 5ab31a7c..1b7a0b0 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/protocoladapter/FakeProtocolAdapter.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/protocoladapter/FakeProtocolAdapter.java
@@ -21,12 +21,12 @@
 public final class FakeProtocolAdapter implements ProtocolAdapter {
     private static final String UNMAPPED_CONTENT_ID = "unmapped_content_id";
 
-    private final Map<String, ContentId> contentIds = new HashMap<>();
-    /*@Nullable*/ private Response lastResponse;
+    private final Map<String, ContentId> mContentIds = new HashMap<>();
+    /*@Nullable*/ private Response mLastResponse;
 
     @Override
     public Result<Model> createModel(Response response) {
-        lastResponse = response;
+        mLastResponse = response;
         return Result.success(Model.empty());
     }
 
@@ -37,8 +37,8 @@
 
     @Override
     public String getStreamContentId(ContentId wireContentId) {
-        for (String contentId : contentIds.keySet()) {
-            if (wireContentId.equals(contentIds.get(contentId))) {
+        for (String contentId : mContentIds.keySet()) {
+            if (wireContentId.equals(mContentIds.get(contentId))) {
                 return contentId;
             }
         }
@@ -48,7 +48,7 @@
 
     @Override
     public Result<ContentId> getWireContentId(String contentId) {
-        ContentId wireContentId = contentIds.get(contentId);
+        ContentId wireContentId = mContentIds.get(contentId);
         if (wireContentId != null) {
             return Result.success(wireContentId);
         } else {
@@ -58,13 +58,13 @@
 
     /** Adds a content id mapping to the {@link FakeProtocolAdapter}. */
     public FakeProtocolAdapter addContentId(String contentId, ContentId wireContentId) {
-        contentIds.put(contentId, wireContentId);
+        mContentIds.put(contentId, wireContentId);
         return this;
     }
 
     /** Returns the last response sent into {@link #createModel(Response)}. */
     /*@Nullable*/
     public Response getLastResponse() {
-        return lastResponse;
+        return mLastResponse;
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/requestmanager/FakeActionUploadRequestManager.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/requestmanager/FakeActionUploadRequestManager.java
index 9596d137..163619a3 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/requestmanager/FakeActionUploadRequestManager.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/requestmanager/FakeActionUploadRequestManager.java
@@ -16,23 +16,24 @@
 
 /** Fake implements of {@link ActionUploadRequestManager}. */
 public final class FakeActionUploadRequestManager implements ActionUploadRequestManager {
-    private final FakeThreadUtils fakeThreadUtils;
-    private Result<ConsistencyToken> result = Result.success(ConsistencyToken.getDefaultInstance());
-    /*@Nullable*/ private Set<StreamUploadableAction> actions;
+    private final FakeThreadUtils mFakeThreadUtils;
+    private Result<ConsistencyToken> mResult =
+            Result.success(ConsistencyToken.getDefaultInstance());
+    /*@Nullable*/ private Set<StreamUploadableAction> mActions;
 
     public FakeActionUploadRequestManager(FakeThreadUtils fakeThreadUtils) {
-        this.fakeThreadUtils = fakeThreadUtils;
+        this.mFakeThreadUtils = fakeThreadUtils;
     }
 
     @Override
     public void triggerUploadActions(Set<StreamUploadableAction> actions, ConsistencyToken token,
             Consumer<Result<ConsistencyToken>> consumer) {
-        this.actions = actions;
-        boolean policy = fakeThreadUtils.enforceMainThread(false);
+        this.mActions = actions;
+        boolean policy = mFakeThreadUtils.enforceMainThread(false);
         try {
-            consumer.accept(result);
+            consumer.accept(mResult);
         } finally {
-            fakeThreadUtils.enforceMainThread(policy);
+            mFakeThreadUtils.enforceMainThread(policy);
         }
     }
 
@@ -41,16 +42,16 @@
      * Result.success(ConsistencyToken.getDefaultInstance())}.
      */
     public FakeActionUploadRequestManager setResult(Result<ConsistencyToken> result) {
-        this.result = result;
+        this.mResult = result;
         return this;
     }
 
     /** Returns the last set of actions sent to triggerUploadActions. */
     public Set<StreamUploadableAction> getLatestActions() {
-        if (actions == null) {
+        if (mActions == null) {
             return new HashSet<>();
         }
 
-        return actions;
+        return mActions;
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/requestmanager/FakeFeedRequestManager.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/requestmanager/FakeFeedRequestManager.java
index 56c0e04..8108fd4c0 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/requestmanager/FakeFeedRequestManager.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/requestmanager/FakeFeedRequestManager.java
@@ -28,22 +28,22 @@
  * then returned as a {@link Result} to the {@link Consumer}.
  */
 public class FakeFeedRequestManager implements FeedRequestManager {
-    private final FakeThreadUtils fakeThreadUtils;
-    private final MainThreadRunner mainThreadRunner;
-    private final ProtocolAdapter protocolAdapter;
-    private final Queue<ResponseWithDelay> responses = new ArrayDeque<>();
-    private final TaskQueue taskQueue;
-    /*@Nullable*/ private StreamToken latestStreamToken;
+    private final FakeThreadUtils mFakeThreadUtils;
+    private final MainThreadRunner mMainThreadRunner;
+    private final ProtocolAdapter mProtocolAdapter;
+    private final Queue<ResponseWithDelay> mResponses = new ArrayDeque<>();
+    private final TaskQueue mTaskQueue;
+    /*@Nullable*/ private StreamToken mLatestStreamToken;
     @RequestReason
-    private int latestRequestReason = RequestReason.UNKNOWN;
+    private int mLatestRequestReason = RequestReason.UNKNOWN;
 
     public FakeFeedRequestManager(FakeThreadUtils fakeThreadUtils,
             MainThreadRunner mainThreadRunner, ProtocolAdapter protocolAdapter,
             TaskQueue taskQueue) {
-        this.fakeThreadUtils = fakeThreadUtils;
-        this.mainThreadRunner = mainThreadRunner;
-        this.protocolAdapter = protocolAdapter;
-        this.taskQueue = taskQueue;
+        this.mFakeThreadUtils = fakeThreadUtils;
+        this.mMainThreadRunner = mainThreadRunner;
+        this.mProtocolAdapter = protocolAdapter;
+        this.mTaskQueue = taskQueue;
     }
 
     // TODO: queue responses for action uploads
@@ -54,7 +54,7 @@
 
     /** Adds a Response to the queue with a delay. */
     public FakeFeedRequestManager queueResponse(Response response, long delayMs) {
-        responses.add(new ResponseWithDelay(response, delayMs));
+        mResponses.add(new ResponseWithDelay(response, delayMs));
         return this;
     }
 
@@ -65,16 +65,16 @@
 
     /** Adds an error to the queue with a delay. */
     public FakeFeedRequestManager queueError(long delayMs) {
-        responses.add(new ResponseWithDelay(delayMs));
+        mResponses.add(new ResponseWithDelay(delayMs));
         return this;
     }
 
     @Override
     public void loadMore(
             StreamToken streamToken, ConsistencyToken token, Consumer<Result<Model>> consumer) {
-        fakeThreadUtils.checkNotMainThread();
-        latestStreamToken = streamToken;
-        handleResponseWithDelay(responses.remove(), consumer);
+        mFakeThreadUtils.checkNotMainThread();
+        mLatestStreamToken = streamToken;
+        handleResponseWithDelay(mResponses.remove(), consumer);
     }
 
     @Override
@@ -85,18 +85,18 @@
     @Override
     public void triggerRefresh(
             @RequestReason int reason, ConsistencyToken token, Consumer<Result<Model>> consumer) {
-        latestRequestReason = reason;
-        ResponseWithDelay responseWithDelay = responses.remove();
-        taskQueue.execute(Task.UNKNOWN, TaskType.HEAD_INVALIDATE,
+        mLatestRequestReason = reason;
+        ResponseWithDelay responseWithDelay = mResponses.remove();
+        mTaskQueue.execute(Task.UNKNOWN, TaskType.HEAD_INVALIDATE,
                 () -> { handleResponseWithDelay(responseWithDelay, consumer); });
     }
 
     private void handleResponseWithDelay(
             ResponseWithDelay responseWithDelay, Consumer<Result<Model>> consumer) {
-        if (responseWithDelay.delayMs > 0) {
-            mainThreadRunner.executeWithDelay("FakeFeedRequestManager#consumer", () -> {
+        if (responseWithDelay.mDelayMs > 0) {
+            mMainThreadRunner.executeWithDelay("FakeFeedRequestManager#consumer", () -> {
                 invokeConsumer(responseWithDelay, consumer);
-            }, responseWithDelay.delayMs);
+            }, responseWithDelay.mDelayMs);
         } else {
             invokeConsumer(responseWithDelay, consumer);
         }
@@ -104,19 +104,19 @@
 
     private void invokeConsumer(
             ResponseWithDelay responseWithDelay, Consumer<Result<Model>> consumer) {
-        boolean policy = fakeThreadUtils.enforceMainThread(true);
-        if (responseWithDelay.isError) {
+        boolean policy = mFakeThreadUtils.enforceMainThread(true);
+        if (responseWithDelay.mIsError) {
             consumer.accept(Result.failure());
         } else {
-            consumer.accept(protocolAdapter.createModel(responseWithDelay.response));
+            consumer.accept(mProtocolAdapter.createModel(responseWithDelay.mResponse));
         }
-        fakeThreadUtils.enforceMainThread(policy);
+        mFakeThreadUtils.enforceMainThread(policy);
     }
 
     /** Returns the latest {@link StreamToken} passed in to the {@link FeedRequestManager}. */
     /*@Nullable*/
     public StreamToken getLatestStreamToken() {
-        return latestStreamToken;
+        return mLatestStreamToken;
     }
 
     /**
@@ -125,24 +125,24 @@
      */
     @RequestReason
     public int getLatestRequestReason() {
-        return latestRequestReason;
+        return mLatestRequestReason;
     }
 
     private static final class ResponseWithDelay {
-        private final Response response;
-        private final boolean isError;
-        private final long delayMs;
+        private final Response mResponse;
+        private final boolean mIsError;
+        private final long mDelayMs;
 
         private ResponseWithDelay(Response response, long delayMs) {
-            this.response = response;
-            this.delayMs = delayMs;
-            isError = false;
+            this.mResponse = response;
+            this.mDelayMs = delayMs;
+            mIsError = false;
         }
 
         private ResponseWithDelay(long delayMs) {
-            this.response = Response.getDefaultInstance();
-            this.delayMs = delayMs;
-            isError = true;
+            this.mResponse = Response.getDefaultInstance();
+            this.mDelayMs = delayMs;
+            mIsError = true;
         }
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/shadows/ExtendedShadowLinearLayout.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/shadows/ExtendedShadowLinearLayout.java
index 39e9b3c..47e368cf 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/shadows/ExtendedShadowLinearLayout.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/shadows/ExtendedShadowLinearLayout.java
@@ -17,59 +17,59 @@
  */
 @Implements(LinearLayout.class)
 public class ExtendedShadowLinearLayout extends ShadowLinearLayout {
-    private int xLocation;
-    private int yLocation;
-    private int height;
-    private int width;
-    private boolean attached;
+    private int mXLocation;
+    private int mYLocation;
+    private int mHeight;
+    private int mWidth;
+    private boolean mAttached;
 
     @Implementation
     public void getLocationOnScreen(int[] pos) {
-        pos[0] = xLocation;
-        pos[1] = yLocation;
+        pos[0] = mXLocation;
+        pos[1] = mYLocation;
     }
 
     public void setLocationOnScreen(int x, int y) {
-        xLocation = x;
-        yLocation = y;
+        mXLocation = x;
+        mYLocation = y;
     }
 
     @Implementation
     public void getLocationInWindow(int[] pos) {
-        pos[0] = xLocation;
-        pos[1] = yLocation;
+        pos[0] = mXLocation;
+        pos[1] = mYLocation;
     }
 
     public void setLocationInWindow(int x, int y) {
-        xLocation = x;
-        yLocation = y;
+        mXLocation = x;
+        mYLocation = y;
     }
 
     @Override
     @Implementation
     public boolean isAttachedToWindow() {
-        return attached;
+        return mAttached;
     }
 
     public void setAttachedToWindow(boolean attached) {
-        this.attached = attached;
+        this.mAttached = attached;
     }
 
     @Implementation
     public int getHeight() {
-        return height;
+        return mHeight;
     }
 
     public void setHeight(int height) {
-        this.height = height;
+        this.mHeight = height;
     }
 
     @Implementation
     public int getWidth() {
-        return width;
+        return mWidth;
     }
 
     public void setWidth(int width) {
-        this.width = width;
+        this.mWidth = width;
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/shadows/ExtendedShadowView.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/shadows/ExtendedShadowView.java
index d2ac65f6..d9745fa 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/shadows/ExtendedShadowView.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/shadows/ExtendedShadowView.java
@@ -17,59 +17,59 @@
  */
 @Implements(View.class)
 public class ExtendedShadowView extends ShadowView {
-    private int xLocation;
-    private int yLocation;
-    private int height;
-    private int width;
-    private boolean attached;
+    private int mXLocation;
+    private int mYLocation;
+    private int mHeight;
+    private int mWidth;
+    private boolean mAttached;
 
     @Implementation
     public void getLocationOnScreen(int[] pos) {
-        pos[0] = xLocation;
-        pos[1] = yLocation;
+        pos[0] = mXLocation;
+        pos[1] = mYLocation;
     }
 
     public void setLocationOnScreen(int x, int y) {
-        xLocation = x;
-        yLocation = y;
+        mXLocation = x;
+        mYLocation = y;
     }
 
     @Implementation
     public void getLocationInWindow(int[] pos) {
-        pos[0] = xLocation;
-        pos[1] = yLocation;
+        pos[0] = mXLocation;
+        pos[1] = mYLocation;
     }
 
     public void setLocationInWindow(int x, int y) {
-        xLocation = x;
-        yLocation = y;
+        mXLocation = x;
+        mYLocation = y;
     }
 
     @Override
     @Implementation
     public boolean isAttachedToWindow() {
-        return attached;
+        return mAttached;
     }
 
     public void setAttachedToWindow(boolean attached) {
-        this.attached = attached;
+        this.mAttached = attached;
     }
 
     @Implementation
     public int getHeight() {
-        return height;
+        return mHeight;
     }
 
     public void setHeight(int height) {
-        this.height = height;
+        this.mHeight = height;
     }
 
     @Implementation
     public int getWidth() {
-        return width;
+        return mWidth;
     }
 
     public void setWidth(int width) {
-        this.width = width;
+        this.mWidth = width;
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/shadows/ShadowRecycledViewPool.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/shadows/ShadowRecycledViewPool.java
index 20522848..35be30a 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/shadows/ShadowRecycledViewPool.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/shadows/ShadowRecycledViewPool.java
@@ -20,14 +20,14 @@
  */
 @Implements(RecyclerView.RecycledViewPool.class)
 public class ShadowRecycledViewPool {
-    private int clearCount;
+    private int mClearCount;
 
     @Implementation
     public void clear() {
-        clearCount++;
+        mClearCount++;
     }
 
     public int getClearCallCount() {
-        return clearCount;
+        return mClearCount;
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/sharedstream/contextmenumanager/FakeContextMenuManager.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/sharedstream/contextmenumanager/FakeContextMenuManager.java
index 4025d1b1..e2f60a9d 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/sharedstream/contextmenumanager/FakeContextMenuManager.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/sharedstream/contextmenumanager/FakeContextMenuManager.java
@@ -14,47 +14,47 @@
 
 /** Fake to be used to test {@link ContextMenuManager}. */
 public class FakeContextMenuManager implements ContextMenuManager {
-    private boolean isMenuOpened;
-    /*@Nullable*/ private List<String> items;
-    /*@Nullable*/ private ContextMenuClickHandler handler;
+    private boolean mIsMenuOpened;
+    /*@Nullable*/ private List<String> mItems;
+    /*@Nullable*/ private ContextMenuClickHandler mHandler;
 
     @Override
     public boolean openContextMenu(
             View anchorView, List<String> items, ContextMenuClickHandler handler) {
-        if (isMenuOpened) {
+        if (mIsMenuOpened) {
             return false;
         }
 
-        isMenuOpened = true;
-        this.items = items;
-        this.handler = handler;
+        mIsMenuOpened = true;
+        this.mItems = items;
+        this.mHandler = handler;
 
         return true;
     }
 
     @Override
     public void dismissPopup() {
-        isMenuOpened = false;
-        items = null;
-        handler = null;
+        mIsMenuOpened = false;
+        mItems = null;
+        mHandler = null;
     }
 
     @Override
     public void setView(View view) {}
 
     public void performClick(int position) {
-        if (!isMenuOpened) {
+        if (!mIsMenuOpened) {
             throw new IllegalStateException("Cannot perform click with no menu opened.");
         }
 
-        checkNotNull(handler).handleClick(position);
+        checkNotNull(mHandler).handleClick(position);
     }
 
     public List<String> getMenuOptions() {
-        if (!isMenuOpened) {
+        if (!mIsMenuOpened) {
             throw new IllegalStateException("No menu open.");
         }
 
-        return checkNotNull(items);
+        return checkNotNull(mItems);
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/sharedstream/offlinemonitor/FakeStreamOfflineMonitor.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/sharedstream/offlinemonitor/FakeStreamOfflineMonitor.java
index bd3fdf4..1091297 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/sharedstream/offlinemonitor/FakeStreamOfflineMonitor.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/sharedstream/offlinemonitor/FakeStreamOfflineMonitor.java
@@ -9,8 +9,8 @@
 
 /** Fake used for tests using the {@link StreamOfflineMonitor}. */
 public class FakeStreamOfflineMonitor extends StreamOfflineMonitor {
-    private final FakeOfflineIndicatorApi fakeIndicatorApi;
-    private boolean offlineStatusRequested;
+    private final FakeOfflineIndicatorApi mFakeIndicatorApi;
+    private boolean mOfflineStatusRequested;
 
     /**
      * Creates a {@link FakeStreamOfflineMonitor} with the given {@link FakeOfflineIndicatorApi}.
@@ -29,7 +29,7 @@
 
     private FakeStreamOfflineMonitor(FakeOfflineIndicatorApi offlineIndicatorApi) {
         super(offlineIndicatorApi);
-        this.fakeIndicatorApi = offlineIndicatorApi;
+        this.mFakeIndicatorApi = offlineIndicatorApi;
     }
 
     /** Sets the offline status for the given {@code url}. */
@@ -39,7 +39,7 @@
         isAvailableOffline(url);
 
         // Sets the status of the url with the api, which is the source of truth.
-        fakeIndicatorApi.setOfflineStatus(url, isAvailable);
+        mFakeIndicatorApi.setOfflineStatus(url, isAvailable);
 
         // Triggers notification to any current listeners, namely the superclass of this fake.
         requestOfflineStatusForNewContent();
@@ -47,16 +47,16 @@
 
     /** Returns the count of how many observers there are for offline status. */
     public int getOfflineStatusConsumerCount() {
-        return offlineStatusConsumersMap.size();
+        return mOfflineStatusConsumersMap.size();
     }
 
     @Override
     public void requestOfflineStatusForNewContent() {
-        offlineStatusRequested = true;
+        mOfflineStatusRequested = true;
         super.requestOfflineStatusForNewContent();
     }
 
     public boolean isOfflineStatusRequested() {
-        return offlineStatusRequested;
+        return mOfflineStatusRequested;
     }
 }
diff --git a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/store/FakeStore.java b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/store/FakeStore.java
index a3aaaf7..7efe6c5 100644
--- a/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/store/FakeStore.java
+++ b/third_party/feed_library/src/src/main/java/com/google/android/libraries/feed/testing/store/FakeStore.java
@@ -34,13 +34,13 @@
 
 /** Fake implementation of {@link com.google.android.libraries.feed.api.internal.store.Store}. */
 public final class FakeStore extends FeedStore {
-    private final FakeThreadUtils fakeThreadUtils;
-    private boolean allowCreateNewSession = true;
-    private boolean allowEditContent = true;
-    private boolean allowGetPayloads = true;
-    private boolean allowGetStreamStructures = true;
-    private boolean allowGetSharedStates = true;
-    private boolean clearHeadCalled;
+    private final FakeThreadUtils mFakeThreadUtils;
+    private boolean mAllowCreateNewSession = true;
+    private boolean mAllowEditContent = true;
+    private boolean mAllowGetPayloads = true;
+    private boolean mAllowGetStreamStructures = true;
+    private boolean mAllowGetSharedStates = true;
+    private boolean mClearHeadCalled;
 
     public FakeStore(Configuration configuration, FakeThreadUtils fakeThreadUtils,
             TaskQueue taskQueue, Clock clock) {
@@ -48,12 +48,12 @@
                 new InMemoryContentStorage(), new InMemoryJournalStorage(), fakeThreadUtils,
                 taskQueue, clock, new FakeBasicLoggingApi(),
                 FakeMainThreadRunner.runTasksImmediately());
-        this.fakeThreadUtils = fakeThreadUtils;
+        this.mFakeThreadUtils = fakeThreadUtils;
     }
 
     @Override
     public Result<List<PayloadWithId>> getPayloads(List<String> contentIds) {
-        if (!allowGetPayloads) {
+        if (!mAllowGetPayloads) {
             return Result.failure();
         }
 
@@ -62,7 +62,7 @@
 
     @Override
     public Result<List<StreamStructure>> getStreamStructures(String sessionId) {
-        if (!allowGetStreamStructures) {
+        if (!mAllowGetStreamStructures) {
             return Result.failure();
         }
 
@@ -71,13 +71,13 @@
 
     @Override
     public void clearHead() {
-        clearHeadCalled = true;
+        mClearHeadCalled = true;
         super.clearHead();
     }
 
     @Override
     public Result<String> createNewSession() {
-        if (!allowCreateNewSession) {
+        if (!mAllowCreateNewSession) {
             return Result.failure();
         }
 
@@ -86,7 +86,7 @@
 
     @Override
     public Result<List<StreamSharedState>> getSharedStates() {
-        if (!allowGetSharedStates) {
+        if (!mAllowGetSharedStates) {
             return Result.failure();
         }
 
@@ -95,7 +95,7 @@
 
     @Override
     public ContentMutation editContent() {
-        if (!allowEditContent) {
+        if (!mAllowEditContent) {
             return new ContentMutation() {
                 @Override
                 public ContentMutation add(String contentId, StreamPayload payload) {
@@ -114,12 +114,12 @@
 
     /** Returns if {@link FeedStore#clearAll()} was called. */
     public boolean getClearHeadCalled() {
-        return clearHeadCalled;
+        return mClearHeadCalled;
     }
 
     /** Clears all content storage. */
     public FakeStore clearContent() {
-        contentStorage.commit(
+        mContentStorage.commit(
                 new com.google.android.libraries.feed.api.host.storage.ContentMutation.Builder()
                         .deleteAll()
                         .build());
@@ -128,64 +128,64 @@
 
     /** Sets whether to fail on calls to {@link getStreamStructures(String)}. */
     public FakeStore setAllowGetStreamStructures(boolean value) {
-        allowGetStreamStructures = value;
+        mAllowGetStreamStructures = value;
         return this;
     }
 
     /** Sets whether to fail on calls to {@link editContent()}. */
     public FakeStore setAllowEditContent(boolean value) {
-        allowEditContent = value;
+        mAllowEditContent = value;
         return this;
     }
 
     /** Sets whether to fail on calls to {@link createNewSession()}. */
     public FakeStore setAllowCreateNewSession(boolean value) {
-        allowCreateNewSession = value;
+        mAllowCreateNewSession = value;
         return this;
     }
 
     /** Sets whether to fail on calls to {@link getPayloads(List)}. */
     public FakeStore setAllowGetPayloads(boolean value) {
-        allowGetPayloads = value;
+        mAllowGetPayloads = value;
         return this;
     }
 
     /** Sets whether to fail on calls to {@link getSharedStates()}. */
     public FakeStore setAllowGetSharedStates(boolean value) {
-        allowGetSharedStates = value;
+        mAllowGetSharedStates = value;
         return this;
     }
 
     /** Adds the {@code payload} to the store. */
     public FakeStore setContent(String contentId, StreamPayload payload) {
-        boolean policy = fakeThreadUtils.enforceMainThread(false);
+        boolean policy = mFakeThreadUtils.enforceMainThread(false);
         editContent().add(contentId, payload).commit();
-        fakeThreadUtils.enforceMainThread(policy);
+        mFakeThreadUtils.enforceMainThread(policy);
         return this;
     }
 
     /** Adds the {@code payloads} to the store. */
     public FakeStore setContent(List<PayloadWithId> payloads) {
-        boolean policy = fakeThreadUtils.enforceMainThread(false);
+        boolean policy = mFakeThreadUtils.enforceMainThread(false);
         ContentMutation mutation = editContent();
         for (PayloadWithId payload : payloads) {
             mutation.add(payload.contentId, payload.payload);
         }
         mutation.commit();
-        fakeThreadUtils.enforceMainThread(policy);
+        mFakeThreadUtils.enforceMainThread(policy);
         return this;
     }
 
     /** Adds the {@code sharedStates} to the store. */
     public FakeStore setSharedStates(StreamSharedState... sharedStates) {
-        boolean policy = fakeThreadUtils.enforceMainThread(false);
+        boolean policy = mFakeThreadUtils.enforceMainThread(false);
         ContentMutation mutation = editContent();
         for (StreamSharedState sharedState : sharedStates) {
             mutation.add(sharedState.getContentId(),
                     StreamPayload.newBuilder().setStreamSharedState(sharedState).build());
         }
         mutation.commit();
-        fakeThreadUtils.enforceMainThread(policy);
+        mFakeThreadUtils.enforceMainThread(policy);
         return this;
     }
 
@@ -196,41 +196,41 @@
 
     /** Adds the {@code structures} to the store for the specified {@code sessionId}. */
     public FakeStore setStreamStructures(String sessionId, List<StreamStructure> structures) {
-        boolean policy = fakeThreadUtils.enforceMainThread(false);
+        boolean policy = mFakeThreadUtils.enforceMainThread(false);
         SessionMutation mutation = editSession(sessionId);
         for (StreamStructure structure : structures) {
             mutation.add(structure);
         }
         mutation.commit();
-        fakeThreadUtils.enforceMainThread(policy);
+        mFakeThreadUtils.enforceMainThread(policy);
         return this;
     }
 
     /** Adds the {@code actions} to the store. */
     public FakeStore setStreamUploadableActions(StreamUploadableAction... actions) {
-        boolean policy = fakeThreadUtils.enforceMainThread(false);
+        boolean policy = mFakeThreadUtils.enforceMainThread(false);
         UploadableActionMutation mutation = editUploadableActions();
         for (StreamUploadableAction action : actions) {
             mutation.upsert(action, action.getFeatureContentId());
         }
         mutation.commit();
-        fakeThreadUtils.enforceMainThread(policy);
+        mFakeThreadUtils.enforceMainThread(policy);
         return this;
     }
 
     /** Adds the {@code actions} to the store. */
     public FakeStore addSemanticProperties(String contentId, SemanticProperties properties) {
-        boolean policy = fakeThreadUtils.enforceMainThread(false);
+        boolean policy = mFakeThreadUtils.enforceMainThread(false);
         SemanticPropertiesMutation mutation = editSemanticProperties();
         mutation.add(contentId, properties.getSemanticPropertiesData());
         mutation.commit();
-        fakeThreadUtils.enforceMainThread(policy);
+        mFakeThreadUtils.enforceMainThread(policy);
         return this;
     }
 
     /** Gets all content associated with the {@code contentId}. */
     public List<Object> getContentById(String contentId) {
-        boolean policy = fakeThreadUtils.enforceMainThread(false);
+        boolean policy = mFakeThreadUtils.enforceMainThread(false);
         ArrayList<String> contentIds = new ArrayList<>(1);
         contentIds.add(contentId);
         ArrayList<Object> result = new ArrayList<>();
@@ -241,7 +241,7 @@
                 result.add(action);
             }
         }
-        fakeThreadUtils.enforceMainThread(policy);
+        mFakeThreadUtils.enforceMainThread(policy);
         return result;
     }
 }
diff --git a/third_party/feed_library/src/src/test/java/com/google/android/libraries/feed/feedprotocoladapter/FeedProtocolAdapterTest.java b/third_party/feed_library/src/src/test/java/com/google/android/libraries/feed/feedprotocoladapter/FeedProtocolAdapterTest.java
index 6aa4305..4ec6e21 100644
--- a/third_party/feed_library/src/src/test/java/com/google/android/libraries/feed/feedprotocoladapter/FeedProtocolAdapterTest.java
+++ b/third_party/feed_library/src/src/test/java/com/google/android/libraries/feed/feedprotocoladapter/FeedProtocolAdapterTest.java
@@ -37,13 +37,13 @@
 /** Tests of the {@link FeedProtocolAdapter} class. */
 @RunWith(RobolectricTestRunner.class)
 public class FeedProtocolAdapterTest {
-    private final TimingUtils timingUtils = new TimingUtils();
-    private final FeedProtocolAdapter protocolAdapter =
+    private final TimingUtils mTimingUtils = new TimingUtils();
+    private final FeedProtocolAdapter mProtocolAdapter =
             new FeedProtocolAdapter(ImmutableList.of(), timingUtils);
 
     @Mock
-    private RequiredContentAdapter adapter;
-    private ResponseBuilder responseBuilder;
+    private RequiredContentAdapter mAdapter;
+    private ResponseBuilder mResponseBuilder;
 
     @Before
     public void init() {
diff --git a/third_party/feed_library/src/src/test/java/com/google/android/libraries/feed/feedprotocoladapter/internal/transformers/ContentDataOperationTransformerTest.java b/third_party/feed_library/src/src/test/java/com/google/android/libraries/feed/feedprotocoladapter/internal/transformers/ContentDataOperationTransformerTest.java
index 938a07b..d70f1d3 100644
--- a/third_party/feed_library/src/src/test/java/com/google/android/libraries/feed/feedprotocoladapter/internal/transformers/ContentDataOperationTransformerTest.java
+++ b/third_party/feed_library/src/src/test/java/com/google/android/libraries/feed/feedprotocoladapter/internal/transformers/ContentDataOperationTransformerTest.java
@@ -30,10 +30,10 @@
     private static final long RESPONSE_TIME = 1000;
     private static final FeedResponseMetadata METADATA =
             FeedResponseMetadata.newBuilder().setResponseTimeMs(RESPONSE_TIME).build();
-    private ContentDataOperationTransformer contentDataOperationTransformer;
-    private DataOperation.Builder dataOperation;
-    private StreamDataOperation.Builder dataOperationBuilder;
-    private StreamFeature streamFeature;
+    private ContentDataOperationTransformer mContentDataOperationTransformer;
+    private DataOperation.Builder mDataOperation;
+    private StreamDataOperation.Builder mDataOperationBuilder;
+    private StreamFeature mStreamFeature;
 
     @Before
     public void setUp() {
diff --git a/third_party/feed_library/src/src/test/java/com/google/android/libraries/feed/feedprotocoladapter/internal/transformers/FeatureDataOperationTransformerTest.java b/third_party/feed_library/src/src/test/java/com/google/android/libraries/feed/feedprotocoladapter/internal/transformers/FeatureDataOperationTransformerTest.java
index eaf1939..5f4af1d2 100644
--- a/third_party/feed_library/src/src/test/java/com/google/android/libraries/feed/feedprotocoladapter/internal/transformers/FeatureDataOperationTransformerTest.java
+++ b/third_party/feed_library/src/src/test/java/com/google/android/libraries/feed/feedprotocoladapter/internal/transformers/FeatureDataOperationTransformerTest.java
@@ -26,10 +26,10 @@
 @RunWith(RobolectricTestRunner.class)
 public class FeatureDataOperationTransformerTest {
     private static final String CONTENT_ID = "123";
-    private DataOperation.Builder dataOperation;
-    private StreamDataOperation.Builder dataOperationBuilder;
-    private StreamFeature streamFeature;
-    private FeatureDataOperationTransformer featureDataOperationTransformer;
+    private DataOperation.Builder mDataOperation;
+    private StreamDataOperation.Builder mDataOperationBuilder;
+    private StreamFeature mStreamFeature;
+    private FeatureDataOperationTransformer mFeatureDataOperationTransformer;
 
     @Before
     public void setUp() {
diff --git a/third_party/feed_library/src/src/test/java/com/google/android/libraries/feed/piet/NoKeyOverwriteHashMapTest.java b/third_party/feed_library/src/src/test/java/com/google/android/libraries/feed/piet/NoKeyOverwriteHashMapTest.java
index 413d94d..0d25a31 100644
--- a/third_party/feed_library/src/src/test/java/com/google/android/libraries/feed/piet/NoKeyOverwriteHashMapTest.java
+++ b/third_party/feed_library/src/src/test/java/com/google/android/libraries/feed/piet/NoKeyOverwriteHashMapTest.java
@@ -15,19 +15,19 @@
 /** Tests of the NoKeyOverwriteHashMap */
 @RunWith(JUnit4.class)
 public class NoKeyOverwriteHashMapTest {
-    private final NoKeyOverwriteHashMap<String, String> map =
+    private final NoKeyOverwriteHashMap<String, String> mMap =
             new NoKeyOverwriteHashMap<>("Acronym", ErrorCode.ERR_DUPLICATE_BINDING_VALUE);
 
     @Test
     public void testPutTwoDifferentKeys() {
-        map.put("CPA", "Certified Public Accountant");
-        map.put("CPU", "Central Processing Unit");
+        mMap.put("CPA", "Certified Public Accountant");
+        mMap.put("CPU", "Central Processing Unit");
     }
 
     @Test
     public void testPutTwoSameKeysThrows() {
-        map.put("CD", "Compact Disc");
-        assertThatRunnable(() -> map.put("CD", "Certificate of Deposit"))
+        mMap.put("CD", "Compact Disc");
+        assertThatRunnable(() -> mMap.put("CD", "Certificate of Deposit"))
                 .throwsAnExceptionOfType(PietFatalException.class)
                 .that()
                 .hasMessageThat()
diff --git a/third_party/feed_library/src/src/test/java/com/google/android/libraries/feed/piet/PietManagerImplTest.java b/third_party/feed_library/src/src/test/java/com/google/android/libraries/feed/piet/PietManagerImplTest.java
index 1872f31..5ef8443 100644
--- a/third_party/feed_library/src/src/test/java/com/google/android/libraries/feed/piet/PietManagerImplTest.java
+++ b/third_party/feed_library/src/src/test/java/com/google/android/libraries/feed/piet/PietManagerImplTest.java
@@ -57,9 +57,9 @@
 @RunWith(RobolectricTestRunner.class)
 public class PietManagerImplTest {
     @Mock
-    private ActionHandler actionHandler;
+    private ActionHandler mActionHandler;
     @Mock
-    private EventLogger eventLogger;
+    private EventLogger mEventLogger;
     @Mock
     private CustomElementProvider customElementProvider;
 
@@ -93,8 +93,9 @@
     @Test
     public void testCreatePietFrameAdapter() {
         Supplier<ViewGroup> cardViewSupplier = Suppliers.of(viewGroup1);
-        FrameAdapterImpl frameAdapter = (FrameAdapterImpl) pietManager.createPietFrameAdapter(
-                cardViewSupplier, actionHandler, eventLogger, context, /* logDataCallback= */ null);
+        FrameAdapterImpl frameAdapter =
+                (FrameAdapterImpl) pietManager.createPietFrameAdapter(cardViewSupplier,
+                        mActionHandler, mEventLogger, context, /* logDataCallback= */ null);
         assertThat(frameAdapter.getParameters().parentViewSupplier)
                 .isSameInstanceAs(cardViewSupplier);
     }
@@ -110,7 +111,7 @@
         };
         Supplier<ViewGroup> cardViewSupplier = Suppliers.of(viewGroup1);
         FrameAdapterImpl frameAdapter = (FrameAdapterImpl) pietManager.createPietFrameAdapter(
-                cardViewSupplier, actionHandler, eventLogger, context, logDataCallback);
+                cardViewSupplier, mActionHandler, mEventLogger, context, logDataCallback);
         assertThat(frameAdapter.getParameters().hostProviders.getLogDataCallback())
                 .isEqualTo(logDataCallback);
     }
@@ -152,7 +153,7 @@
         // There's no good way to test the HostBindingProvider.
 
         FrameAdapterImpl frameAdapter = (FrameAdapterImpl) manager.createPietFrameAdapter(
-                Suppliers.of(viewGroup1), actionHandler, eventLogger, context,
+                Suppliers.of(viewGroup1), mActionHandler, mEventLogger, context,
                 /* logDataCallback= */ null);
         FrameContext frameContext = frameAdapter.createFrameContext(
                 Frame.getDefaultInstance(), 0, Collections.emptyList(), viewGroup2);
@@ -210,7 +211,7 @@
         assertThat(parameters.clock).isSameInstanceAs(clock);
 
         FrameAdapterImpl frameAdapter = (FrameAdapterImpl) manager.createPietFrameAdapter(
-                Suppliers.of(viewGroup1), actionHandler, eventLogger, context,
+                Suppliers.of(viewGroup1), mActionHandler, mEventLogger, context,
                 /* logDataCallback= */ null);
         FrameContext frameContext = frameAdapter.createFrameContext(
                 Frame.getDefaultInstance(), 0, Collections.emptyList(), viewGroup2);
diff --git a/third_party/feed_library/src/src/test/java/com/google/android/libraries/feed/piet/TextElementAdapterTest.java b/third_party/feed_library/src/src/test/java/com/google/android/libraries/feed/piet/TextElementAdapterTest.java
index 4fc64c5..6f958404 100644
--- a/third_party/feed_library/src/src/test/java/com/google/android/libraries/feed/piet/TextElementAdapterTest.java
+++ b/third_party/feed_library/src/src/test/java/com/google/android/libraries/feed/piet/TextElementAdapterTest.java
@@ -67,22 +67,22 @@
 @RunWith(RobolectricTestRunner.class)
 public class TextElementAdapterTest {
     @Mock
-    private FrameContext frameContext;
+    private FrameContext mFrameContext;
     @Mock
-    private StyleProvider mockStyleProvider;
+    private StyleProvider mMockStyleProvider;
     @Mock
-    private HostProviders mockHostProviders;
+    private HostProviders mMockHostProviders;
     @Mock
-    private AssetProvider mockAssetProvider;
+    private AssetProvider mMockAssetProvider;
     @Mock
-    private TypefaceProvider mockTypefaceProvider;
+    private TypefaceProvider mMockTypefaceProvider;
 
-    private AdapterParameters adapterParameters;
+    private AdapterParameters mAdapterParameters;
 
-    private Context context;
+    private Context mContext;
 
-    private TextElementAdapter adapter;
-    private int emptyTextElementLineHeight;
+    private TextElementAdapter mAdapter;
+    private int mEmptyTextElementLineHeight;
 
     @Before
     public void setUp() {
diff --git a/third_party/flatbuffers/BUILD.gn b/third_party/flatbuffers/BUILD.gn
index 1c389cc..7ffd758 100644
--- a/third_party/flatbuffers/BUILD.gn
+++ b/third_party/flatbuffers/BUILD.gn
@@ -18,7 +18,9 @@
   ]
 
   if (is_win) {
-    data_deps = [ "//build/win:runtime_libs" ]
+    data_deps = [
+      "//build/win:runtime_libs",
+    ]
   }
 
   configs -= [ "//build/config/compiler:chromium_code" ]
@@ -39,6 +41,7 @@
     "src/grpc/src/compiler/go_generator.h",
     "src/grpc/src/compiler/java_generator.cc",
     "src/grpc/src/compiler/java_generator.h",
+    "src/grpc/src/compiler/python_generator.cc",
     "src/grpc/src/compiler/schema_interface.h",
     "src/include/flatbuffers/code_generators.h",
     "src/include/flatbuffers/flatbuffers.h",
@@ -55,13 +58,15 @@
     "src/src/code_generators.cpp",
     "src/src/flatc.cpp",
     "src/src/idl_gen_cpp.cpp",
+    "src/src/idl_gen_csharp.cpp",
     "src/src/idl_gen_dart.cpp",
     "src/src/idl_gen_fbs.cpp",
-    "src/src/idl_gen_general.cpp",
     "src/src/idl_gen_go.cpp",
     "src/src/idl_gen_grpc.cpp",
+    "src/src/idl_gen_java.cpp",
     "src/src/idl_gen_js_ts.cpp",
     "src/src/idl_gen_json_schema.cpp",
+    "src/src/idl_gen_kotlin.cpp",
     "src/src/idl_gen_lobster.cpp",
     "src/src/idl_gen_lua.cpp",
     "src/src/idl_gen_php.cpp",
@@ -106,6 +111,7 @@
 
 test("flatbuffers_unittests") {
   sources = [
+    "src/tests/native_type_test_impl.cpp",
     "src/tests/test.cpp",
     "src/tests/test_assert.cpp",
     "src/tests/test_builder.cpp",
@@ -131,4 +137,6 @@
     "FLATBUFFERS_TEST_PATH_PREFIX=" +
         rebase_path("//third_party/flatbuffers/src/", root_build_dir),
   ]
+  configs -= [ "//build/config/compiler:chromium_code" ]
+  configs += [ "//build/config/compiler:no_chromium_code" ]
 }
diff --git a/third_party/flatbuffers/README.chromium b/third_party/flatbuffers/README.chromium
index ffff618..1605967 100644
--- a/third_party/flatbuffers/README.chromium
+++ b/third_party/flatbuffers/README.chromium
@@ -1,7 +1,7 @@
 Name: FlatBuffers
 Short Name: flatbuffers
 URL: https://github.com/google/flatbuffers
-Version: 9bf9b18f0a705dfd6d50b98056463a55de6a1bf9
+Version: 136d75fa6580ef87d1b7cbc243e617f21149852e
 Date: 2019-02-25
 License: Apache 2.0
 License File: LICENSE
diff --git a/third_party/freetype/README.chromium b/third_party/freetype/README.chromium
index d7dd216a..3c27011 100644
--- a/third_party/freetype/README.chromium
+++ b/third_party/freetype/README.chromium
@@ -1,7 +1,7 @@
 Name: FreeType
 URL: http://www.freetype.org/
-Version: VER-2-10-1-73-g3aaae716b
-Revision: 3aaae716b25bd2d3232e279bc05af65cff446dd9
+Version: VER-2-10-1-81-gd4f9c2498
+Revision: d4f9c249893a146b0c94a152f7674e288d181f95
 License: Custom license "inspired by the BSD, Artistic, and IJG (Independent
          JPEG Group) licenses"
 License File: src/docs/FTL.TXT
diff --git a/tools/android/errorprone_plugin/src/org/chromium/tools/errorprone/plugin/AndroidNullableCheck.java b/tools/android/errorprone_plugin/src/org/chromium/tools/errorprone/plugin/AndroidNullableCheck.java
index a88c5e38..0af9197 100644
--- a/tools/android/errorprone_plugin/src/org/chromium/tools/errorprone/plugin/AndroidNullableCheck.java
+++ b/tools/android/errorprone_plugin/src/org/chromium/tools/errorprone/plugin/AndroidNullableCheck.java
@@ -17,7 +17,7 @@
  * Assert android.support.annotation.Nullable is used instead of javax.annotation.Nullable.
  */
 @AutoService(BugChecker.class)
-@BugPattern(name = "AndroidNullableCheck", category = BugPattern.Category.ANDROID,
+@BugPattern(name = "AndroidNullableCheck",
         summary = "Use android.support.annotation.Nullable instead of javax.annotation.Nullable.",
         severity = BugPattern.SeverityLevel.ERROR, linkType = BugPattern.LinkType.CUSTOM,
         link = "http://crbug.com/771683")
diff --git a/tools/android/errorprone_plugin/src/org/chromium/tools/errorprone/plugin/NoAndroidAsyncTaskCheck.java b/tools/android/errorprone_plugin/src/org/chromium/tools/errorprone/plugin/NoAndroidAsyncTaskCheck.java
index 9fb2a49..af3fd0470 100644
--- a/tools/android/errorprone_plugin/src/org/chromium/tools/errorprone/plugin/NoAndroidAsyncTaskCheck.java
+++ b/tools/android/errorprone_plugin/src/org/chromium/tools/errorprone/plugin/NoAndroidAsyncTaskCheck.java
@@ -17,7 +17,7 @@
  * Triggers an error for any occurrence of android.os.AsyncTask.
  */
 @AutoService(BugChecker.class)
-@BugPattern(name = "NoAndroidAsyncTaskCheck", category = BugPattern.Category.ANDROID,
+@BugPattern(name = "NoAndroidAsyncTaskCheck",
         summary = "Do not use android.os.AsyncTask - use org.chromium.base.task.AsyncTask instead",
         severity = BugPattern.SeverityLevel.ERROR, linkType = BugPattern.LinkType.CUSTOM,
         link = "https://bugs.chromium.org/p/chromium/issues/detail?id=843745")
diff --git a/tools/android/errorprone_plugin/src/org/chromium/tools/errorprone/plugin/NoDynamicStringsInTraceEventCheck.java b/tools/android/errorprone_plugin/src/org/chromium/tools/errorprone/plugin/NoDynamicStringsInTraceEventCheck.java
index ce46f7a..bba9644 100644
--- a/tools/android/errorprone_plugin/src/org/chromium/tools/errorprone/plugin/NoDynamicStringsInTraceEventCheck.java
+++ b/tools/android/errorprone_plugin/src/org/chromium/tools/errorprone/plugin/NoDynamicStringsInTraceEventCheck.java
@@ -30,7 +30,7 @@
  * Triggers an error for {@link org.chromium.base.TraceEvent} usages with non string literals.
  */
 @AutoService(BugChecker.class)
-@BugPattern(name = "NoDynamicStringsInTraceEventCheck", category = BugPattern.Category.JDK,
+@BugPattern(name = "NoDynamicStringsInTraceEventCheck",
         summary = "Only use of string literals are allowed in trace events.",
         severity = BugPattern.SeverityLevel.ERROR, linkType = BugPattern.LinkType.CUSTOM,
         link = "https://crbug.com/984827")
diff --git a/tools/android/errorprone_plugin/src/org/chromium/tools/errorprone/plugin/NoRedundantFieldInitCheck.java b/tools/android/errorprone_plugin/src/org/chromium/tools/errorprone/plugin/NoRedundantFieldInitCheck.java
index bf1e14dc..ea0fade 100644
--- a/tools/android/errorprone_plugin/src/org/chromium/tools/errorprone/plugin/NoRedundantFieldInitCheck.java
+++ b/tools/android/errorprone_plugin/src/org/chromium/tools/errorprone/plugin/NoRedundantFieldInitCheck.java
@@ -27,7 +27,7 @@
  * Detects when non-final fields are explicitly initialized to default values
  */
 @AutoService(BugChecker.class)
-@BugPattern(name = "NoRedundantFieldInit", category = BugPattern.Category.ANDROID,
+@BugPattern(name = "NoRedundantFieldInit",
         summary = "Do not explicitly initialize a non-final field with a default value",
         severity = BugPattern.SeverityLevel.ERROR, linkType = BugPattern.LinkType.CUSTOM,
         link = "https://issuetracker.google.com/issues/37124982")
diff --git a/tools/android/errorprone_plugin/src/org/chromium/tools/errorprone/plugin/NoSynchronizedMethodCheck.java b/tools/android/errorprone_plugin/src/org/chromium/tools/errorprone/plugin/NoSynchronizedMethodCheck.java
index b99f1871..0f78aa9 100644
--- a/tools/android/errorprone_plugin/src/org/chromium/tools/errorprone/plugin/NoSynchronizedMethodCheck.java
+++ b/tools/android/errorprone_plugin/src/org/chromium/tools/errorprone/plugin/NoSynchronizedMethodCheck.java
@@ -20,7 +20,7 @@
  * Triggers an error for public methods that use "synchronized" in their signature.
  */
 @AutoService(BugChecker.class)
-@BugPattern(name = "NoSynchronizedMethodCheck", category = BugPattern.Category.JDK,
+@BugPattern(name = "NoSynchronizedMethodCheck",
         summary = "Use of synchronized in public method signature disallowed.",
         severity = BugPattern.SeverityLevel.ERROR, linkType = BugPattern.LinkType.CUSTOM,
         link = "https://stackoverflow.com/questions/20906548/why-is-synchronized-block-better-than-synchronized-method")
diff --git a/tools/android/errorprone_plugin/src/org/chromium/tools/errorprone/plugin/NoSynchronizedThisCheck.java b/tools/android/errorprone_plugin/src/org/chromium/tools/errorprone/plugin/NoSynchronizedThisCheck.java
index f82664e..62bb98b9 100644
--- a/tools/android/errorprone_plugin/src/org/chromium/tools/errorprone/plugin/NoSynchronizedThisCheck.java
+++ b/tools/android/errorprone_plugin/src/org/chromium/tools/errorprone/plugin/NoSynchronizedThisCheck.java
@@ -21,7 +21,7 @@
  * This class detects the synchronized method.
  */
 @AutoService(BugChecker.class)
-@BugPattern(name = "NoSynchronizedThisCheck", category = BugPattern.Category.JDK,
+@BugPattern(name = "NoSynchronizedThisCheck",
         summary = "Do not synchronized on 'this' in public classes",
         severity = BugPattern.SeverityLevel.ERROR, linkType = BugPattern.LinkType.CUSTOM,
         link = "https://stackoverflow.com/questions/442564/avoid-synchronizedthis-in-java")
diff --git a/tools/android/roll/android_deps/build.gradle b/tools/android/roll/android_deps/build.gradle
index 356c583..d0feb0b 100644
--- a/tools/android/roll/android_deps/build.gradle
+++ b/tools/android/roll/android_deps/build.gradle
@@ -134,7 +134,7 @@
     buildCompile "com.google.auto.service:auto-service-annotations:1.0-rc6"
     buildCompile "com.google.auto.service:auto-service:1.0-rc6"
 
-    buildCompile "com.google.errorprone:error_prone_core:2.3.1"
+    buildCompile "com.google.errorprone:error_prone_core:2.3.3"
 
     // testCompile targets have test_only = true.
     testCompile "androidx.test:core:1.0.0"
diff --git a/tools/android/roll/android_deps/buildSrc/src/main/groovy/ChromiumDepGraph.groovy b/tools/android/roll/android_deps/buildSrc/src/main/groovy/ChromiumDepGraph.groovy
index c6f5016a..932584b0 100644
--- a/tools/android/roll/android_deps/buildSrc/src/main/groovy/ChromiumDepGraph.groovy
+++ b/tools/android/roll/android_deps/buildSrc/src/main/groovy/ChromiumDepGraph.groovy
@@ -62,6 +62,10 @@
             licenseUrl: "https://raw.githubusercontent.com/mojohaus/animal-sniffer/master/animal-sniffer-annotations/pom.xml",
             licensePath: "licenses/Codehaus_License-2009.txt",
             licenseName: "MIT"),
+        'com_google_protobuf_protobuf_java': new PropertyOverride(
+            url: "https://github.com/protocolbuffers/protobuf/blob/master/java/lite.md",
+            licenseUrl: "https://raw.githubusercontent.com/protocolbuffers/protobuf/master/LICENSE",
+            licenseName: "BSD"),
         'com_google_protobuf_protobuf_lite': new PropertyOverride(
             url: "https://github.com/protocolbuffers/protobuf/blob/master/java/lite.md",
             licenseUrl: "https://raw.githubusercontent.com/protocolbuffers/protobuf/master/LICENSE",
diff --git a/tools/cygprofile/orderfile_generator_backend.py b/tools/cygprofile/orderfile_generator_backend.py
index 6453874f..3291e2a 100755
--- a/tools/cygprofile/orderfile_generator_backend.py
+++ b/tools/cygprofile/orderfile_generator_backend.py
@@ -364,19 +364,20 @@
   _CLOUD_STORAGE_BUCKET = None
   _UPLOAD_TO_CLOUD_COMMAND = 'upload_to_google_storage.py'
 
-  def __init__(self, repository_root, step_recorder, branch, netrc):
+  def __init__(self, repository_root, step_recorder, branch, netrc=None):
     """Constructor.
 
     Args:
       repository_root: (str) Root of the target repository.
       step_recorder: (StepRecorder) Step recorder, for logging.
       branch: (str) Branch to commit to.
-      netrc: (str) Path to the .netrc file to use.
+      netrc: (str) Obsolete. Specified by code in internal repo. TODO(pasko):
+          remove.
     """
+    # pylint: disable=unused-argument
     self._repository_root = repository_root
     self._step_recorder = step_recorder
     self._branch = branch
-    self._netrc = netrc
 
   def CommitStashedFileHashes(self, files):
     """Commits unpatched and patched orderfiles hashes if changed.
@@ -634,8 +635,7 @@
     assert issubclass(orderfile_updater_class, OrderfileUpdater)
     self._orderfile_updater = orderfile_updater_class(self._clank_dir,
                                                       self._step_recorder,
-                                                      options.branch,
-                                                      options.netrc)
+                                                      options.branch)
     assert os.path.isdir(constants.DIR_SOURCE_ROOT), 'No src directory found'
     symbol_extractor.SetArchitecture(options.arch)
 
@@ -1074,8 +1074,7 @@
     if self._options.new_commit_flow:
       self._orderfile_updater._GitStash()
     else:
-      if (self._options.buildbot and self._options.netrc
-          and not self._step_recorder.ErrorRecorded()):
+      if (self._options.buildbot and not self._step_recorder.ErrorRecorded()):
         unpatched_orderfile_filename = (
             self._GetUnpatchedOrderfileFilename() if profile_uploaded else None)
         orderfile_filename = (
@@ -1097,7 +1096,7 @@
 
     Returns: true on success.
     """
-    if not (self._options.buildbot and self._options.netrc):
+    if not self._options.buildbot:
       logging.error('Trying to commit when not running on the buildbot')
       return False
     self._orderfile_updater._CommitStashedFiles([
@@ -1135,11 +1134,10 @@
       '--skip-patch', action='store_false', dest='patch', default=True,
       help='Only generate the raw (unpatched) orderfile, don\'t patch it.')
   parser.add_argument(
-      '--netrc', action='store',
-      help='A custom .netrc file to use for git checkin. Only used on bots.')
+      '--netrc', action='store', help='Obsolete. A custom .netrc file.')
   parser.add_argument(
       '--branch', action='store', default='master',
-      help='When running on buildbot with a netrc, the branch orderfile '
+      help='When running on buildbot, the branch orderfile '
       'hashes get checked into.')
   # Obsolete (Autoninja is now used, and this argument is ignored).
   parser.add_argument(
diff --git a/tools/metrics/actions/actions.xml b/tools/metrics/actions/actions.xml
index a3147a1..c5075e9 100644
--- a/tools/metrics/actions/actions.xml
+++ b/tools/metrics/actions/actions.xml
@@ -13735,6 +13735,14 @@
   <description>Please enter the description of this user action.</description>
 </action>
 
+<action name="MobileToolbarNewTabShortcut">
+  <owner>gambard@chromium.org</owner>
+  <owner>stkhapugin@chromium.org</owner>
+  <description>
+    User pressed the NewTab shortcut on the toolbar. iOS only.
+  </description>
+</action>
+
 <action name="MobileToolbarOmniboxAcceleratorTap">
   <owner>mdjones@chromium.org</owner>
   <owner>chrome-android-apps@chromium.org</owner>
diff --git a/tools/metrics/histograms/histograms.xml b/tools/metrics/histograms/histograms.xml
index af18065..595a717 100644
--- a/tools/metrics/histograms/histograms.xml
+++ b/tools/metrics/histograms/histograms.xml
@@ -7938,6 +7938,28 @@
   </summary>
 </histogram>
 
+<histogram name="Ash.HotseatTransition.Drag.PresentationTime" units="ms"
+    expires_after="2020-05-21">
+  <owner>anasalazar@chromium.org</owner>
+  <owner>newcomer@chromium.org</owner>
+  <summary>
+    Presentation time in ms of the hotseat when it changes between the hidden
+    and the extended state as a result of a drag action. Recorded when the drag
+    action is in progress.
+  </summary>
+</histogram>
+
+<histogram name="Ash.HotseatTransition.Drag.PresentationTime.MaxLatency"
+    units="ms" expires_after="2020-05-21">
+  <owner>anasalazar@chromium.org</owner>
+  <owner>newcomer@chromium.org</owner>
+  <summary>
+    Maximum latency of the presentation time in ms of the hotseat when it
+    changes between the hidden and the extended state as a result of a drag
+    action. Recorded when the drag action is finished.
+  </summary>
+</histogram>
+
 <histogram name="Ash.ImmersiveFullscreen.WindowType" enum="WindowType"
     expires_after="M77">
   <owner>kuscher@google.com</owner>
@@ -44872,6 +44894,9 @@
 
 <histogram name="Event.VizHitTestSurfaceLayer.ResultsMatch"
     enum="VizHitTestResultsMatchEnums" expires_after="M81">
+  <obsolete>
+    Deprecated as of 11/2019. The verification path is removed.
+  </obsolete>
   <owner>yigu@chromium.org</owner>
   <summary>
     This tracks how often the cc layer based hit testing fast path result
@@ -137978,6 +138003,16 @@
   </summary>
 </histogram>
 
+<histogram name="Setup.Install.CumulativeDiskUsage" units="MB"
+    expires_after="M82">
+  <owner>etiennep@chromium.org</owner>
+  <owner>grt@chromium.org</owner>
+  <summary>
+    The cumulative disk usage in MB during install or uninstall attempt,
+    recorded right after the install/uninstall attempt on windows only.
+  </summary>
+</histogram>
+
 <histogram name="Setup.Install.DeleteAppHost" enum="BooleanDeletedOrNot">
   <owner>grt@chromium.org</owner>
   <summary>
diff --git a/tools/metrics/ukm/ukm.xml b/tools/metrics/ukm/ukm.xml
index 3083c7c..a4ac44d 100644
--- a/tools/metrics/ukm/ukm.xml
+++ b/tools/metrics/ukm/ukm.xml
@@ -8339,6 +8339,12 @@
       currently contains text form entry.
     </summary>
   </metric>
+  <metric name="FailureLiveStateHasNotificationsPermission" enum="Boolean">
+    <summary>
+      Boolean indicating that the intervention was disallowed because the tab
+      has the permission to use notifications.
+    </summary>
+  </metric>
   <metric name="FailureLiveStateIsPDF" enum="Boolean">
     <summary>
       Boolean indicating that the intervention was disallowed because the tab is
diff --git a/ui/color/ui_color_mixer.cc b/ui/color/ui_color_mixer.cc
index ab7ea31..5204909 100644
--- a/ui/color/ui_color_mixer.cc
+++ b/ui/color/ui_color_mixer.cc
@@ -77,10 +77,8 @@
   mixer[kColorTextfieldSelectionBackground] = {kColorTextSelectionBackground};
   mixer[kColorTextfieldSelectionForeground] = {kColorTextfieldForeground};
   mixer[kColorThrobber] = {kColorAccent};
-  mixer[kColorTooltipBackground] =
-      SetAlpha(GetColorWithMaxContrast(kColorPrimaryBackground), 0xE9);
-  mixer[kColorTooltipForeground] =
-      SetAlpha(GetColorWithMaxContrast(kColorTooltipBackground), 0xDE);
+  mixer[kColorTooltipBackground] = SetAlpha(kColorPrimaryBackground, 0xCC);
+  mixer[kColorTooltipForeground] = SetAlpha(kColorPrimaryForeground, 0xDE);
   mixer[kColorTreeBackground] = {kColorPrimaryBackground};
   mixer[kColorTreeNodeForeground] = {kColorPrimaryForeground};
   mixer[kColorTreeNodeSelectedFocusedBackground] = {
diff --git a/ui/display/util/edid_parser_unittest.cc b/ui/display/util/edid_parser_unittest.cc
index 635d1ca..315d126 100644
--- a/ui/display/util/edid_parser_unittest.cc
+++ b/ui/display/util/edid_parser_unittest.cc
@@ -484,6 +484,6 @@
             parser_.supported_color_transfer_ids());
 }
 
-INSTANTIATE_TEST_SUITE_P(, EDIDParserTest, ValuesIn(kTestCases));
+INSTANTIATE_TEST_SUITE_P(All, EDIDParserTest, ValuesIn(kTestCases));
 
 }  // namespace display
diff --git a/ui/file_manager/integration_tests/file_manager/quick_view.js b/ui/file_manager/integration_tests/file_manager/quick_view.js
index 262da9c..aa6fad8 100644
--- a/ui/file_manager/integration_tests/file_manager/quick_view.js
+++ b/ui/file_manager/integration_tests/file_manager/quick_view.js
@@ -461,7 +461,7 @@
 
   /**
    * Tests opening Quick View on a text document to verify that the background
-   * color of the <webview> root (html) element.
+   * color of the <webview> root (html) element is solid white.
    */
   testcase.openQuickViewBackgroundColorText = async () => {
     const caller = getCaller();
@@ -501,8 +501,8 @@
     const backgroundColor = await remoteCall.callRemoteTestUtil(
         'deepExecuteScriptInWebView', appId, [webView, getBackgroundStyle]);
 
-    // Check: the <webview> root backgroundColor should be transparent.
-    chrome.test.assertEq('rgba(0, 0, 0, 0)', backgroundColor[0]);
+    // Check: the <webview> root backgroundColor should be solid white.
+    chrome.test.assertEq('rgb(255, 255, 255)', backgroundColor[0]);
   };
 
   /**
diff --git a/ui/gfx/paint_vector_icon.cc b/ui/gfx/paint_vector_icon.cc
index 82e2b9a..17b4efac 100644
--- a/ui/gfx/paint_vector_icon.cc
+++ b/ui/gfx/paint_vector_icon.cc
@@ -304,8 +304,8 @@
         SkScalar y = arg(6);
         SkPath::ArcSize arc_size =
             large_arc_flag ? SkPath::kLarge_ArcSize : SkPath::kSmall_ArcSize;
-        SkPath::Direction direction =
-            arc_sweep_flag ? SkPath::kCW_Direction : SkPath::kCCW_Direction;
+        SkPathDirection direction =
+            arc_sweep_flag ? SkPathDirection::kCW : SkPathDirection::kCCW;
 
         if (command_type == ARC_TO)
           path.arcTo(rx, ry, angle, arc_size, direction, x, y);
diff --git a/ui/gl/BUILD.gn b/ui/gl/BUILD.gn
index 7da3795b..b37e081 100644
--- a/ui/gl/BUILD.gn
+++ b/ui/gl/BUILD.gn
@@ -30,6 +30,12 @@
   import("//build/config/android/rules.gni")
 }
 
+# Reset sources_assignment_filter for the BUILD.gn file to prevent
+# regression during the migration of Chromium away from the feature.
+# See build/no_sources_assignment_filter.md for more information.
+# TODO(crbug.com/1018739): remove this when migration is done.
+set_sources_assignment_filter([])
+
 buildflag_header("buildflags") {
   header = "buildflags.h"
   flags = [
@@ -56,14 +62,6 @@
   output_name = "gl_wrapper"  # Avoid colliding with OS X"s libGL.dylib.
 
   sources = [
-    "android/android_surface_control_compat.cc",
-    "android/android_surface_control_compat.h",
-    "android/scoped_java_surface.cc",
-    "android/scoped_java_surface.h",
-    "android/surface_texture.cc",
-    "android/surface_texture.h",
-    "android/surface_texture_listener.cc",
-    "android/surface_texture_listener.h",
     "buffer_format_utils.cc",
     "buffer_format_utils.h",
     "ca_renderer_layer_params.cc",
@@ -154,6 +152,19 @@
     "trace_util.h",
   ]
 
+  if (is_android) {
+    sources += [
+      "android/android_surface_control_compat.cc",
+      "android/android_surface_control_compat.h",
+      "android/scoped_java_surface.cc",
+      "android/scoped_java_surface.h",
+      "android/surface_texture.cc",
+      "android/surface_texture.h",
+      "android/surface_texture_listener.cc",
+      "android/surface_texture_listener.h",
+    ]
+  }
+
   configs += [ "//build/config:precompiled_headers" ]
   defines = [ "GL_IMPLEMENTATION" ]
   if (enable_gpu_service_logging) {
diff --git a/ui/native_theme/common_theme.cc b/ui/native_theme/common_theme.cc
index 14e8da1..a5dd51e 100644
--- a/ui/native_theme/common_theme.cc
+++ b/ui/native_theme/common_theme.cc
@@ -139,6 +139,10 @@
       case NativeTheme::kColorId_TextfieldSelectionBackgroundFocused:
         return gfx::kGoogleBlue800;
 
+      // Tooltip
+      case NativeTheme::kColorId_TooltipText:
+        return SkColorSetA(gfx::kGoogleGrey200, 0xDE);
+
       // Tree
       case NativeTheme::kColorId_TreeBackground:
         return color_utils::AlphaBlend(SK_ColorWHITE, gfx::kGoogleGrey900,
@@ -311,13 +315,10 @@
     case NativeTheme::kColorId_TooltipBackground: {
       const SkColor bg = base_theme->GetSystemColor(
           NativeTheme::kColorId_WindowBackground, color_scheme);
-      return SkColorSetA(color_utils::GetColorWithMaxContrast(bg), 0xE9);
+      return SkColorSetA(bg, 0xCC);
     }
-    case NativeTheme::kColorId_TooltipText: {
-      const SkColor bg = base_theme->GetSystemColor(
-          NativeTheme::kColorId_TooltipBackground, color_scheme);
-      return SkColorSetA(color_utils::GetColorWithMaxContrast(bg), 0xDE);
-    }
+    case NativeTheme::kColorId_TooltipText:
+      return SkColorSetA(kPrimaryTextColor, 0xDE);
 
     // Tree
     case NativeTheme::kColorId_TreeBackground:
diff --git a/ui/ozone/platform/scenic/scenic_surface.cc b/ui/ozone/platform/scenic/scenic_surface.cc
index 457e89b..2b744f2b 100644
--- a/ui/ozone/platform/scenic/scenic_surface.cc
+++ b/ui/ozone/platform/scenic/scenic_surface.cc
@@ -42,8 +42,10 @@
       image_pipe_id, std::move(image_pipe_request)));
   material_.SetTexture(image_pipe_id);
   scenic_session_.ReleaseResource(image_pipe_id);
-  scenic_session_.Present(
-      /*presentation_time=*/0, [](fuchsia::images::PresentationInfo info) {});
+  scenic_session_.Present2(
+      /*requested_presentation_time=*/0,
+      /*requested_prediction_span=*/0,
+      [](fuchsia::scenic::scheduling::FuturePresentationTimes info) {});
 }
 
 void ScenicSurface::SetTextureToImage(const scenic::Image& image) {
@@ -62,8 +64,10 @@
       &scenic_session_, std::move(tokens.view_token), "chromium surface");
   parent_->AddChild(shape_);
 
-  scenic_session_.Present(
-      /*presentation_time=*/0, [](fuchsia::images::PresentationInfo info) {});
+  scenic_session_.Present2(
+      /*requested_presentation_time=*/0,
+      /*requested_prediction_span=*/0,
+      [](fuchsia::scenic::scheduling::FuturePresentationTimes info) {});
   return mojo::WrapPlatformHandle(
       mojo::PlatformHandle(std::move(tokens.view_holder_token.value)));
 }
diff --git a/ui/ozone/platform/scenic/scenic_window.cc b/ui/ozone/platform/scenic/scenic_window.cc
index 5ce4cd7..965ee62 100644
--- a/ui/ozone/platform/scenic/scenic_window.cc
+++ b/ui/ozone/platform/scenic/scenic_window.cc
@@ -78,8 +78,10 @@
   render_node_.DetachChildren();
   render_node_.AddChild(*surface_view_holder_);
 
-  scenic_session_.Present(
-      /*presentation_time=*/0, [](fuchsia::images::PresentationInfo info) {});
+  scenic_session_.Present2(
+      /*requested_presentation_time=*/0,
+      /*requested_prediction_span=*/0,
+      [](fuchsia::scenic::scheduling::FuturePresentationTimes info) {});
 }
 
 gfx::Rect ScenicWindow::GetBounds() {
@@ -98,10 +100,12 @@
 void ScenicWindow::Show(bool inactive) {
   view_.AddChild(node_);
 
-  // Call Present() to ensure that the scenic session commands are processed,
+  // Call Present2() to ensure that the scenic session commands are processed,
   // which is necessary to receive metrics event from Scenic.
-  scenic_session_.Present(
-      /*presentation_time=*/0, [](fuchsia::images::PresentationInfo info) {});
+  scenic_session_.Present2(
+      /*requested_presentation_time=*/0,
+      /*requested_prediction_span=*/0,
+      [](fuchsia::scenic::scheduling::FuturePresentationTimes info) {});
 }
 
 void ScenicWindow::Hide() {
@@ -224,8 +228,10 @@
 
   // This is necessary when using vulkan because ImagePipes are presented
   // separately and we need to make sure our sizes change is committed.
-  scenic_session_.Present(
-      /*presentation_time=*/0, [](fuchsia::images::PresentationInfo info) {});
+  scenic_session_.Present2(
+      /*requested_presentation_time=*/0,
+      /*requested_prediction_span=*/0,
+      [](fuchsia::scenic::scheduling::FuturePresentationTimes info) {});
 
   delegate_->OnBoundsChanged(size_rect);
 }
diff --git a/ui/ozone/platform/scenic/scenic_window_canvas.cc b/ui/ozone/platform/scenic/scenic_window_canvas.cc
index 9f8d43e3d..9d5367176 100644
--- a/ui/ozone/platform/scenic/scenic_window_canvas.cc
+++ b/ui/ozone/platform/scenic/scenic_window_canvas.cc
@@ -155,7 +155,7 @@
     ZX_CHECK(status == ZX_OK, status);
   }
 
-  // Add release-fence for the Present() call below. The fence is used in
+  // Add release-fence for the Present2() call below. The fence is used in
   // GetCanvas() to ensure that we reuse the buffer only after it's released
   // from scenic.
   zx::event release_fence_dup;
@@ -164,8 +164,10 @@
   ZX_CHECK(status == ZX_OK, status);
   scenic_surface_->scenic_session()->EnqueueReleaseFence(
       std::move(release_fence_dup));
-  scenic_surface_->scenic_session()->Present(
-      /*presentation_time=*/0, [](fuchsia::images::PresentationInfo info) {});
+  scenic_surface_->scenic_session()->Present2(
+      /*requested_presentation_time=*/0,
+      /*requested_prediction_span=*/0,
+      [](fuchsia::scenic::scheduling::FuturePresentationTimes info) {});
 
   // Move to the next buffer.
   current_frame_ = (current_frame_ + 1) % kNumBuffers;
@@ -173,7 +175,8 @@
 
 std::unique_ptr<gfx::VSyncProvider> ScenicWindowCanvas::CreateVSyncProvider() {
   // TODO(crbug.com/829980): Implement VSyncProvider. It can be implemented by
-  // observing PresentationInfo returned from scenic::Session::Present().
+  // observing FuturePresentationTimes returned from
+  // scenic::Session::Present2().
   return nullptr;
 }
 
diff --git a/ui/ozone/platform/wayland/host/wayland_window.cc b/ui/ozone/platform/wayland/host/wayland_window.cc
index 5a9f7ea..9adba11b 100644
--- a/ui/ozone/platform/wayland/host/wayland_window.cc
+++ b/ui/ozone/platform/wayland/host/wayland_window.cc
@@ -574,7 +574,20 @@
 }
 
 void WaylandWindow::SizeConstraintsChanged() {
-  NOTIMPLEMENTED_LOG_ONCE();
+  // Size constraints only make sense for normal windows.
+  if (!xdg_surface_)
+    return;
+
+  DCHECK(delegate_);
+  auto min_size = delegate_->GetMinimumSizeForWindow();
+  auto max_size = delegate_->GetMaximumSizeForWindow();
+
+  if (min_size.has_value())
+    xdg_surface_->SetMinSize(min_size->width(), min_size->height());
+  if (max_size.has_value())
+    xdg_surface_->SetMaxSize(max_size->width(), max_size->height());
+
+  connection_->ScheduleFlush();
 }
 
 bool WaylandWindow::CanDispatchEvent(const PlatformEvent& event) {
diff --git a/ui/ozone/platform/wayland/host/wayland_window_unittest.cc b/ui/ozone/platform/wayland/host/wayland_window_unittest.cc
index 36835d5..fb55666e 100644
--- a/ui/ozone/platform/wayland/host/wayland_window_unittest.cc
+++ b/ui/ozone/platform/wayland/host/wayland_window_unittest.cc
@@ -31,6 +31,7 @@
 using ::testing::_;
 using ::testing::Eq;
 using ::testing::Mock;
+using ::testing::Return;
 using ::testing::SaveArg;
 using ::testing::StrEq;
 
@@ -1223,6 +1224,39 @@
   menu_window->SetPointerFocus(false);
 }
 
+TEST_P(WaylandWindowTest, OnSizeConstraintsChanged) {
+  // Only shell v6 exercises this test as long as shell v5 does not support
+  // size constraints.
+  if (GetParam() == kXdgShellV5)
+    return;
+
+  const bool kBooleans[] = {false, true};
+  for (bool has_min_size : kBooleans) {
+    for (bool has_max_size : kBooleans) {
+      base::Optional<gfx::Size> min_size =
+          has_min_size ? base::Optional<gfx::Size>(gfx::Size(100, 200))
+                       : base::nullopt;
+      base::Optional<gfx::Size> max_size =
+          has_max_size ? base::Optional<gfx::Size>(gfx::Size(300, 400))
+                       : base::nullopt;
+      EXPECT_CALL(delegate_, GetMinimumSizeForWindow())
+          .WillOnce(Return(min_size));
+      EXPECT_CALL(delegate_, GetMaximumSizeForWindow())
+          .WillOnce(Return(max_size));
+
+      EXPECT_CALL(*GetXdgSurface(), SetMinSize(100, 200))
+          .Times(has_min_size ? 1 : 0);
+      EXPECT_CALL(*GetXdgSurface(), SetMaxSize(300, 400))
+          .Times(has_max_size ? 1 : 0);
+
+      window_->SizeConstraintsChanged();
+      Sync();
+
+      VerifyAndClearExpectations();
+    }
+  }
+}
+
 INSTANTIATE_TEST_SUITE_P(XdgVersionV5Test,
                          WaylandWindowTest,
                          ::testing::Values(kXdgShellV5));
diff --git a/ui/ozone/platform/wayland/host/xdg_surface_wrapper.h b/ui/ozone/platform/wayland/host/xdg_surface_wrapper.h
index eaa4cec..6857092 100644
--- a/ui/ozone/platform/wayland/host/xdg_surface_wrapper.h
+++ b/ui/ozone/platform/wayland/host/xdg_surface_wrapper.h
@@ -60,6 +60,12 @@
   // Sets a desired window geometry once wayland requests client to do so.
   virtual void SetWindowGeometry(const gfx::Rect& bounds) = 0;
 
+  // Sets the minimum size for the top level.
+  virtual void SetMinSize(int32_t width, int32_t height) = 0;
+
+  // Sets the maximum size for the top level.
+  virtual void SetMaxSize(int32_t width, int32_t height) = 0;
+
   // Sets an app id of the native window that is shown as an application name
   // and hints the compositor that it can group application surfaces together by
   // their app id. This also helps the compositor to identify application's
diff --git a/ui/ozone/platform/wayland/host/xdg_surface_wrapper_v5.cc b/ui/ozone/platform/wayland/host/xdg_surface_wrapper_v5.cc
index 9681d58..06dddb4 100644
--- a/ui/ozone/platform/wayland/host/xdg_surface_wrapper_v5.cc
+++ b/ui/ozone/platform/wayland/host/xdg_surface_wrapper_v5.cc
@@ -80,6 +80,10 @@
                                   bounds.width(), bounds.height());
 }
 
+void XDGSurfaceWrapperV5::SetMinSize(int32_t width, int32_t height) {}
+
+void XDGSurfaceWrapperV5::SetMaxSize(int32_t width, int32_t height) {}
+
 void XDGSurfaceWrapperV5::SetAppId(const std::string& app_id) {
   xdg_surface_set_app_id(xdg_surface_.get(), app_id.c_str());
 }
diff --git a/ui/ozone/platform/wayland/host/xdg_surface_wrapper_v5.h b/ui/ozone/platform/wayland/host/xdg_surface_wrapper_v5.h
index a91bb5b..46b5cef 100644
--- a/ui/ozone/platform/wayland/host/xdg_surface_wrapper_v5.h
+++ b/ui/ozone/platform/wayland/host/xdg_surface_wrapper_v5.h
@@ -35,6 +35,8 @@
   void SetTitle(const base::string16& title) override;
   void AckConfigure() override;
   void SetWindowGeometry(const gfx::Rect& bounds) override;
+  void SetMinSize(int32_t width, int32_t height) override;
+  void SetMaxSize(int32_t width, int32_t height) override;
   void SetAppId(const std::string& app_id) override;
 
   // xdg_surface_listener
diff --git a/ui/ozone/platform/wayland/host/xdg_surface_wrapper_v6.cc b/ui/ozone/platform/wayland/host/xdg_surface_wrapper_v6.cc
index f9b0abd..e359987 100644
--- a/ui/ozone/platform/wayland/host/xdg_surface_wrapper_v6.cc
+++ b/ui/ozone/platform/wayland/host/xdg_surface_wrapper_v6.cc
@@ -116,6 +116,16 @@
                                       bounds.height());
 }
 
+void XDGSurfaceWrapperV6::SetMinSize(int32_t width, int32_t height) {
+  DCHECK(zxdg_toplevel_v6_);
+  zxdg_toplevel_v6_set_min_size(zxdg_toplevel_v6_.get(), width, height);
+}
+
+void XDGSurfaceWrapperV6::SetMaxSize(int32_t width, int32_t height) {
+  DCHECK(zxdg_toplevel_v6_);
+  zxdg_toplevel_v6_set_max_size(zxdg_toplevel_v6_.get(), width, height);
+}
+
 void XDGSurfaceWrapperV6::SetAppId(const std::string& app_id) {
   zxdg_toplevel_v6_set_app_id(zxdg_toplevel_v6_.get(), app_id.c_str());
 }
diff --git a/ui/ozone/platform/wayland/host/xdg_surface_wrapper_v6.h b/ui/ozone/platform/wayland/host/xdg_surface_wrapper_v6.h
index b35da0c..b9d6b6d 100644
--- a/ui/ozone/platform/wayland/host/xdg_surface_wrapper_v6.h
+++ b/ui/ozone/platform/wayland/host/xdg_surface_wrapper_v6.h
@@ -37,6 +37,8 @@
   void SetTitle(const base::string16& title) override;
   void AckConfigure() override;
   void SetWindowGeometry(const gfx::Rect& bounds) override;
+  void SetMinSize(int32_t width, int32_t height) override;
+  void SetMaxSize(int32_t width, int32_t height) override;
   void SetAppId(const std::string& app_id) override;
 
   // xdg_surface_listener
diff --git a/ui/ozone/platform/wayland/test/mock_xdg_surface.cc b/ui/ozone/platform/wayland/test/mock_xdg_surface.cc
index 06f1d58..5c681b0 100644
--- a/ui/ozone/platform/wayland/test/mock_xdg_surface.cc
+++ b/ui/ozone/platform/wayland/test/mock_xdg_surface.cc
@@ -122,6 +122,20 @@
   mock_xdg_surface->set_xdg_popup(std::move(mock_xdg_popup));
 }
 
+void SetMaxSize(wl_client* client,
+                wl_resource* resource,
+                int32_t width,
+                int32_t height) {
+  GetUserDataAs<MockXdgSurface>(resource)->SetMaxSize(width, height);
+}
+
+void SetMinSize(wl_client* client,
+                wl_resource* resource,
+                int32_t width,
+                int32_t height) {
+  GetUserDataAs<MockXdgSurface>(resource)->SetMinSize(width, height);
+}
+
 const struct xdg_surface_interface kMockXdgSurfaceImpl = {
     &DestroyResource,    // destroy
     nullptr,             // set_parent
@@ -155,8 +169,8 @@
     nullptr,           // show_window_menu
     &Move,             // move
     &Resize,           // resize
-    nullptr,           // set_max_size
-    nullptr,           // set_min_size
+    &SetMaxSize,       // set_max_size
+    &SetMinSize,       // set_min_size
     &SetMaximized,     // set_maximized
     &UnsetMaximized,   // set_unmaximized
     &SetFullscreen,    // set_fullscreen
diff --git a/ui/ozone/platform/wayland/test/mock_xdg_surface.h b/ui/ozone/platform/wayland/test/mock_xdg_surface.h
index 0576a1e..0f178eb 100644
--- a/ui/ozone/platform/wayland/test/mock_xdg_surface.h
+++ b/ui/ozone/platform/wayland/test/mock_xdg_surface.h
@@ -48,6 +48,10 @@
   MOCK_METHOD0(UnsetFullscreen, void());
   MOCK_METHOD0(SetMinimized, void());
 
+  // These methods are for zxdg_toplevel only.
+  MOCK_METHOD2(SetMaxSize, void(int32_t width, int32_t height));
+  MOCK_METHOD2(SetMinSize, void(int32_t width, int32_t height));
+
   void set_xdg_toplevel(std::unique_ptr<MockXdgTopLevel> xdg_toplevel) {
     xdg_toplevel_ = std::move(xdg_toplevel);
   }
diff --git a/ui/ozone/test/mock_platform_window_delegate.h b/ui/ozone/test/mock_platform_window_delegate.h
index 21ab4f3..fbc4261 100644
--- a/ui/ozone/test/mock_platform_window_delegate.h
+++ b/ui/ozone/test/mock_platform_window_delegate.h
@@ -27,6 +27,8 @@
                void(gfx::AcceleratedWidget widget));
   MOCK_METHOD0(OnAcceleratedWidgetDestroyed, void());
   MOCK_METHOD1(OnActivationChanged, void(bool active));
+  MOCK_METHOD0(GetMinimumSizeForWindow, base::Optional<gfx::Size>());
+  MOCK_METHOD0(GetMaximumSizeForWindow, base::Optional<gfx::Size>());
   MOCK_METHOD0(OnMouseEnter, void());
 
  private:
diff --git a/ui/views/accessibility/view_ax_platform_node_delegate_win_unittest.cc b/ui/views/accessibility/view_ax_platform_node_delegate_win_unittest.cc
index 7f931e9..162bf572 100644
--- a/ui/views/accessibility/view_ax_platform_node_delegate_win_unittest.cc
+++ b/ui/views/accessibility/view_ax_platform_node_delegate_win_unittest.cc
@@ -164,7 +164,7 @@
   ~ViewAXPlatformNodeDelegateWinTestWithBoolChildFlag() override = default;
 };
 
-INSTANTIATE_TEST_SUITE_P(,
+INSTANTIATE_TEST_SUITE_P(All,
                          ViewAXPlatformNodeDelegateWinTestWithBoolChildFlag,
                          testing::Bool());
 
diff --git a/ui/views/corewm/tooltip_aura.cc b/ui/views/corewm/tooltip_aura.cc
index 5654a03..c13794a 100644
--- a/ui/views/corewm/tooltip_aura.cc
+++ b/ui/views/corewm/tooltip_aura.cc
@@ -135,18 +135,16 @@
     render_text_->SetColor(color);
   }
 
-  void SetBackgroundColor(SkColor background_color) {
+  void SetBackgroundColor(SkColor background_color, SkColor border_color) {
     if (CanUseTranslucentTooltipWidget()) {
       // Corner radius of tooltip background.
       const float kTooltipCornerRadius = 2.f;
       SetBackground(views::CreateBackgroundFromPainter(
-          views::Painter::CreateSolidRoundRectPainter(background_color,
-                                                      kTooltipCornerRadius)));
+          views::Painter::CreateRoundRectWith1PxBorderPainter(
+              background_color, border_color, kTooltipCornerRadius)));
     } else {
       SetBackground(views::CreateSolidBackground(background_color));
 
-      auto border_color =
-          color_utils::GetColorWithMaxContrast(background_color);
       SetBorder(views::CreatePaddedBorder(
           views::CreateSolidBorder(1, border_color),
           gfx::Insets(kVerticalPaddingTop - 1, kHorizontalPadding - 1,
@@ -254,13 +252,17 @@
   ui::NativeTheme* native_theme = widget_->GetNativeTheme();
   auto background_color =
       native_theme->GetSystemColor(ui::NativeTheme::kColorId_TooltipBackground);
-  if (!CanUseTranslucentTooltipWidget())
-    background_color = SkColorSetA(background_color, 0xFF);
-  tooltip_view_->SetBackgroundColor(background_color);
+  if (!CanUseTranslucentTooltipWidget()) {
+    background_color = color_utils::GetResultingPaintColor(
+        background_color, native_theme->GetSystemColor(
+                              ui::NativeTheme::kColorId_WindowBackground));
+  }
   auto foreground_color =
       native_theme->GetSystemColor(ui::NativeTheme::kColorId_TooltipText);
   if (!CanUseTranslucentTooltipWidget())
-    foreground_color = SkColorSetA(foreground_color, 0xFF);
+    foreground_color =
+        color_utils::GetResultingPaintColor(foreground_color, background_color);
+  tooltip_view_->SetBackgroundColor(background_color, foreground_color);
   tooltip_view_->SetForegroundColor(foreground_color);
 }
 
diff --git a/weblayer/README.md b/weblayer/README.md
index c9640f7..0610a7f 100644
--- a/weblayer/README.md
+++ b/weblayer/README.md
@@ -63,4 +63,11 @@
 $ autoninja -C out/Default weblayer_instrumentation_test_apk
 $ out/Default/bin/run_weblayer_instrumentation_test_apk
 
+Note: this may not work on some versions of Android. If you see an error setting
+the WebView provider when running instrumentation tests, try running the tests
+using the WebLayer support APK which uses a different loading path:
+
+$ autoninja -C out/Default weblayer_support_instrumentation_test_apk
+$ out/Default/bin/run_weblayer_support_instrumentation_test_apk
+
 The test script will build and install all necessary APKs.
diff --git a/weblayer/browser/android/javatests/BUILD.gn b/weblayer/browser/android/javatests/BUILD.gn
index 7af13a3..288ebce 100644
--- a/weblayer/browser/android/javatests/BUILD.gn
+++ b/weblayer/browser/android/javatests/BUILD.gn
@@ -5,19 +5,8 @@
 import("//build/config/android/config.gni")
 import("//build/config/android/rules.gni")
 
-instrumentation_test_apk("weblayer_instrumentation_test_apk") {
-  apk_name = "WebLayerInstrumentationTest"
-  apk_under_test = "//weblayer/shell/android:weblayer_shell_system_webview_apk"
-  android_manifest = "AndroidManifest.xml"
-  min_sdk_version = 21
-  deps = [
-    "//base:base_java_test_support",
-    "//components/safe_browsing/android:safe_browsing_java",
-    "//content/public/test/android:content_java_test_support",
-    "//net/android:net_java_test_support",
-    "//third_party/android_support_test_runner:runner_java",
-    "//weblayer/public/javatests:weblayer_public_javatests",
-  ]
+android_library("weblayer_java_tests") {
+  testonly = true
   java_files = [
     "src/org/chromium/weblayer/test/BrowserFragmentLifecycleTest.java",
     "src/org/chromium/weblayer/test/DataClearingTest.java",
@@ -40,9 +29,57 @@
     "src/org/chromium/weblayer/test/TopControlsTest.java",
     "src/org/chromium/weblayer/test/WebLayerLoadingTest.java",
   ]
-  additional_apks = [ "//net/android:net_test_support_apk" ]
-  data = [
-    "//weblayer/test/data/",
+  deps = [
+    "//base:base_java",
+    "//base:base_java_test_support",
+    "//components/safe_browsing/android:safe_browsing_java",
+    "//content/public/test/android:content_java_test_support",
+    "//net/android:net_java_test_support",
+    "//third_party/android_deps:android_support_v4_java",
+    "//third_party/android_deps:com_android_support_support_compat_java",
+    "//third_party/android_deps:com_android_support_support_fragment_java",
+    "//third_party/android_support_test_runner:rules_java",
+    "//third_party/android_support_test_runner:runner_java",
+    "//third_party/junit:junit",
+    "//weblayer/public/java",
+    "//weblayer/public/javatests:weblayer_public_javatests",
+    "//weblayer/shell/android:weblayer_shell_java",
   ]
+}
+
+template("weblayer_instrumentation") {
+  instrumentation_test_apk(target_name) {
+    forward_variables_from(invoker, "*")
+
+    android_manifest = "AndroidManifest.xml"
+    min_sdk_version = 21
+    deps = [
+      ":weblayer_java_tests",
+    ]
+    if (!defined(additional_apks)) {
+      additional_apks = []
+    }
+    additional_apks += [ "//net/android:net_test_support_apk" ]
+    data = [
+      "//weblayer/test/data/",
+    ]
+  }
+}
+
+# Runs the instrumentation tests loading the implementation from the default
+# WebView provider. This is the loading path that is used in production.
+# TODO(cduvall): Figure out why the test infrastructure fails on some Android
+# versions.
+weblayer_instrumentation("weblayer_instrumentation_test_apk") {
+  apk_name = "WebLayerInstrumentationTest"
+  apk_under_test = "//weblayer/shell/android:weblayer_shell_system_webview_apk"
   use_webview_provider = "//android_webview:system_webview_apk"
 }
+
+# Runs the instrumentation tests loading the implementation from the WebLayer
+# support library.
+weblayer_instrumentation("weblayer_support_instrumentation_test_apk") {
+  apk_name = "WebLayerSupportInstrumentationTest"
+  apk_under_test = "//weblayer/shell/android:weblayer_shell_apk"
+  additional_apks = [ "//weblayer/shell/android:weblayer_support_apk" ]
+}