diff --git a/src/cobalt/audio/audio_destination_node.cc b/src/cobalt/audio/audio_destination_node.cc
index 6f82ba8..3f0505f 100644
--- a/src/cobalt/audio/audio_destination_node.cc
+++ b/src/cobalt/audio/audio_destination_node.cc
@@ -62,11 +62,15 @@
     SB_LOG(INFO) << "Created audio device " << audio_device_.get() << '.';
     context()->PreventGarbageCollection();
   }
-  audio_device_to_delete_ = NULL;
+  delete_audio_device_ = false;
 }
 
 void AudioDestinationNode::FillAudioBus(bool all_consumed, AudioBus* audio_bus,
                                         bool* silence) {
+  if (delete_audio_device_) {
+    return;
+  }
+
   // This is called on Audio thread.
   AudioLock::AutoLock lock(audio_lock());
 
@@ -74,11 +78,10 @@
   DCHECK_EQ(number_of_inputs(), 1u);
   bool all_finished = true;
   Input(0)->FillAudioBus(audio_bus, silence, &all_finished);
-  if (all_consumed && all_finished &&
-      audio_device_to_delete_ != audio_device_.get()) {
+  if (all_consumed && all_finished) {
     SB_LOG(INFO) << "Schedule to destroy audio device " << audio_device_.get()
                  << '.';
-    audio_device_to_delete_ = audio_device_.get();
+    delete_audio_device_ = true;
     message_loop_->task_runner()->PostTask(
         FROM_HERE, base::Bind(&AudioDestinationNode::DestroyAudioDevice,
                               base::Unretained(this)));
@@ -90,10 +93,11 @@
   if (!audio_device_.get()) {
     return;
   }
-  if (audio_device_.get() == audio_device_to_delete_) {
+  if (delete_audio_device_) {
     SB_LOG(INFO) << "Destroying audio device " << audio_device_.get() << '.';
     audio_device_.reset();
     context()->AllowGarbageCollection();
+    delete_audio_device_ = false;
   }
 }
 
diff --git a/src/cobalt/audio/audio_destination_node.h b/src/cobalt/audio/audio_destination_node.h
index b758d92..77cee04 100644
--- a/src/cobalt/audio/audio_destination_node.h
+++ b/src/cobalt/audio/audio_destination_node.h
@@ -74,7 +74,7 @@
   uint32 max_channel_count_;
 
   std::unique_ptr<AudioDevice> audio_device_;
-  AudioDevice* audio_device_to_delete_ = NULL;
+  std::atomic_bool delete_audio_device_ = {false};
 
   DISALLOW_COPY_AND_ASSIGN(AudioDestinationNode);
 };
diff --git a/src/cobalt/browser/browser_module.cc b/src/cobalt/browser/browser_module.cc
index 1f6e058..f66ed8b 100644
--- a/src/cobalt/browser/browser_module.cc
+++ b/src/cobalt/browser/browser_module.cc
@@ -1461,8 +1461,7 @@
   DCHECK_EQ(base::MessageLoop::current(), self_message_loop_);
   DCHECK(application_state_ == base::kApplicationStateStarted);
   application_state_ = base::kApplicationStateBlurred;
-  FOR_EACH_OBSERVER(LifecycleObserver,
-                    lifecycle_observers_, Blur(timestamp));
+  FOR_EACH_OBSERVER(LifecycleObserver, lifecycle_observers_, Blur(timestamp));
 }
 
 void BrowserModule::Conceal(SbTimeMonotonic timestamp) {
@@ -1477,8 +1476,7 @@
   TRACE_EVENT0("cobalt::browser", "BrowserModule::Focus()");
   DCHECK_EQ(base::MessageLoop::current(), self_message_loop_);
   DCHECK(application_state_ == base::kApplicationStateBlurred);
-  FOR_EACH_OBSERVER(LifecycleObserver,
-                    lifecycle_observers_, Focus(timestamp));
+  FOR_EACH_OBSERVER(LifecycleObserver, lifecycle_observers_, Focus(timestamp));
   application_state_ = base::kApplicationStateStarted;
 }
 
@@ -1629,12 +1627,12 @@
                                                options_.media_module_options));
 
     if (web_module_) {
-      web_module_->SetCamera3D(input_device_manager_->camera_3d());
       web_module_->SetMediaModule(media_module_.get());
     }
   }
 
   if (web_module_) {
+    web_module_->UpdateCamera3D(input_device_manager_->camera_3d());
     web_module_->GetUiNavRoot()->SetContainerWindow(
         system_window_->GetSbWindow());
   }
@@ -1782,8 +1780,7 @@
   FreezeMediaModule();
   // First freeze all our web modules which implies that they will release
   // their resource provider and all resources created through it.
-  FOR_EACH_OBSERVER(LifecycleObserver,
-                    lifecycle_observers_, Freeze(timestamp));
+  FOR_EACH_OBSERVER(LifecycleObserver, lifecycle_observers_, Freeze(timestamp));
 }
 
 void BrowserModule::RevealInternal(SbTimeMonotonic timestamp) {
@@ -2095,14 +2092,12 @@
 }
 
 void BrowserModule::SetApplicationStartOrPreloadTimestamp(
-  bool is_preload, SbTimeMonotonic timestamp) {
+    bool is_preload, SbTimeMonotonic timestamp) {
   DCHECK(web_module_);
-  web_module_->SetApplicationStartOrPreloadTimestamp(
-      is_preload, timestamp);
+  web_module_->SetApplicationStartOrPreloadTimestamp(is_preload, timestamp);
 }
 
-void BrowserModule::SetDeepLinkTimestamp(
-    SbTimeMonotonic timestamp) {
+void BrowserModule::SetDeepLinkTimestamp(SbTimeMonotonic timestamp) {
   DCHECK(web_module_);
   web_module_->SetDeepLinkTimestamp(timestamp);
 }
diff --git a/src/cobalt/browser/web_module.cc b/src/cobalt/browser/web_module.cc
index ef84f3b..06600b8 100644
--- a/src/cobalt/browser/web_module.cc
+++ b/src/cobalt/browser/web_module.cc
@@ -217,7 +217,7 @@
 #endif  // defined(ENABLE_DEBUGGER)
 
   void SetSize(cssom::ViewportSize viewport_size);
-  void SetCamera3D(const scoped_refptr<input::Camera3D>& camera_3d);
+  void UpdateCamera3D(const scoped_refptr<input::Camera3D>& camera_3d);
   void SetMediaModule(media::MediaModule* media_module);
   void SetImageCacheCapacity(int64_t bytes);
   void SetRemoteTypefaceCacheCapacity(int64_t bytes);
@@ -1123,9 +1123,9 @@
   window_->SetSize(viewport_size);
 }
 
-void WebModule::Impl::SetCamera3D(
+void WebModule::Impl::UpdateCamera3D(
     const scoped_refptr<input::Camera3D>& camera_3d) {
-  window_->SetCamera3D(camera_3d);
+  window_->UpdateCamera3D(camera_3d);
 }
 
 void WebModule::Impl::SetMediaModule(media::MediaModule* media_module) {
@@ -1666,9 +1666,10 @@
                             base::Unretained(impl_.get()), viewport_size));
 }
 
-void WebModule::SetCamera3D(const scoped_refptr<input::Camera3D>& camera_3d) {
+void WebModule::UpdateCamera3D(
+    const scoped_refptr<input::Camera3D>& camera_3d) {
   message_loop()->task_runner()->PostTask(
-      FROM_HERE, base::Bind(&WebModule::Impl::SetCamera3D,
+      FROM_HERE, base::Bind(&WebModule::Impl::UpdateCamera3D,
                             base::Unretained(impl_.get()), camera_3d));
 }
 
diff --git a/src/cobalt/browser/web_module.h b/src/cobalt/browser/web_module.h
index 16c830d..20b39bb 100644
--- a/src/cobalt/browser/web_module.h
+++ b/src/cobalt/browser/web_module.h
@@ -370,7 +370,7 @@
   // from the current parameters.
   void SetSize(const cssom::ViewportSize& viewport_size);
 
-  void SetCamera3D(const scoped_refptr<input::Camera3D>& camera_3d);
+  void UpdateCamera3D(const scoped_refptr<input::Camera3D>& camera_3d);
   void SetMediaModule(media::MediaModule* media_module);
   void SetImageCacheCapacity(int64_t bytes);
   void SetRemoteTypefaceCacheCapacity(int64_t bytes);
@@ -412,6 +412,7 @@
   void SetApplicationStartOrPreloadTimestamp(bool is_preload,
                                              SbTimeMonotonic timestamp);
   void SetDeepLinkTimestamp(SbTimeMonotonic timestamp);
+
  private:
   // Data required to construct a WebModule, initialized in the constructor and
   // passed to |Initialize|.
diff --git a/src/cobalt/build/build.id b/src/cobalt/build/build.id
index ba0b6d4..ce625a1 100644
--- a/src/cobalt/build/build.id
+++ b/src/cobalt/build/build.id
@@ -1 +1 @@
-304707
\ No newline at end of file
+304997
\ No newline at end of file
diff --git a/src/cobalt/doc/gyp_gn_files.md b/src/cobalt/doc/gyp_gn_files.md
deleted file mode 100644
index 452bfa7..0000000
--- a/src/cobalt/doc/gyp_gn_files.md
+++ /dev/null
@@ -1,19 +0,0 @@
-# GYP files and their corresponding GN files
-
-Generally, `foo/bar/bar.gyp` corresponds to `foo/bar/BUILD.gn`, while
-`foo/bar/baz.gyp` corresponds to either `foo/bar/baz/BUILD.gn` or
-`foo/bar/BUILD.gn` (depending on whether it made sense to combine `baz.gyp` with
-`bar.gyp`). `foo/bar/quux.gypi` typically corresponds to
-`foo/bar/quux.gni`. Here is a table of irregular correspondences:
-
-GYP File                                            | GN File                                                                   | Notes
---------------------------------------------------- | ------------------------------------------------------------------------- |------
-build/common.gypi                                   | cobalt/build/config/base.gni, starboard/build/config/base.gni (variables) | A few variables have been omitted, moved to `BUILDCONFIG.gn` instead, or refactored into configs. See the GYP -> GN cookbook for more info.
-build/common.gypi                                   | cobalt/build/config/BUILD.gn (target defaults)
-cobalt/build/all.gyp                                | BUILD.gn (in root directory)                                              | GN requires this location to be used
-cobalt/build/config/base.gypi                       | cobalt/build/config/base.gni, starboard/build/config/base.gni (variables) | See comments for `build/common.gypi`
-starboard/linux/shared/compiler_flags.gypi          | starboard/linux/shared/BUILD.gn                                           | "Compiler Defaults" section
-starboard/linux/shared/starboard_base_symbolize.gyp | starboard/linux/shared/BUILD.gn                                           | "starboard_platform Target" section
-starboard/linux/shared/starboard_platform.gypi      | starboard/linux/shared/BUILD.gn                                           | "starboard_platform Target" section
-starboard/linux/x64x11/libraries.gypi               | starboard/linux/x64x11/BUILD.gn                                           | `libs` variable of the `compiler_defaults` config
-starboard/starboard_base_target.gypi                | starboard/build/config/BUILD.gn                                           | "Compiler Defaults" section
diff --git a/src/cobalt/dom/font_cache.cc b/src/cobalt/dom/font_cache.cc
index ce58fe0..93e64d6 100644
--- a/src/cobalt/dom/font_cache.cc
+++ b/src/cobalt/dom/font_cache.cc
@@ -159,34 +159,21 @@
   return cached_font_info.font;
 }
 
-std::vector<FontFace*> FontCache::GetFacesForFamilyAndStyle(
-    const std::string& family, render_tree::FontStyle style) {
-  std::vector<FontFace*> faces;
-  FontFaceMap::iterator font_face_map_iterator = font_face_map_->find(family);
-  if (font_face_map_iterator != font_face_map_->end()) {
-    // Add all font-face entries that match the family.
-    std::vector<const FontFaceStyleSet::Entry*> entries =
-        font_face_map_iterator->second.GetEntriesThatMatchStyle(style);
-    for (auto entry : entries) {
-      FontFace* face = new FontFace();
-      face->entry = entry;
-      faces.push_back(face);
-    }
-  } else {
-    // This is a local font. One face can represent it.
-    FontFace* face = new FontFace();
-    faces.push_back(face);
-  }
-  return faces;
-}
-
 scoped_refptr<render_tree::Font> FontCache::TryGetFont(
     const std::string& family, render_tree::FontStyle style, float size,
-    FontFace::State* state,
-    const FontFaceStyleSet::Entry* maybe_style_set_entry) {
+    FontListFont::State* state) {
   DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
+  FontFaceMap::iterator font_face_map_iterator = font_face_map_->find(family);
   int64 request_time_start = base::TimeTicks::Now().ToInternalValue();
-  if (maybe_style_set_entry) {
+  if (font_face_map_iterator != font_face_map_->end()) {
+    // Retrieve the font face style set entry that most closely matches the
+    // desired style. Given that a font face was found for this family, it
+    // should never be NULL.
+    // https://www.w3.org/TR/css3-fonts/#font-prop-desc
+    const FontFaceStyleSet::Entry* style_set_entry =
+        font_face_map_iterator->second.MatchStyle(style);
+    DCHECK(style_set_entry != NULL);
+
     // Walk the entry's sources:
     // - If a remote source is encountered, always return the results of its
     //   attempted retrieval, regardless of its success.
@@ -196,9 +183,8 @@
     //   instead.
     // https://www.w3.org/TR/css3-fonts/#src-desc
     for (FontFaceSources::const_iterator source_iterator =
-             maybe_style_set_entry->sources.begin();
-         source_iterator != maybe_style_set_entry->sources.end();
-         ++source_iterator) {
+             style_set_entry->sources.begin();
+         source_iterator != style_set_entry->sources.end(); ++source_iterator) {
       if (source_iterator->IsUrlSource()) {
         auto font = TryGetRemoteFont(source_iterator->GetUrl(), size, state);
         GlobalStats::GetInstance()->OnFontRequestComplete(request_time_start);
@@ -213,7 +199,7 @@
       }
     }
 
-    *state = FontFace::kUnavailableState;
+    *state = FontListFont::kUnavailableState;
     return NULL;
   } else {
     auto font = TryGetLocalFont(family, style, size, state);
@@ -349,7 +335,7 @@
 }
 
 scoped_refptr<render_tree::Font> FontCache::TryGetRemoteFont(
-    const GURL& url, float size, FontFace::State* state) {
+    const GURL& url, float size, FontListFont::State* state) {
   // Retrieve the font from the remote typeface cache, potentially triggering a
   // load.
   scoped_refptr<loader::font::CachedRemoteTypeface> cached_remote_typeface =
@@ -384,16 +370,16 @@
   scoped_refptr<render_tree::Typeface> typeface =
       cached_remote_typeface->TryGetResource();
   if (typeface.get() != NULL) {
-    *state = FontFace::kLoadedState;
+    *state = FontListFont::kLoadedState;
     return GetFontFromTypefaceAndSize(typeface, size);
   } else {
     if (cached_remote_typeface->IsLoadingComplete()) {
-      *state = FontFace::kUnavailableState;
+      *state = FontListFont::kUnavailableState;
     } else if (requested_remote_typeface_iterator->second
                    ->HasActiveRequestTimer()) {
-      *state = FontFace::kLoadingWithTimerActiveState;
+      *state = FontListFont::kLoadingWithTimerActiveState;
     } else {
-      *state = FontFace::kLoadingWithTimerExpiredState;
+      *state = FontListFont::kLoadingWithTimerExpiredState;
     }
     return NULL;
   }
@@ -401,7 +387,7 @@
 
 scoped_refptr<render_tree::Font> FontCache::TryGetLocalFont(
     const std::string& family, render_tree::FontStyle style, float size,
-    FontFace::State* state) {
+    FontListFont::State* state) {
   DCHECK(resource_provider());
   DCHECK(resource_provider() != NULL);
   // Only request the local font from the resource provider if the family is
@@ -412,10 +398,10 @@
   // signifies using the default font.
   if (!family.empty() &&
       !resource_provider()->HasLocalFontFamily(family.c_str())) {
-    *state = FontFace::kUnavailableState;
+    *state = FontListFont::kUnavailableState;
     return NULL;
   } else {
-    *state = FontFace::kLoadedState;
+    *state = FontListFont::kLoadedState;
     return GetFontFromTypefaceAndSize(
         GetCachedLocalTypeface(
             resource_provider()->GetLocalTypeface(family.c_str(), style)),
@@ -424,7 +410,7 @@
 }
 
 scoped_refptr<render_tree::Font> FontCache::TryGetLocalFontByFaceName(
-    const std::string& font_face, float size, FontFace::State* state) {
+    const std::string& font_face, float size, FontListFont::State* state) {
   do {
     if (font_face.empty()) {
       break;
@@ -438,11 +424,11 @@
     const scoped_refptr<render_tree::Typeface>& typeface_cached(
         GetCachedLocalTypeface(typeface));
 
-    *state = FontFace::kLoadedState;
+    *state = FontListFont::kLoadedState;
     return GetFontFromTypefaceAndSize(typeface_cached, size);
   } while (false);
 
-  *state = FontFace::kUnavailableState;
+  *state = FontListFont::kUnavailableState;
   return NULL;
 }
 
diff --git a/src/cobalt/dom/font_cache.h b/src/cobalt/dom/font_cache.h
index 932743c..44d10a9 100644
--- a/src/cobalt/dom/font_cache.h
+++ b/src/cobalt/dom/font_cache.h
@@ -201,19 +201,13 @@
   const scoped_refptr<render_tree::Font>& GetFontFromTypefaceAndSize(
       const scoped_refptr<render_tree::Typeface>& typeface, float size);
 
-
-  // Retrieves a list of the font faces that match the given family name and
-  // style. If no explicit font faces exist, creates a faux face for
-  // representing a local font.
-  std::vector<FontFace*> GetFacesForFamilyAndStyle(
-      const std::string& family, render_tree::FontStyle style);
-
   // Attempts to retrieve a font. If the family maps to a font face, then this
   // makes a request to |TryGetRemoteFont()|; otherwise, it makes a request
   // to |TryGetLocalFont()|. This function may return NULL.
-  scoped_refptr<render_tree::Font> TryGetFont(
-      const std::string& family, render_tree::FontStyle style, float size,
-      FontFace::State* state, const FontFaceStyleSet::Entry* maybe_entry);
+  scoped_refptr<render_tree::Font> TryGetFont(const std::string& family,
+                                              render_tree::FontStyle style,
+                                              float size,
+                                              FontListFont::State* state);
 
   // Returns the character fallback typeface map associated with the specified
   // style. Each unique style has its own exclusive map. If it doesn't already
@@ -265,20 +259,20 @@
   // font are registered with the remote typeface cache to be called when the
   // load finishes.
   scoped_refptr<render_tree::Font> TryGetRemoteFont(const GURL& url, float size,
-                                                    FontFace::State* state);
+                                                    FontListFont::State* state);
 
   // Returns NULL if the requested family is not empty and is not available in
   // the resource provider. Otherwise, returns the best matching local font.
   scoped_refptr<render_tree::Font> TryGetLocalFont(const std::string& family,
                                                    render_tree::FontStyle style,
                                                    float size,
-                                                   FontFace::State* state);
+                                                   FontListFont::State* state);
 
   // Lookup by a typeface (aka font_face), typeface is defined as font family +
   // style (weight, width, and style).
   // Returns NULL if the requested font face is not found.
   scoped_refptr<render_tree::Font> TryGetLocalFontByFaceName(
-      const std::string& font_face, float size, FontFace::State* state);
+      const std::string& font_face, float size, FontListFont::State* state);
 
   // Called when a remote typeface either successfully loads or fails to load.
   // In either case, the event can impact the fonts contained within the font
diff --git a/src/cobalt/dom/font_cache_test.cc b/src/cobalt/dom/font_cache_test.cc
index 1c22311..49656eb 100644
--- a/src/cobalt/dom/font_cache_test.cc
+++ b/src/cobalt/dom/font_cache_test.cc
@@ -100,13 +100,6 @@
   const std::string postscript_font_name("DancingScript");
   std::unique_ptr<FontCache::FontFaceMap> ffm =
       CreateFontFaceMapHelper(family_name, postscript_font_name);
-
-  const FontFaceStyleSet::Entry* entry = nullptr;
-  FontCache::FontFaceMap::iterator ffm_iterator = ffm->find(family_name);
-  if (ffm_iterator != ffm->end()) {
-    entry = ffm_iterator->second.GetEntriesThatMatchStyle(kNormalUpright)[0];
-  }
-  EXPECT_TRUE(entry);
   font_cache_->SetFontFaceMap(std::move(ffm));
 
   EXPECT_CALL(loader_factory_, CreateTypefaceLoaderMock(_, _, _, _, _))
@@ -116,9 +109,9 @@
               GetLocalTypefaceIfAvailableMock(postscript_font_name))
       .WillOnce(Return(sample_typeface_));
 
-  FontFace::State state;
+  FontListFont::State state;
   scoped_refptr<render_tree::Font> f =
-      font_cache_->TryGetFont(family_name, kNormalUpright, 12.0, &state, entry);
+      font_cache_->TryGetFont(family_name, kNormalUpright, 12.0, &state);
 
   EXPECT_TRUE(f);
 }
@@ -128,13 +121,6 @@
   const std::string family_name("Dancing Script");
   std::unique_ptr<FontCache::FontFaceMap> ffm =
       CreateFontFaceMapHelper(family_name, invalid_postscript_font_name);
-
-  const FontFaceStyleSet::Entry* entry = nullptr;
-  FontCache::FontFaceMap::iterator ffm_iterator = ffm->find(family_name);
-  if (ffm_iterator != ffm->end()) {
-    entry = ffm_iterator->second.GetEntriesThatMatchStyle(kNormalUpright)[0];
-  }
-  EXPECT_TRUE(entry);
   font_cache_->SetFontFaceMap(std::move(ffm));
 
   EXPECT_CALL(mock_resource_provider_,
@@ -142,9 +128,9 @@
       .Times(1);
   EXPECT_CALL(loader_factory_, CreateTypefaceLoaderMock(_, _, _, _, _));
 
-  FontFace::State state;
+  FontListFont::State state;
   scoped_refptr<render_tree::Font> f =
-      font_cache_->TryGetFont(family_name, kNormalUpright, 12.0, &state, entry);
+      font_cache_->TryGetFont(family_name, kNormalUpright, 12.0, &state);
   EXPECT_FALSE(f);
 }
 
diff --git a/src/cobalt/dom/font_face.cc b/src/cobalt/dom/font_face.cc
index 6c44d75..5f6fdb5 100644
--- a/src/cobalt/dom/font_face.cc
+++ b/src/cobalt/dom/font_face.cc
@@ -39,22 +39,25 @@
   }
 }
 
-std::vector<const FontFaceStyleSet::Entry*>
-FontFaceStyleSet::GetEntriesThatMatchStyle(
+const FontFaceStyleSet::Entry* FontFaceStyleSet::MatchStyle(
     const render_tree::FontStyle& pattern) const {
-  std::vector<const FontFaceStyleSet::Entry*> entries;
+  return entries_.empty() ? NULL
+                          : &entries_[GetClosestStyleEntryIndex(pattern)];
+}
+
+size_t FontFaceStyleSet::GetClosestStyleEntryIndex(
+    const render_tree::FontStyle& pattern) const {
+  size_t closest_index = 0;
   int max_score = std::numeric_limits<int>::min();
-  for (const auto& entry : entries_) {
-    int score = MatchScore(pattern, entry.style);
-    if (score >= max_score) {
-      if (score > max_score) {
-        max_score = score;
-        entries.clear();
-      }
-      entries.push_back(&entry);
+  for (size_t i = 0; i < entries_.size(); ++i) {
+    int score = MatchScore(pattern, entries_[i].style);
+    if (score > max_score) {
+      closest_index = i;
+      max_score = score;
     }
   }
-  return entries;
+
+  return closest_index;
 }
 
 int FontFaceStyleSet::MatchScore(
diff --git a/src/cobalt/dom/font_face.h b/src/cobalt/dom/font_face.h
index a5f80cc..1bfb40a 100644
--- a/src/cobalt/dom/font_face.h
+++ b/src/cobalt/dom/font_face.h
@@ -66,19 +66,7 @@
       return style.weight == other.style.weight &&
              style.slant == other.style.slant && sources == other.sources;
     }
-    struct UnicodeRange {
-      // Sorts ranges primarily based on start and secondarily based on end.
-      bool operator<(const UnicodeRange& range) const {
-        if (start == range.start) {
-          return end < range.end;
-        }
-        return start < range.start;
-      }
-      uint32 start;
-      uint32 end;
-    };
 
-    std::set<UnicodeRange> unicode_range;
     render_tree::FontStyle style;
     FontFaceSources sources;
   };
@@ -89,11 +77,10 @@
   // into the set. All pre-existing url entries within the set are retained.
   void CollectUrlSources(std::set<GURL>* urls) const;
 
-
-  // Returns a list of entries with the style that most closesly matches the
-  // pattern.
-  std::vector<const Entry*> GetEntriesThatMatchStyle(
-      const render_tree::FontStyle& pattern) const;
+  // Returns the style set entry with the style most closely matching the
+  // requested pattern. If the style set contains any entries, it is guaranteed
+  // to not return NULL.
+  const Entry* MatchStyle(const render_tree::FontStyle& pattern) const;
 
   bool operator==(const FontFaceStyleSet& other) const {
     return entries_ == other.entries_;
@@ -102,6 +89,11 @@
  private:
   typedef std::vector<Entry> Entries;
 
+  // Returns the index of the entry with a style most closely matching the
+  // pattern (the lower the score, the more closely it matches). In the case of
+  // a tie, the earliest encountered entry is given priority.
+  size_t GetClosestStyleEntryIndex(const render_tree::FontStyle& pattern) const;
+
   // Returns the match score between two patterns. The score logic matches that
   // within SkFontStyleSet_Cobalt::match_score().
   int MatchScore(const render_tree::FontStyle& pattern,
diff --git a/src/cobalt/dom/font_face_updater.cc b/src/cobalt/dom/font_face_updater.cc
index 940eaaa..2a486c6 100644
--- a/src/cobalt/dom/font_face_updater.cc
+++ b/src/cobalt/dom/font_face_updater.cc
@@ -29,7 +29,6 @@
 #include "cobalt/cssom/property_value_visitor.h"
 #include "cobalt/cssom/string_value.h"
 #include "cobalt/cssom/style_sheet_list.h"
-#include "cobalt/cssom/unicode_range_value.h"
 #include "cobalt/cssom/url_src_value.h"
 #include "cobalt/cssom/url_value.h"
 
@@ -215,10 +214,8 @@
 
 void FontFaceProvider::VisitUnicodeRange(
     cssom::UnicodeRangeValue* unicode_range) {
-  FontFaceStyleSet::Entry::UnicodeRange range = {
-      static_cast<uint32>(unicode_range->start()),
-      static_cast<uint32>(unicode_range->end())};
-  style_set_entry_.unicode_range.insert(range);
+  NOTIMPLEMENTED()
+      << "FontFaceProvider::UnicodeRange support not implemented yet.";
 }
 
 // Check for a supported format. If no format hints are supplied, then the user
@@ -310,9 +307,6 @@
   if (css_font_face_rule->data()->weight()) {
     css_font_face_rule->data()->weight()->Accept(&font_face_provider);
   }
-  if (css_font_face_rule->data()->unicode_range()) {
-    css_font_face_rule->data()->unicode_range()->Accept(&font_face_provider);
-  }
 
   if (font_face_provider.IsFontFaceValid()) {
     (*font_face_map_)[font_face_provider.font_family()].AddEntry(
diff --git a/src/cobalt/dom/font_list.cc b/src/cobalt/dom/font_list.cc
index 45e8d5c..ae4cbb4 100644
--- a/src/cobalt/dom/font_list.cc
+++ b/src/cobalt/dom/font_list.cc
@@ -15,7 +15,6 @@
 #include "cobalt/dom/font_list.h"
 
 #include "base/i18n/char_iterator.h"
-#include "cobalt/base/unicode/character_values.h"
 #include "cobalt/dom/font_cache.h"
 
 namespace cobalt {
@@ -25,19 +24,6 @@
 
 const base::char16 kHorizontalEllipsisValue = 0x2026;
 
-bool CharInRange(
-    const std::set<FontFaceStyleSet::Entry::UnicodeRange>& unicode_range,
-    uint32 utf32_character) {
-  if (unicode_range.empty()) return true;
-  for (const auto& range : unicode_range) {
-    if (range.start > utf32_character) break;
-    if ((range.start <= utf32_character) && (utf32_character <= range.end)) {
-      return true;
-    }
-  }
-  return false;
-}
-
 }  // namespace
 
 FontList::FontList(FontCache* font_cache, const FontListKey& font_list_key)
@@ -54,34 +40,18 @@
           font_cache_->GetCharacterFallbackTypefaceMap(style_)) {
   // Add all of the family names to the font list fonts.
   for (size_t i = 0; i < font_list_key.family_names.size(); ++i) {
-    FontListFont font = FontListFont(font_list_key.family_names[i]);
-    font.faces =
-        font_cache_->GetFacesForFamilyAndStyle(font.family_name, style_);
-    fonts_.push_back(font);
+    fonts_.push_back(FontListFont(font_list_key.family_names[i]));
   }
 
   // Add an empty font at the end in order to fall back to the default typeface.
-  FontListFont default_font = FontListFont("");
-  FontFace* default_face = new FontFace();
-  default_font.faces = std::vector<FontFace*>{default_face};
-  fonts_.push_back(default_font);
-}
-
-FontList::~FontList() {
-  for (FontListFont font : fonts_) {
-    for (FontFace* face : font.faces) {
-      delete face;
-    }
-  }
+  fonts_.push_back(FontListFont(""));
 }
 
 void FontList::Reset() {
   for (size_t i = 0; i < fonts_.size(); ++i) {
     FontListFont& font_list_font = fonts_[i];
-    for (auto face : font_list_font.faces) {
-      face->state = FontFace::kUnrequestedState;
-      face->font = NULL;
-    }
+    font_list_font.set_state(FontListFont::kUnrequestedState);
+    font_list_font.set_font(NULL);
   }
 
   primary_font_ = NULL;
@@ -99,22 +69,20 @@
   for (size_t i = 0; i < fonts_.size(); ++i) {
     FontListFont& font_list_font = fonts_[i];
 
-    for (auto face : font_list_font.faces) {
-      if (face->state == FontFace::kLoadingWithTimerActiveState ||
-          face->state == FontFace::kLoadingWithTimerExpiredState) {
-        face->state = FontFace::kUnrequestedState;
-        // If a loaded font hasn't been found yet, then the cached values need
-        // to be reset. It'll potentially change the primary font.
-        if (!found_loaded_font) {
-          primary_font_ = NULL;
-          is_font_metrics_set_ = false;
-          is_space_width_set_ = false;
-          is_ellipsis_info_set_ = false;
-          ellipsis_font_ = NULL;
-        }
-      } else if (face->state == FontFace::kLoadedState) {
-        found_loaded_font = true;
+    if (font_list_font.state() == FontListFont::kLoadingWithTimerActiveState ||
+        font_list_font.state() == FontListFont::kLoadingWithTimerExpiredState) {
+      font_list_font.set_state(FontListFont::kUnrequestedState);
+      // If a loaded font hasn't been found yet, then the cached values need to
+      // be reset. It'll potentially change the primary font.
+      if (!found_loaded_font) {
+        primary_font_ = NULL;
+        is_font_metrics_set_ = false;
+        is_space_width_set_ = false;
+        is_ellipsis_info_set_ = false;
+        ellipsis_font_ = NULL;
       }
+    } else if (font_list_font.state() == FontListFont::kLoadedState) {
+      found_loaded_font = true;
     }
   }
 }
@@ -129,10 +97,8 @@
     // display text, simply leaving transparent text is considered
     // non-conformant behavior."
     //   https://www.w3.org/TR/css3-fonts/#font-face-loading
-    for (auto face : fonts_[i].faces) {
-      if (face->state == FontFace::kLoadingWithTimerActiveState) {
-        return false;
-      }
+    if (fonts_[i].state() == FontListFont::kLoadingWithTimerActiveState) {
+      return false;
     }
   }
 
@@ -231,20 +197,15 @@
   for (size_t i = 0; i < fonts_.size(); ++i) {
     FontListFont& font_list_font = fonts_[i];
 
-    for (FontFace* face : font_list_font.faces) {
-      const FontFaceStyleSet::Entry* entry = face->entry;
-      if (entry && !CharInRange(entry->unicode_range, utf32_character)) {
-        continue;
-      }
-      if (face->state == FontFace::kUnrequestedState) {
-        RequestFont(i, face);
-      }
+    if (font_list_font.state() == FontListFont::kUnrequestedState) {
+      RequestFont(i);
+    }
 
-      if (face->state == FontFace::kLoadedState) {
-        *glyph_index = face->font->GetGlyphForCharacter(utf32_character);
-        if (*glyph_index != render_tree::kInvalidGlyphIndex) {
-          return face->font;
-        }
+    if (font_list_font.state() == FontListFont::kLoadedState) {
+      *glyph_index =
+          font_list_font.font()->GetGlyphForCharacter(utf32_character);
+      if (*glyph_index != render_tree::kInvalidGlyphIndex) {
+        return font_list_font.font();
       }
     }
   }
@@ -280,27 +241,18 @@
   // time to do it now.
   if (!primary_font_) {
     // Walk the list of fonts, requesting any encountered that are in an
-    // unrequested state. The first font encountered that is loaded and whose
-    // unicode range includes the space character is the primary font.
-    // https://www.w3.org/TR/css-fonts-4/#first-available-font
+    // unrequested state. The first font encountered that is loaded is
+    // the primary font.
     for (size_t i = 0; i < fonts_.size(); ++i) {
       FontListFont& font_list_font = fonts_[i];
 
-      for (FontFace* face : font_list_font.faces) {
-        const FontFaceStyleSet::Entry* entry = face->entry;
-        if (entry && !CharInRange(entry->unicode_range,
-                                  base::unicode::kSpaceCharacter)) {
-          continue;
-        }
-        if (face->state == FontFace::kUnrequestedState) {
-          RequestFont(i, face);
-        }
+      if (font_list_font.state() == FontListFont::kUnrequestedState) {
+        RequestFont(i);
+      }
 
-        if (face->state == FontFace::kLoadedState) {
-          primary_font_ = face->font;
-          DCHECK(primary_font_);
-          return primary_font_;
-        }
+      if (font_list_font.state() == FontListFont::kLoadedState) {
+        primary_font_ = font_list_font.font();
+        break;
       }
     }
   }
@@ -309,41 +261,40 @@
   return primary_font_;
 }
 
-void FontList::RequestFont(size_t index, FontFace* used_face) {
+void FontList::RequestFont(size_t index) {
   FontListFont& font_list_font = fonts_[index];
-  FontFace::State state;
+  FontListFont::State state;
 
   // Request the font from the font cache; the state of the font will be set
   // during the call.
   scoped_refptr<render_tree::Font> render_tree_font = font_cache_->TryGetFont(
-      font_list_font.family_name, style_, size_, &state, used_face->entry);
+      font_list_font.family_name(), style_, size_, &state);
 
-  if (state == FontFace::kLoadedState) {
+  if (state == FontListFont::kLoadedState) {
     DCHECK(render_tree_font.get() != NULL);
 
     // Walk all of the fonts in the list preceding the loaded font. If they have
-    // the same typeface as the loaded font, then do not create a new face.
-    // There's no reason to have multiple fonts in the list with the same
-    // typeface.
+    // the same typeface as the loaded font, then set the font list font as a
+    // duplicate. There's no reason to have multiple fonts in the list with the
+    // same typeface.
     render_tree::TypefaceId typeface_id = render_tree_font->GetTypefaceId();
     for (size_t i = 0; i < index; ++i) {
       FontListFont& check_font = fonts_[i];
-      for (auto face : check_font.faces) {
-        if (face->state == FontFace::kLoadedState &&
-            face->font->GetTypefaceId() == typeface_id) {
-          used_face->state = FontFace::kDuplicateState;
-        }
+      if (check_font.state() == FontListFont::kLoadedState &&
+          check_font.font()->GetTypefaceId() == typeface_id) {
+        font_list_font.set_state(FontListFont::kDuplicateState);
+        break;
       }
     }
 
     // If this font wasn't a duplicate, then its time to initialize its font
     // data. This font is now available to use.
-    if (used_face->state != FontFace::kDuplicateState) {
-      used_face->state = FontFace::kLoadedState;
-      used_face->font = render_tree_font;
+    if (font_list_font.state() != FontListFont::kDuplicateState) {
+      font_list_font.set_state(FontListFont::kLoadedState);
+      font_list_font.set_font(render_tree_font);
     }
   } else {
-    used_face->state = state;
+    font_list_font.set_state(state);
   }
 }
 
@@ -359,10 +310,10 @@
 
 void FontList::GenerateSpaceWidth() {
   if (!is_space_width_set_) {
-    render_tree::GlyphIndex space_glyph = render_tree::kInvalidGlyphIndex;
-    space_width_ =
-        GetCharacterFont(base::unicode::kSpaceCharacter, &space_glyph)
-            ->GetGlyphWidth(space_glyph);
+    const scoped_refptr<render_tree::Font>& primary_font = GetPrimaryFont();
+    render_tree::GlyphIndex space_glyph =
+        primary_font->GetGlyphForCharacter(' ');
+    space_width_ = primary_font->GetGlyphWidth(space_glyph);
     if (space_width_ == 0) {
       DLOG(WARNING) << "Font being used with space width of 0!";
     }
diff --git a/src/cobalt/dom/font_list.h b/src/cobalt/dom/font_list.h
index 6676b1f..8c95c94 100644
--- a/src/cobalt/dom/font_list.h
+++ b/src/cobalt/dom/font_list.h
@@ -22,7 +22,6 @@
 #include "base/containers/hash_tables.h"
 #include "base/containers/small_map.h"
 #include "base/memory/ref_counted.h"
-#include "cobalt/dom/font_face.h"
 #include "cobalt/math/rect_f.h"
 #include "cobalt/render_tree/font.h"
 #include "cobalt/render_tree/font_provider.h"
@@ -34,11 +33,12 @@
 
 class FontCache;
 
-// A font-face for a font-family. It has an internal state, which lets the font
-// list know whether or not the font has already been requested, and if so,
-// whether or not it was available. |font_| will only be non-NULL in the case
-// where |state_| is set to |kLoadedState|.
-struct FontFace {
+// A specific font family within a font list. It has an internal state, which
+// lets the font list know whether or not the font has already been requested,
+// and if so, whether or not it was available. |font_| and |character_map_|
+// will only be non-NULL in the case where |state_| is set to |kLoadedState|.
+class FontListFont {
+ public:
   enum State {
     kUnrequestedState,
     kLoadingWithTimerActiveState,
@@ -47,29 +47,27 @@
     kUnavailableState,
     kDuplicateState,
   };
-  State state = kUnrequestedState;
-  const FontFaceStyleSet::Entry* entry = nullptr;
 
-  // The render_tree::Font obtained via the font cache using |family_name_| in
-  // font list font, along with |style_| and |size_| from the containing font
-  // list, and the unicode range needed for the requested character. It is only
-  // non-NULL in the case where |state_| is set to |kLoadedState|.
-  scoped_refptr<render_tree::Font> font;
-};
-
-// A specific font family within a font list. A family may have more than one
-// FontFace if the FontFaces have different unicode ranges specified.
-struct FontListFont {
   explicit FontListFont(const std::string& family_name)
-      : family_name(family_name) {}
+      : family_name_(family_name), state_(kUnrequestedState) {}
 
-  std::string family_name;
+  const std::string& family_name() const { return family_name_; }
+
+  State state() const { return state_; }
+  void set_state(State state) { state_ = state; }
+
+  const scoped_refptr<render_tree::Font>& font() const { return font_; }
+  void set_font(const scoped_refptr<render_tree::Font>& font) { font_ = font; }
+
+ private:
+  std::string family_name_;
+  State state_;
 
   // The render_tree::Font obtained via the font cache using |family_name_| in
   // font list font, along with |style_| and |size_| from the containing font
   // list. It is only non-NULL in the case where |state_| is set to
   // |kLoadedState|.
-  std::vector<FontFace*> faces;
+  scoped_refptr<render_tree::Font> font_;
 };
 
 // The key used for maps with a |FontList| value. It is also used for
@@ -180,8 +178,6 @@
       int32 utf32_character, render_tree::GlyphIndex* glyph_index) override;
 
  private:
-  ~FontList() override;
-
   const scoped_refptr<render_tree::Font>& GetFallbackCharacterFont(
       int32 utf32_character, render_tree::GlyphIndex* glyph_index);
 
@@ -195,10 +191,9 @@
   const scoped_refptr<render_tree::Font>& GetPrimaryFont();
 
   // Request a font from the font cache and update its state depending on the
-  // results of the request. If the font is successfully set, then its |font_|
-  // is non-NULL after this call.
-  void RequestFont(size_t index, FontFace* face);
-
+  // results of the request. If the font is successfully set, then both its
+  // |font_| and |character_map_| are non-NULL after this call.
+  void RequestFont(size_t index);
 
   // Lazily generates the ellipsis font and ellipsis width. If it is already
   // generated then it immediately returns.
diff --git a/src/cobalt/dom/window.cc b/src/cobalt/dom/window.cc
index 34e0c86..6fde6ea 100644
--- a/src/cobalt/dom/window.cc
+++ b/src/cobalt/dom/window.cc
@@ -198,7 +198,7 @@
 #endif
   document_->AddObserver(relay_on_load_event_.get());
   html_element_context_->application_lifecycle_state()->AddObserver(this);
-  SetCamera3D(camera_3d);
+  UpdateCamera3D(camera_3d);
 
   // Document load start is deferred from this constructor so that we can be
   // guaranteed that this Window object is fully constructed before document
@@ -393,7 +393,7 @@
 
 int Window::SetTimeout(const WindowTimers::TimerCallbackArg& handler,
                        int timeout) {
-  DLOG_IF(WARNING, timeout < 0)
+  LOG_IF(WARNING, timeout < 0)
       << "Window::SetTimeout received negative timeout: " << timeout;
   timeout = std::max(timeout, 0);
 
@@ -401,7 +401,7 @@
   if (window_timers_) {
     return_value = window_timers_->SetTimeout(handler, timeout);
   } else {
-    DLOG(WARNING) << "window_timers_ does not exist.  Already destroyed?";
+    LOG(WARNING) << "window_timers_ does not exist.  Already destroyed?";
   }
 
   return return_value;
@@ -411,13 +411,13 @@
   if (window_timers_) {
     window_timers_->ClearTimeout(handle);
   } else {
-    DLOG(WARNING) << "window_timers_ does not exist.  Already destroyed?";
+    LOG(WARNING) << "window_timers_ does not exist.  Already destroyed?";
   }
 }
 
 int Window::SetInterval(const WindowTimers::TimerCallbackArg& handler,
                         int timeout) {
-  DLOG_IF(WARNING, timeout < 0)
+  LOG_IF(WARNING, timeout < 0)
       << "Window::SetInterval received negative timeout: " << timeout;
   timeout = std::max(timeout, 0);
 
@@ -425,7 +425,7 @@
   if (window_timers_) {
     return_value = window_timers_->SetInterval(handler, timeout);
   } else {
-    DLOG(WARNING) << "window_timers_ does not exist.  Already destroyed?";
+    LOG(WARNING) << "window_timers_ does not exist.  Already destroyed?";
   }
 
   return return_value;
@@ -629,9 +629,15 @@
   }
 }
 
-void Window::SetCamera3D(const scoped_refptr<input::Camera3D>& camera_3d) {
-  camera_3d_ = new Camera3D(camera_3d);
-  camera_3d_->StartOrientationEvents(base::AsWeakPtr(this));
+void Window::UpdateCamera3D(const scoped_refptr<input::Camera3D>& camera_3d) {
+  if (camera_3d_ && camera_3d_->impl()) {
+    // Update input object for existing camera.
+    camera_3d_->impl()->SetInput(camera_3d);
+  } else {
+    // Create a new camera which uses the given input camera object.
+    camera_3d_ = new Camera3D(camera_3d);
+    camera_3d_->StartOrientationEvents(base::AsWeakPtr(this));
+  }
 }
 
 void Window::OnWindowFocusChanged(bool has_focus) {
diff --git a/src/cobalt/dom/window.h b/src/cobalt/dom/window.h
index 81467b4..d6bf1ab 100644
--- a/src/cobalt/dom/window.h
+++ b/src/cobalt/dom/window.h
@@ -347,7 +347,7 @@
 
   void SetSize(cssom::ViewportSize size);
 
-  void SetCamera3D(const scoped_refptr<input::Camera3D>& camera_3d);
+  void UpdateCamera3D(const scoped_refptr<input::Camera3D>& camera_3d);
 
   void set_web_media_player_factory(
       media::WebMediaPlayerFactory* web_media_player_factory) {
diff --git a/src/cobalt/input/camera_3d.h b/src/cobalt/input/camera_3d.h
index d282e4d..3fa1fb2 100644
--- a/src/cobalt/input/camera_3d.h
+++ b/src/cobalt/input/camera_3d.h
@@ -70,6 +70,9 @@
   // Resets camera to default orientation.
   virtual void Reset() {}
 
+  // Adopt input object from the given Camera3D.
+  virtual void SetInput(const scoped_refptr<Camera3D>& other) {}
+
   virtual ~Camera3D() {}
 
   template <typename FloatType>
diff --git a/src/cobalt/input/camera_3d_input_poller.cc b/src/cobalt/input/camera_3d_input_poller.cc
index 2101015..5b7a53c 100644
--- a/src/cobalt/input/camera_3d_input_poller.cc
+++ b/src/cobalt/input/camera_3d_input_poller.cc
@@ -19,6 +19,7 @@
 #include <algorithm>
 #include <cmath>
 
+#include "cobalt/base/polymorphic_downcast.h"
 #include "cobalt/input/create_default_camera_3d.h"
 #include "third_party/glm/glm/gtc/matrix_transform.hpp"
 #include "third_party/glm/glm/gtc/quaternion.hpp"
@@ -91,6 +92,13 @@
   yaw_in_radians_ = 0.0f;
 }
 
+void Camera3DInputPoller::SetInput(const scoped_refptr<Camera3D>& other) {
+  base::AutoLock lock(mutex_);
+  Camera3DInputPoller* other_camera =
+      base::polymorphic_downcast<Camera3DInputPoller*>(other.get());
+  input_poller_ = other_camera ? other_camera->input_poller_ : nullptr;
+}
+
 void Camera3DInputPoller::AccumulateOrientation() {
   if (!input_poller_) {
     // Nothing to do if no input poller was provided.
diff --git a/src/cobalt/input/camera_3d_input_poller.h b/src/cobalt/input/camera_3d_input_poller.h
index ceff058..c6050ab 100644
--- a/src/cobalt/input/camera_3d_input_poller.h
+++ b/src/cobalt/input/camera_3d_input_poller.h
@@ -52,6 +52,8 @@
 
   void Reset() override;
 
+  void SetInput(const scoped_refptr<Camera3D>& other) override;
+
  private:
   struct KeycodeMappingInfo {
     KeycodeMappingInfo() : axis(0), degrees_per_second(0.0f) {}
diff --git a/src/cobalt/layout_tests/layout_tests.cc b/src/cobalt/layout_tests/layout_tests.cc
index 028de65..1f25893 100644
--- a/src/cobalt/layout_tests/layout_tests.cc
+++ b/src/cobalt/layout_tests/layout_tests.cc
@@ -128,9 +128,8 @@
   // room for tests to maneuver within and speed at which pixel tests can be
   // done.
   const ViewportSize kDefaultViewportSize(640, 360);
-  ViewportSize viewport_size = test_info.viewport_size
-                                   ? *test_info.viewport_size
-                                   : kDefaultViewportSize;
+  ViewportSize viewport_size =
+      test_info.viewport_size ? *test_info.viewport_size : kDefaultViewportSize;
 
   renderer::RenderTreePixelTester pixel_tester(
       viewport_size.width_height(), GetTestInputRootDirectory(),
@@ -222,30 +221,26 @@
 }
 
 // Cobalt-specific test cases.
-INSTANTIATE_TEST_CASE_P(
-    CobaltSpecificLayoutTests, Layout,
-    ::testing::ValuesIn(EnumerateLayoutTests("cobalt")),
-    GetTestName());
+INSTANTIATE_TEST_CASE_P(CobaltSpecificLayoutTests, Layout,
+                        ::testing::ValuesIn(EnumerateLayoutTests("cobalt")),
+                        GetTestName());
 // Custom CSS 2.1 (https://www.w3.org/TR/CSS21/) test cases.
-INSTANTIATE_TEST_CASE_P(
-    CSS21LayoutTests, Layout,
-    ::testing::ValuesIn(EnumerateLayoutTests("css-2-1")),
-    GetTestName());
+INSTANTIATE_TEST_CASE_P(CSS21LayoutTests, Layout,
+                        ::testing::ValuesIn(EnumerateLayoutTests("css-2-1")),
+                        GetTestName());
 // Custom CSS Background (https://www.w3.org/TR/css3-background/) test cases.
 INSTANTIATE_TEST_CASE_P(
     CSSBackground3LayoutTests, Layout,
     ::testing::ValuesIn(EnumerateLayoutTests("css3-background")),
     GetTestName());
 // Custom CSS Color (https://www.w3.org/TR/css3-color/) test cases.
-INSTANTIATE_TEST_CASE_P(
-    CSSColor3LayoutTests, Layout,
-    ::testing::ValuesIn(EnumerateLayoutTests("css3-color")),
-    GetTestName());
+INSTANTIATE_TEST_CASE_P(CSSColor3LayoutTests, Layout,
+                        ::testing::ValuesIn(EnumerateLayoutTests("css3-color")),
+                        GetTestName());
 // Custom CSS Images (https://www.w3.org/TR/css3-images/) test cases.
 INSTANTIATE_TEST_CASE_P(
     CSSImages3LayoutTests, Layout,
-    ::testing::ValuesIn(EnumerateLayoutTests("css3-images")),
-    GetTestName());
+    ::testing::ValuesIn(EnumerateLayoutTests("css3-images")), GetTestName());
 // Custom CSS Media Queries (https://www.w3.org/TR/css3-mediaqueries/) test
 // cases.
 INSTANTIATE_TEST_CASE_P(
@@ -253,16 +248,14 @@
     ::testing::ValuesIn(EnumerateLayoutTests("css3-mediaqueries")),
     GetTestName());
 // Custom CSS Text (https://www.w3.org/TR/css-text-3/) test cases.
-INSTANTIATE_TEST_CASE_P(
-    CSSText3LayoutTests, Layout,
-    ::testing::ValuesIn(EnumerateLayoutTests("css-text-3")),
-    GetTestName());
+INSTANTIATE_TEST_CASE_P(CSSText3LayoutTests, Layout,
+                        ::testing::ValuesIn(EnumerateLayoutTests("css-text-3")),
+                        GetTestName());
 // Custom CSS Transform (http://https://www.w3.org/TR/css-transforms/)
 // test cases.
 INSTANTIATE_TEST_CASE_P(
     CSSTransformsLayoutTests, Layout,
-    ::testing::ValuesIn(EnumerateLayoutTests("css-transforms")),
-    GetTestName());
+    ::testing::ValuesIn(EnumerateLayoutTests("css-transforms")), GetTestName());
 // Custom CSS Transition
 // (https://www.w3.org/TR/2013/WD-css3-transitions-20131119/)
 // test cases.
@@ -279,15 +272,13 @@
     GetTestName());
 // Custom bidi text (http://www.unicode.org/reports/tr9/)
 // (https://www.w3.org/TR/CSS21/visuren.html#direction) test cases.
-INSTANTIATE_TEST_CASE_P(
-    BidiLayoutTests, Layout,
-    ::testing::ValuesIn(EnumerateLayoutTests("bidi")),
-    GetTestName());
+INSTANTIATE_TEST_CASE_P(BidiLayoutTests, Layout,
+                        ::testing::ValuesIn(EnumerateLayoutTests("bidi")),
+                        GetTestName());
 // Custom text shaping test cases.
 INSTANTIATE_TEST_CASE_P(
     TextShapingLayoutTests, Layout,
-    ::testing::ValuesIn(EnumerateLayoutTests("text-shaping")),
-    GetTestName());
+    ::testing::ValuesIn(EnumerateLayoutTests("text-shaping")), GetTestName());
 // Custom CSS Conditional (https://www.w3.org/TR/css3-conditional/) test cases.
 INSTANTIATE_TEST_CASE_P(
     CSSConditional3LayoutTests, Layout,
@@ -298,25 +289,22 @@
     CSSFlexbox3LayoutTests, Layout,
     ::testing::ValuesIn(EnumerateLayoutTests("css3-flexbox")), GetTestName());
 // Custom CSS Font (https://www.w3.org/TR/css3-fonts/) test cases.
-INSTANTIATE_TEST_CASE_P(
-    CSS3FontsLayoutTests, Layout,
-    ::testing::ValuesIn(EnumerateLayoutTests("css3-fonts")),
-    GetTestName());
+INSTANTIATE_TEST_CASE_P(CSS3FontsLayoutTests, Layout,
+                        ::testing::ValuesIn(EnumerateLayoutTests("css3-fonts")),
+                        GetTestName());
 // Custom CSS Text Decor (https://www.w3.org/TR/css-text-decor-3/) test cases.
 INSTANTIATE_TEST_CASE_P(
     CSS3TextDecorLayoutTests, Layout,
     ::testing::ValuesIn(EnumerateLayoutTests("css3-text-decor")),
     GetTestName());
 // Custom CSS UI (https://www.w3.org/TR/css3-ui/) test cases.
-INSTANTIATE_TEST_CASE_P(
-    CSS3UILayoutTests, Layout,
-    ::testing::ValuesIn(EnumerateLayoutTests("css3-ui")),
-    GetTestName());
+INSTANTIATE_TEST_CASE_P(CSS3UILayoutTests, Layout,
+                        ::testing::ValuesIn(EnumerateLayoutTests("css3-ui")),
+                        GetTestName());
 // Custom CSS Value (https://www.w3.org/TR/css3-values/) test cases.
 INSTANTIATE_TEST_CASE_P(
     CSS3ValuesLayoutTests, Layout,
-    ::testing::ValuesIn(EnumerateLayoutTests("css3-values")),
-    GetTestName());
+    ::testing::ValuesIn(EnumerateLayoutTests("css3-values")), GetTestName());
 // Custom incremental layout test cases.
 INSTANTIATE_TEST_CASE_P(
     IncrementalLayoutLayoutTests, Layout,
@@ -324,10 +312,9 @@
     GetTestName());
 // Custom CSSOM view (https://www.w3.org/TR/2013/WD-cssom-view-20131217/)
 // test cases.
-INSTANTIATE_TEST_CASE_P(
-    CSSOMViewLayoutTests, Layout,
-    ::testing::ValuesIn(EnumerateLayoutTests("cssom-view")),
-    GetTestName());
+INSTANTIATE_TEST_CASE_P(CSSOMViewLayoutTests, Layout,
+                        ::testing::ValuesIn(EnumerateLayoutTests("cssom-view")),
+                        GetTestName());
 // Custom DOM (https://dom.spec.whatwg.org/) test cases.
 INSTANTIATE_TEST_CASE_P(DOMLayoutTests, Layout,
                         ::testing::ValuesIn(EnumerateLayoutTests("dom")),
@@ -341,11 +328,9 @@
 
 // JavaScript HTML5 WebAPIs (https://www.w3.org/TR/html50/webappapis.html) test
 // cases.
-INSTANTIATE_TEST_CASE_P(
-    WebAppAPIsLayoutTests, Layout,
-    ::testing::ValuesIn(EnumerateLayoutTests("webappapis")),
-    GetTestName());
-
+INSTANTIATE_TEST_CASE_P(WebAppAPIsLayoutTests, Layout,
+                        ::testing::ValuesIn(EnumerateLayoutTests("webappapis")),
+                        GetTestName());
 // JavaScript HTML5 APIs that describe requestAnimationFrame().
 //   https://www.w3.org/TR/animation-timing/
 INSTANTIATE_TEST_CASE_P(
@@ -356,8 +341,7 @@
 // Problematic test cases found through cluster-fuzz.
 INSTANTIATE_TEST_CASE_P(
     ClusterFuzzLayoutTests, Layout,
-    ::testing::ValuesIn(EnumerateLayoutTests("cluster-fuzz")),
-    GetTestName());
+    ::testing::ValuesIn(EnumerateLayoutTests("cluster-fuzz")), GetTestName());
 
 // Intersection Observer API (https://www.w3.org/TR/intersection-observer/) test
 // cases
@@ -366,6 +350,11 @@
     ::testing::ValuesIn(EnumerateLayoutTests("intersection-observer")),
     GetTestName());
 
+// webp background image test cases.
+INSTANTIATE_TEST_CASE_P(WebPLayoutTests, Layout,
+                        ::testing::ValuesIn(EnumerateLayoutTests("webp")),
+                        GetTestName());
+
 // Blitter does not support Skottie.
 #if !SB_HAS(BLITTER)
 // Lottie (https://github.com/LottieFiles/lottie-player) test cases
@@ -377,17 +366,14 @@
 // Disable on Windows until network stack is implemented.
 #if !defined(COBALT_WIN)
 // Content Security Policy test cases.
-INSTANTIATE_TEST_CASE_P(
-    ContentSecurityPolicyTests, Layout,
-    ::testing::ValuesIn(EnumerateLayoutTests("csp")),
-    GetTestName());
+INSTANTIATE_TEST_CASE_P(ContentSecurityPolicyTests, Layout,
+                        ::testing::ValuesIn(EnumerateLayoutTests("csp")),
+                        GetTestName());
 #endif  // !defined(COBALT_WIN)
 
 // Pixel-perfect tests.
 INSTANTIATE_TEST_CASE_P(
     CobaltPixelTests, LayoutExact,
-    ::testing::ValuesIn(EnumerateLayoutTests("cobalt-pixel")),
-    GetTestName());
-
+    ::testing::ValuesIn(EnumerateLayoutTests("cobalt-pixel")), GetTestName());
 }  // namespace layout_tests
 }  // namespace cobalt
diff --git a/src/cobalt/layout_tests/testdata/css3-fonts/4-5-prefer-later-face-with-close-style-over-earlier-face-with-unicode-range-expected.png b/src/cobalt/layout_tests/testdata/css3-fonts/4-5-prefer-later-face-with-close-style-over-earlier-face-with-unicode-range-expected.png
deleted file mode 100644
index 2cd7bd0..0000000
--- a/src/cobalt/layout_tests/testdata/css3-fonts/4-5-prefer-later-face-with-close-style-over-earlier-face-with-unicode-range-expected.png
+++ /dev/null
Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/css3-fonts/4-5-prefer-later-face-with-close-style-over-earlier-face-with-unicode-range.html b/src/cobalt/layout_tests/testdata/css3-fonts/4-5-prefer-later-face-with-close-style-over-earlier-face-with-unicode-range.html
deleted file mode 100644
index c257b7e..0000000
--- a/src/cobalt/layout_tests/testdata/css3-fonts/4-5-prefer-later-face-with-close-style-over-earlier-face-with-unicode-range.html
+++ /dev/null
@@ -1,37 +0,0 @@
-<!DOCTYPE html>
-<!--
- | Unicode range test. Tests that font style takes precedence over a matching unicode-range.
- | https://www.w3.org/TR/css3-fonts/#font-prop-desc
- -->
-<html>
-<head>
-  <style>
-    @font-face {
-        font-family: 'TestFont';
-        src: local('Noto Serif');
-        unicode-range: U+4d-5a; /* =, M-Z */
-        font-weight: bold;
-    }
-    @font-face {
-        font-family: 'TestFont';
-        src: local('Roboto');
-        font-weight: normal;
-    }
-    @font-face {
-        font-family: 'TestFont2';
-        src: local('Dancing Script');
-        font-weight: bold;
-    }
-    body {
-      background-color: black;
-      font-size: 75px;
-      color: #fff;
-      font-weight: bold;
-      font-family: 'TestFont', 'TestFont2'; /*TestFont2 should be used. */
-    }
-  </style>
-</head>
-<body>
-    <div>Hello</div>
-</body>
-</html>
\ No newline at end of file
diff --git a/src/cobalt/layout_tests/testdata/css3-fonts/4-5-use-correct-font-with-unicode-range-expected.png b/src/cobalt/layout_tests/testdata/css3-fonts/4-5-use-correct-font-with-unicode-range-expected.png
deleted file mode 100644
index c32526d..0000000
--- a/src/cobalt/layout_tests/testdata/css3-fonts/4-5-use-correct-font-with-unicode-range-expected.png
+++ /dev/null
Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/css3-fonts/4-5-use-correct-font-with-unicode-range.html b/src/cobalt/layout_tests/testdata/css3-fonts/4-5-use-correct-font-with-unicode-range.html
deleted file mode 100644
index 3ff6b53..0000000
--- a/src/cobalt/layout_tests/testdata/css3-fonts/4-5-use-correct-font-with-unicode-range.html
+++ /dev/null
@@ -1,31 +0,0 @@
-<!DOCTYPE html>
-<!--
- | Unicode range test. Tests multiple unicode-range values and multiple
- | font-families with the same style but different unicode ranges and sources.
- | https://www.w3.org/TR/css3-fonts/#font-prop-desc
- -->
-<html>
-<head>
-  <style>
-    @font-face {
-        font-family: 'TestFont';
-        src: local('Dancing Script');
-        unicode-range: U+3d, U+4d-5a; /* =, M-Z */
-    }
-    @font-face {
-        font-family: 'TestFont';
-        src: local('Noto Serif');
-        unicode-range: U+26; /* & */
-    }
-    body {
-      background-color: black;
-      font-size: 75px;
-      color: #fff;
-      font-family: 'TestFont', 'Roboto';
-    }
-  </style>
-</head>
-<body>
-    <div>Me & You = Us</div>
-</body>
-</html>
\ No newline at end of file
diff --git a/src/cobalt/layout_tests/testdata/css3-fonts/layout_tests.txt b/src/cobalt/layout_tests/testdata/css3-fonts/layout_tests.txt
index 8c922d4..aac78cf 100644
--- a/src/cobalt/layout_tests/testdata/css3-fonts/layout_tests.txt
+++ b/src/cobalt/layout_tests/testdata/css3-fonts/layout_tests.txt
@@ -4,8 +4,6 @@
 4-3-use-first-available-local-font-face
 4-3-use-next-font-family-if-font-face-sources-unavailable
 4-4-use-correct-style-in-font-face-set
-4-5-use-correct-font-with-unicode-range
-4-5-prefer-later-face-with-close-style-over-earlier-face-with-unicode-range
 5-2-use-correct-style-in-font-family
 5-2-use-first-available-listed-font-family
 5-2-use-numerical-font-weights-in-family-face-matching
diff --git a/src/cobalt/layout_tests/testdata/webp/layout_tests.txt b/src/cobalt/layout_tests/testdata/webp/layout_tests.txt
new file mode 100644
index 0000000..a7b4e0c
--- /dev/null
+++ b/src/cobalt/layout_tests/testdata/webp/layout_tests.txt
@@ -0,0 +1 @@
+static-webp-background-image
diff --git a/src/cobalt/layout_tests/testdata/webp/static-webp-background-image-expected.png b/src/cobalt/layout_tests/testdata/webp/static-webp-background-image-expected.png
new file mode 100644
index 0000000..edcc28c
--- /dev/null
+++ b/src/cobalt/layout_tests/testdata/webp/static-webp-background-image-expected.png
Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/webp/static-webp-background-image.html b/src/cobalt/layout_tests/testdata/webp/static-webp-background-image.html
new file mode 100644
index 0000000..92d307b
--- /dev/null
+++ b/src/cobalt/layout_tests/testdata/webp/static-webp-background-image.html
@@ -0,0 +1,40 @@
+<!DOCTYPE html>
+<!--
+ | This test checks if a static webp background image is rendered as expected.
+ -->
+<html>
+
+<head>
+    <style>
+        div {
+            height: 360px;
+            width: 480px;
+        }
+    </style>
+    <script>
+        if (window.testRunner) {
+            window.testRunner.waitUntilDone();
+        }
+
+        var image = new Image();
+        var image_name = 'static-webp-image.webp';
+
+        image.onload = function () {
+            var cobalt = document.getElementById('image');
+            cobalt.style.background = 'url(' + image_name + ')';
+
+            if (window.testRunner) {
+                window.testRunner.notifyDone();
+            }
+        }
+
+        image.src = image_name;
+
+    </script>
+</head>
+
+<body>
+    <div id='image'></div>
+</body>
+
+</html>
diff --git a/src/cobalt/layout_tests/testdata/webp/static-webp-image.webp b/src/cobalt/layout_tests/testdata/webp/static-webp-image.webp
new file mode 100644
index 0000000..cca0a37
--- /dev/null
+++ b/src/cobalt/layout_tests/testdata/webp/static-webp-image.webp
Binary files differ
diff --git a/src/cobalt/layout_tests/web_platform_tests.cc b/src/cobalt/layout_tests/web_platform_tests.cc
index 5edd114..be7348d 100644
--- a/src/cobalt/layout_tests/web_platform_tests.cc
+++ b/src/cobalt/layout_tests/web_platform_tests.cc
@@ -79,6 +79,15 @@
   }
 };
 
+// FakeResourceProviderStub has the identical behavior as ResourceProviderStub,
+// except the GetTypeId, which makes the ImageDecode not to create the
+// FailureImageDecoder based on the TypeId Check.
+class FakeResourceProviderStub : public render_tree::ResourceProviderStub {
+  base::TypeId GetTypeId() const override {
+    return base::GetTypeId<FakeResourceProviderStub>();
+  }
+};
+
 // Match the enums from testharness.js.
 enum TestStatus {
   kPass = 0,
@@ -190,7 +199,7 @@
   network::NetworkModule network_module(net_options);
 
   // Media module
-  render_tree::ResourceProviderStub resource_provider;
+  FakeResourceProviderStub resource_provider;
   std::unique_ptr<media::MediaModule> media_module(
       new media::MediaModule(NULL, &resource_provider));
   std::unique_ptr<media::CanPlayTypeHandler> can_play_type_handler(
diff --git a/src/cobalt/loader/image/animated_webp_image.cc b/src/cobalt/loader/image/animated_webp_image.cc
index 7b8dffd..ed0b959 100644
--- a/src/cobalt/loader/image/animated_webp_image.cc
+++ b/src/cobalt/loader/image/animated_webp_image.cc
@@ -238,13 +238,11 @@
 void DecodeError(const base::Optional<std::string>& error) {
   if (error) LOG(ERROR) << *error;
 }
-
 }  // namespace
 
 bool AnimatedWebPImage::DecodeOneFrame(int frame_index) {
   TRACE_EVENT0("cobalt::loader::image", "AnimatedWebPImage::DecodeOneFrame()");
   TRACK_MEMORY_SCOPE("Rendering");
-  DCHECK(task_runner_->BelongsToCurrentThread());
   lock_.AssertAcquired();
 
   WebPIterator webp_iterator;
@@ -407,6 +405,32 @@
   return loop_count_ == 1 && current_frame_index_ == frame_count_;
 }
 
+scoped_refptr<render_tree::Image> AnimatedWebPImage::GetFrameForDebugging(
+    int target_frame) {
+  TRACE_EVENT0("cobalt::loader::image",
+               "AnimatedWebPImage::GetFrameForDebugging()");
+
+  base::AutoLock lock(lock_);
+  DCHECK(!should_dispose_previous_frame_to_background_ && !current_canvas_);
+  DCHECK(current_frame_index_ == 0 && !is_playing_);
+
+  if (target_frame <= 0 || target_frame > frame_count_) {
+    LOG(WARNING) << "Invalid frame index: " << target_frame;
+    return nullptr;
+  }
+
+  for (int frame = 1; frame <= target_frame; ++frame) {
+    DecodeOneFrame(frame);
+  }
+
+  // Reset states when GetFrameForDebugging finishes
+  should_dispose_previous_frame_to_background_ = false;
+  scoped_refptr<render_tree::Image> target_canvas = current_canvas_;
+  current_canvas_ = nullptr;
+
+  return target_canvas;
+}
+
 }  // namespace image
 }  // namespace loader
 }  // namespace cobalt
diff --git a/src/cobalt/loader/image/animated_webp_image.h b/src/cobalt/loader/image/animated_webp_image.h
index c0fd222..135bf6a 100644
--- a/src/cobalt/loader/image/animated_webp_image.h
+++ b/src/cobalt/loader/image/animated_webp_image.h
@@ -63,6 +63,9 @@
 
   void AppendChunk(const uint8* data, size_t input_byte);
 
+  // Returns the render image of the frame for debugging
+  scoped_refptr<render_tree::Image> GetFrameForDebugging(int target_frame);
+
  private:
   ~AnimatedWebPImage() override;
 
diff --git a/src/cobalt/loader/image/image_decoder.cc b/src/cobalt/loader/image/image_decoder.cc
index 68782a3..be9856e 100644
--- a/src/cobalt/loader/image/image_decoder.cc
+++ b/src/cobalt/loader/image/image_decoder.cc
@@ -56,6 +56,9 @@
 
 // Returns true if the ResourceProvider is ResourceProviderStub.
 bool IsResourceProviderStub(render_tree::ResourceProvider* resource_provider) {
+  if (resource_provider == nullptr) {
+    return true;
+  }
   return resource_provider->GetTypeId() ==
          base::GetTypeId<render_tree::ResourceProviderStub>();
 }
@@ -108,6 +111,7 @@
       state_(resource_provider_ ? kWaitingForHeader : kSuspended),
       is_deletion_pending_(false) {
   signature_cache_.position = 0;
+  use_failure_image_decoder_ = IsResourceProviderStub(resource_provider);
 }
 
 ImageDecoder::ImageDecoder(
@@ -124,6 +128,7 @@
       state_(resource_provider_ ? kWaitingForHeader : kSuspended),
       is_deletion_pending_(false) {
   signature_cache_.position = 0;
+  use_failure_image_decoder_ = IsResourceProviderStub(resource_provider);
 }
 
 LoadResponseType ImageDecoder::OnResponseStarted(
@@ -241,11 +246,7 @@
   DCHECK_EQ(state_, kSuspended);
   DCHECK(!resource_provider_);
   DCHECK(resource_provider);
-  if (IsResourceProviderStub(resource_provider)) {
-    use_failure_image_decoder_ = true;
-  } else {
-    use_failure_image_decoder_ = false;
-  }
+  use_failure_image_decoder_ = IsResourceProviderStub(resource_provider);
   state_ = kWaitingForHeader;
   resource_provider_ = resource_provider;
 }
diff --git a/src/cobalt/loader/image/image_decoder_mock.h b/src/cobalt/loader/image/image_decoder_mock.h
new file mode 100644
index 0000000..ad8ff3a
--- /dev/null
+++ b/src/cobalt/loader/image/image_decoder_mock.h
@@ -0,0 +1,119 @@
+// Copyright 2021 The Cobalt Authors. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#ifndef COBALT_LOADER_IMAGE_IMAGE_DECODER_MOCK_H_
+#define COBALT_LOADER_IMAGE_IMAGE_DECODER_MOCK_H_
+
+#include <memory>
+#include <string>
+
+#include "cobalt/loader/image/image_decoder.h"
+#include "cobalt/render_tree/resource_provider_stub.h"
+#include "testing/gmock/include/gmock/gmock.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace cobalt {
+namespace loader {
+namespace image {
+
+struct MockImageDecoderCallback {
+  void SuccessCallback(const scoped_refptr<Image>& value) { image = value; }
+
+  MOCK_METHOD1(LoadCompleteCallback,
+               void(const base::Optional<std::string>& message));
+
+  scoped_refptr<Image> image;
+};
+
+class MockImageDecoder : public Decoder {
+ public:
+  MockImageDecoder();
+  explicit MockImageDecoder(render_tree::ResourceProvider* resource_provider);
+  ~MockImageDecoder() override {}
+
+  LoadResponseType OnResponseStarted(
+      Fetcher* fetcher,
+      const scoped_refptr<net::HttpResponseHeaders>& headers) override;
+
+  void DecodeChunk(const char* data, size_t size) override;
+
+  void Finish() override;
+  bool Suspend() override;
+  void Resume(render_tree::ResourceProvider* resource_provider) override;
+
+  scoped_refptr<Image> image();
+
+  void ExpectCallWithError(const base::Optional<std::string>& error);
+
+ protected:
+  std::unique_ptr<render_tree::ResourceProviderStub> resource_provider_stub_;
+  render_tree::ResourceProvider* resource_provider_;
+  base::NullDebuggerHooks debugger_hooks_;
+  ::testing::StrictMock<MockImageDecoderCallback> image_decoder_callback_;
+  std::unique_ptr<Decoder> image_decoder_;
+};
+
+MockImageDecoder::MockImageDecoder()
+    : resource_provider_stub_(new render_tree::ResourceProviderStub()),
+      resource_provider_(resource_provider_stub_.get()) {
+  image_decoder_.reset(new ImageDecoder(
+      resource_provider_, debugger_hooks_,
+      base::Bind(&MockImageDecoderCallback::SuccessCallback,
+                 base::Unretained(&image_decoder_callback_)),
+      base::Bind(&MockImageDecoderCallback::LoadCompleteCallback,
+                 base::Unretained(&image_decoder_callback_))));
+}
+
+MockImageDecoder::MockImageDecoder(
+    render_tree::ResourceProvider* resource_provider)
+    : resource_provider_(resource_provider) {
+  image_decoder_.reset(new ImageDecoder(
+      resource_provider_, debugger_hooks_,
+      base::Bind(&MockImageDecoderCallback::SuccessCallback,
+                 base::Unretained(&image_decoder_callback_)),
+      base::Bind(&MockImageDecoderCallback::LoadCompleteCallback,
+                 base::Unretained(&image_decoder_callback_))));
+}
+
+LoadResponseType MockImageDecoder::OnResponseStarted(
+    Fetcher* fetcher, const scoped_refptr<net::HttpResponseHeaders>& headers) {
+  return image_decoder_->OnResponseStarted(fetcher, headers);
+}
+
+void MockImageDecoder::DecodeChunk(const char* data, size_t size) {
+  image_decoder_->DecodeChunk(data, size);
+}
+
+void MockImageDecoder::Finish() { image_decoder_->Finish(); }
+
+bool MockImageDecoder::Suspend() { return image_decoder_->Suspend(); }
+
+void MockImageDecoder::Resume(
+    render_tree::ResourceProvider* resource_provider) {
+  image_decoder_->Resume(resource_provider);
+}
+
+scoped_refptr<Image> MockImageDecoder::image() {
+  return image_decoder_callback_.image;
+}
+
+void MockImageDecoder::ExpectCallWithError(
+    const base::Optional<std::string>& error) {
+  EXPECT_CALL(image_decoder_callback_, LoadCompleteCallback(error));
+}
+}  // namespace image
+}  // namespace loader
+};  // namespace cobalt
+
+#endif  // COBALT_LOADER_IMAGE_IMAGE_DECODER_MOCK_H_
diff --git a/src/cobalt/loader/image/image_decoder_test.cc b/src/cobalt/loader/image/image_decoder_test.cc
index 5aaf617..b893b23 100644
--- a/src/cobalt/loader/image/image_decoder_test.cc
+++ b/src/cobalt/loader/image/image_decoder_test.cc
@@ -12,8 +12,6 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include "cobalt/loader/image/image_decoder.h"
-
 #include <memory>
 #include <string>
 #include <vector>
@@ -27,89 +25,14 @@
 #include "cobalt/base/cobalt_paths.h"
 #include "cobalt/base/polymorphic_downcast.h"
 #include "cobalt/loader/image/animated_webp_image.h"
+#include "cobalt/loader/image/image_decoder_mock.h"
 #include "cobalt/loader/image/jpeg_image_decoder.h"
-#include "cobalt/render_tree/resource_provider_stub.h"
 #include "starboard/configuration.h"
-#include "testing/gmock/include/gmock/gmock.h"
-#include "testing/gtest/include/gtest/gtest.h"
 
 namespace cobalt {
 namespace loader {
 namespace image {
-
 namespace {
-
-struct MockImageDecoderCallback {
-  void SuccessCallback(const scoped_refptr<Image>& value) { image = value; }
-
-  MOCK_METHOD1(LoadCompleteCallback,
-               void(const base::Optional<std::string>& message));
-
-  scoped_refptr<Image> image;
-};
-
-class MockImageDecoder : public Decoder {
- public:
-  MockImageDecoder();
-  ~MockImageDecoder() override {}
-
-  LoadResponseType OnResponseStarted(
-      Fetcher* fetcher,
-      const scoped_refptr<net::HttpResponseHeaders>& headers) override;
-
-  void DecodeChunk(const char* data, size_t size) override;
-
-  void Finish() override;
-  bool Suspend() override;
-  void Resume(render_tree::ResourceProvider* resource_provider) override;
-
-  scoped_refptr<Image> image();
-
-  void ExpectCallWithError(const base::Optional<std::string>& error);
-
- protected:
-  render_tree::ResourceProviderStub resource_provider_;
-  base::NullDebuggerHooks debugger_hooks_;
-  ::testing::StrictMock<MockImageDecoderCallback> image_decoder_callback_;
-  std::unique_ptr<Decoder> image_decoder_;
-};
-
-MockImageDecoder::MockImageDecoder() {
-  image_decoder_.reset(new ImageDecoder(
-      &resource_provider_, debugger_hooks_,
-      base::Bind(&MockImageDecoderCallback::SuccessCallback,
-                 base::Unretained(&image_decoder_callback_)),
-      base::Bind(&MockImageDecoderCallback::LoadCompleteCallback,
-                 base::Unretained(&image_decoder_callback_))));
-}
-
-LoadResponseType MockImageDecoder::OnResponseStarted(
-    Fetcher* fetcher, const scoped_refptr<net::HttpResponseHeaders>& headers) {
-  return image_decoder_->OnResponseStarted(fetcher, headers);
-}
-
-void MockImageDecoder::DecodeChunk(const char* data, size_t size) {
-  image_decoder_->DecodeChunk(data, size);
-}
-
-void MockImageDecoder::Finish() { image_decoder_->Finish(); }
-
-bool MockImageDecoder::Suspend() { return image_decoder_->Suspend(); }
-
-void MockImageDecoder::Resume(
-    render_tree::ResourceProvider* resource_provider) {
-  image_decoder_->Resume(resource_provider);
-}
-
-scoped_refptr<Image> MockImageDecoder::image() {
-  return image_decoder_callback_.image;
-}
-
-void MockImageDecoder::ExpectCallWithError(
-    const base::Optional<std::string>& error) {
-  EXPECT_CALL(image_decoder_callback_, LoadCompleteCallback(error));
-}
-
 base::FilePath GetTestImagePath(const char* file_name) {
   base::FilePath data_directory;
   CHECK(base::PathService::Get(base::DIR_TEST_DATA, &data_directory));
@@ -227,13 +150,24 @@
   return CheckSameColor(pixels, size.width(), size.height(), test_color);
 }
 
+// FakeResourceProviderStub has the identical behavior as ResourceProviderStub,
+// except the GetTypeId, which makes the ImageDecode not to create the
+// FailureImageDecoder based on the TypeId Check.
+class FakeResourceProviderStub : public render_tree::ResourceProviderStub {
+  base::TypeId GetTypeId() const override {
+    return base::GetTypeId<FakeResourceProviderStub>();
+  }
+};
+
 }  // namespace
 
 // TODO: Test special images like the image has gAMA chunk information,
 // pngs with 16 bit depth, and large pngs.
 
 TEST(ImageDecoderTest, DecodeImageWithContentLength0) {
-  MockImageDecoder image_decoder;
+  std::unique_ptr<FakeResourceProviderStub> resource_provider(
+      new FakeResourceProviderStub());
+  MockImageDecoder image_decoder(resource_provider.get());
   image_decoder.ExpectCallWithError(
       std::string("No content returned, but expected some."));
 
@@ -257,7 +191,9 @@
 }
 
 TEST(ImageDecoderTest, DecodeNonImageTypeWithContentLength0) {
-  MockImageDecoder image_decoder;
+  std::unique_ptr<FakeResourceProviderStub> resource_provider(
+      new FakeResourceProviderStub());
+  MockImageDecoder image_decoder(resource_provider.get());
   image_decoder.ExpectCallWithError(std::string(
       "No content returned, but expected some. Not an image mime type."));
 
@@ -281,7 +217,9 @@
 }
 
 TEST(ImageDecoderTest, DecodeNonImageType) {
-  MockImageDecoder image_decoder;
+  std::unique_ptr<FakeResourceProviderStub> resource_provider(
+      new FakeResourceProviderStub());
+  MockImageDecoder image_decoder(resource_provider.get());
   image_decoder.ExpectCallWithError(std::string("Not an image mime type."));
 
   const char kHTMLHeaders[] = {
@@ -306,7 +244,9 @@
 }
 
 TEST(ImageDecoderTest, DecodeNoContentType) {
-  MockImageDecoder image_decoder;
+  std::unique_ptr<FakeResourceProviderStub> resource_provider(
+      new FakeResourceProviderStub());
+  MockImageDecoder image_decoder(resource_provider.get());
   image_decoder.ExpectCallWithError(std::string("Not an image mime type."));
 
   const char kHTMLHeaders[] = {
@@ -330,7 +270,9 @@
 }
 
 TEST(ImageDecoderTest, DecodeImageWithNoContent) {
-  MockImageDecoder image_decoder;
+  std::unique_ptr<FakeResourceProviderStub> resource_provider(
+      new FakeResourceProviderStub());
+  MockImageDecoder image_decoder(resource_provider.get());
   image_decoder.ExpectCallWithError(
       std::string("No content returned. Not an image mime type."));
 
@@ -354,7 +296,9 @@
 }
 
 TEST(ImageDecoderTest, DecodeImageWithLessThanHeaderBytes) {
-  MockImageDecoder image_decoder;
+  std::unique_ptr<FakeResourceProviderStub> resource_provider(
+      new FakeResourceProviderStub());
+  MockImageDecoder image_decoder(resource_provider.get());
   image_decoder.ExpectCallWithError(
       std::string("No enough image data for header."));
 
@@ -366,7 +310,9 @@
 }
 
 TEST(ImageDecoderTest, FailedToDecodeImage) {
-  MockImageDecoder image_decoder;
+  std::unique_ptr<FakeResourceProviderStub> resource_provider(
+      new FakeResourceProviderStub());
+  MockImageDecoder image_decoder(resource_provider.get());
   image_decoder.ExpectCallWithError(
       std::string("PNGImageDecoder failed to decode image."));
 
@@ -380,7 +326,9 @@
 }
 
 TEST(ImageDecoderTest, UnsupportedImageFormat) {
-  MockImageDecoder image_decoder;
+  std::unique_ptr<FakeResourceProviderStub> resource_provider(
+      new FakeResourceProviderStub());
+  MockImageDecoder image_decoder(resource_provider.get());
   image_decoder.ExpectCallWithError(std::string("Unsupported image format."));
 
   const char kPartialICOImage[] = {
@@ -393,7 +341,9 @@
 
 // Test that we can properly decode the PNG image.
 TEST(ImageDecoderTest, DecodePNGImage) {
-  MockImageDecoder image_decoder;
+  std::unique_ptr<FakeResourceProviderStub> resource_provider(
+      new FakeResourceProviderStub());
+  MockImageDecoder image_decoder(resource_provider.get());
   image_decoder.ExpectCallWithError(base::nullopt);
 
   std::vector<uint8> image_data =
@@ -427,7 +377,9 @@
 
 // Test that we can properly decode the PNG image with multiple chunks.
 TEST(ImageDecoderTest, DecodePNGImageWithMultipleChunks) {
-  MockImageDecoder image_decoder;
+  std::unique_ptr<FakeResourceProviderStub> resource_provider(
+      new FakeResourceProviderStub());
+  MockImageDecoder image_decoder(resource_provider.get());
   image_decoder.ExpectCallWithError(base::nullopt);
 
   std::vector<uint8> image_data =
@@ -465,7 +417,9 @@
 
 // Test that we can properly decode the the interlaced PNG.
 TEST(ImageDecoderTest, DecodeInterlacedPNGImage) {
-  MockImageDecoder image_decoder;
+  std::unique_ptr<FakeResourceProviderStub> resource_provider(
+      new FakeResourceProviderStub());
+  MockImageDecoder image_decoder(resource_provider.get());
   image_decoder.ExpectCallWithError(base::nullopt);
 
   std::vector<uint8> image_data =
@@ -499,7 +453,9 @@
 
 // Test that we can properly decode the interlaced PNG with multiple chunks.
 TEST(ImageDecoderTest, DecodeInterlacedPNGImageWithMultipleChunks) {
-  MockImageDecoder image_decoder;
+  std::unique_ptr<FakeResourceProviderStub> resource_provider(
+      new FakeResourceProviderStub());
+  MockImageDecoder image_decoder(resource_provider.get());
   image_decoder.ExpectCallWithError(base::nullopt);
 
   std::vector<uint8> image_data =
@@ -537,7 +493,9 @@
 
 // Test that we can properly decode the JPEG image.
 TEST(ImageDecoderTest, DecodeJPEGImage) {
-  MockImageDecoder image_decoder;
+  std::unique_ptr<FakeResourceProviderStub> resource_provider(
+      new FakeResourceProviderStub());
+  MockImageDecoder image_decoder(resource_provider.get());
   image_decoder.ExpectCallWithError(base::nullopt);
 
   std::vector<uint8> image_data =
@@ -563,7 +521,9 @@
 
 // Test that we can properly decode the JPEG image with multiple chunks.
 TEST(ImageDecoderTest, DecodeJPEGImageWithMultipleChunks) {
-  MockImageDecoder image_decoder;
+  std::unique_ptr<FakeResourceProviderStub> resource_provider(
+      new FakeResourceProviderStub());
+  MockImageDecoder image_decoder(resource_provider.get());
   image_decoder.ExpectCallWithError(base::nullopt);
 
   std::vector<uint8> image_data =
@@ -593,7 +553,9 @@
 
 // Test that we can properly decode the progressive JPEG image.
 TEST(ImageDecoderTest, DecodeProgressiveJPEGImage) {
-  MockImageDecoder image_decoder;
+  std::unique_ptr<FakeResourceProviderStub> resource_provider(
+      new FakeResourceProviderStub());
+  MockImageDecoder image_decoder(resource_provider.get());
   image_decoder.ExpectCallWithError(base::nullopt);
 
   std::vector<uint8> image_data =
@@ -620,7 +582,9 @@
 
 // Test that we can properly decode the progressive JPEG with multiple chunks.
 TEST(ImageDecoderTest, DecodeProgressiveJPEGImageWithMultipleChunks) {
-  MockImageDecoder image_decoder;
+  std::unique_ptr<FakeResourceProviderStub> resource_provider(
+      new FakeResourceProviderStub());
+  MockImageDecoder image_decoder(resource_provider.get());
   image_decoder.ExpectCallWithError(base::nullopt);
 
   std::vector<uint8> image_data =
@@ -651,7 +615,7 @@
 // Test that we can properly decode the progressive JPEG image while forcing the
 // output to be single plane.
 TEST(ImageDecoderTest, DecodeProgressiveJPEGImageToSinglePlane) {
-  render_tree::ResourceProviderStub resource_provider;
+  FakeResourceProviderStub resource_provider;
   base::NullDebuggerHooks debugger_hooks;
   const bool kAllowImageDecodingToMultiPlane = false;
   JPEGImageDecoder jpeg_image_decoder(&resource_provider, debugger_hooks,
@@ -684,7 +648,7 @@
 // while forcing the output to be single plane.
 TEST(ImageDecoderTest,
      DecodeProgressiveJPEGImageWithMultipleChunksToSinglePlane) {
-  render_tree::ResourceProviderStub resource_provider;
+  FakeResourceProviderStub resource_provider;
   base::NullDebuggerHooks debugger_hooks;
   const bool kAllowImageDecodingToMultiPlane = false;
   JPEGImageDecoder jpeg_image_decoder(&resource_provider, debugger_hooks,
@@ -719,7 +683,9 @@
 
 // Test that we can properly decode the WEBP image.
 TEST(ImageDecoderTest, DecodeWEBPImage) {
-  MockImageDecoder image_decoder;
+  std::unique_ptr<FakeResourceProviderStub> resource_provider(
+      new FakeResourceProviderStub());
+  MockImageDecoder image_decoder(resource_provider.get());
   image_decoder.ExpectCallWithError(base::nullopt);
 
   std::vector<uint8> image_data =
@@ -752,7 +718,9 @@
 
 // Test that we can properly decode the WEBP image with multiple chunks.
 TEST(ImageDecoderTest, DecodeWEBPImageWithMultipleChunks) {
-  MockImageDecoder image_decoder;
+  std::unique_ptr<FakeResourceProviderStub> resource_provider(
+      new FakeResourceProviderStub());
+  MockImageDecoder image_decoder(resource_provider.get());
   image_decoder.ExpectCallWithError(base::nullopt);
 
   std::vector<uint8> image_data =
@@ -791,7 +759,9 @@
   base::Thread thread("AnimatedWebP");
   thread.Start();
 
-  MockImageDecoder image_decoder;
+  std::unique_ptr<FakeResourceProviderStub> resource_provider(
+      new FakeResourceProviderStub());
+  MockImageDecoder image_decoder(resource_provider.get());
   image_decoder.ExpectCallWithError(base::nullopt);
 
   std::vector<uint8> image_data =
@@ -820,7 +790,9 @@
   base::Thread thread("AnimatedWebP");
   thread.Start();
 
-  MockImageDecoder image_decoder;
+  std::unique_ptr<FakeResourceProviderStub> resource_provider(
+      new FakeResourceProviderStub());
+  MockImageDecoder image_decoder(resource_provider.get());
   image_decoder.ExpectCallWithError(base::nullopt);
 
   std::vector<uint8> image_data =
@@ -846,7 +818,6 @@
   EXPECT_EQ(math::Size(480, 270), animated_webp_image->GetSize());
   EXPECT_TRUE(animated_webp_image->IsOpaque());
 }
-
 }  // namespace image
 }  // namespace loader
 }  // namespace cobalt
diff --git a/src/cobalt/media_session/media_session_client.cc b/src/cobalt/media_session/media_session_client.cc
index 7dd8853..09a5424 100644
--- a/src/cobalt/media_session/media_session_client.cc
+++ b/src/cobalt/media_session/media_session_client.cc
@@ -176,8 +176,6 @@
 }
 
 void MediaSessionClient::PostDelayedTaskForMaybeFreezeCallback() {
-  if (is_active()) return;
-
   media_session_->task_runner_->PostDelayedTask(
       FROM_HERE, base::Bind(&MediaSessionClient::RunMaybeFreezeCallback,
                             base::Unretained(this), ++sequence_number_),
diff --git a/src/cobalt/renderer/pipeline.cc b/src/cobalt/renderer/pipeline.cc
index bb9954c..c49e72d 100644
--- a/src/cobalt/renderer/pipeline.cc
+++ b/src/cobalt/renderer/pipeline.cc
@@ -26,10 +26,9 @@
 #include "cobalt/base/polymorphic_downcast.h"
 #include "cobalt/extension/graphics.h"
 #include "cobalt/math/rect_f.h"
-#include "cobalt/render_tree/brush.h"
+#include "cobalt/render_tree/clear_rect_node.h"
 #include "cobalt/render_tree/composition_node.h"
 #include "cobalt/render_tree/dump_render_tree_to_string.h"
-#include "cobalt/render_tree/rect_node.h"
 #include "nb/memory_scope.h"
 #include "starboard/system.h"
 
@@ -66,7 +65,7 @@
 // How many entries the rasterize periodic timer will contain before updating.
 const size_t kRasterizePeriodicTimerEntriesPerUpdate = 60;
 
-// The maximum numer of entries that the rasterize animations timer can contain
+// The maximum number of entries that the rasterize animations timer can contain
 // before automatically updating. In the typical use case, the update will
 // occur manually when the animations expire.
 const size_t kRasterizeAnimationsTimerMaxEntries = 60;
@@ -658,11 +657,10 @@
   render_tree::ColorRGBA clear_color;
   if (render_target_ && clear_on_shutdown_mode_ == kClearAccordingToPlatform &&
       ShouldClearFrameOnShutdown(&clear_color)) {
-    rasterizer_->Submit(new render_tree::RectNode(
-                            math::RectF(render_target_->GetSize()),
-                            std::unique_ptr<render_tree::Brush>(
-                                new render_tree::SolidColorBrush(clear_color))),
-                        render_target_);
+    rasterizer_->Submit(
+        new render_tree::ClearRectNode(math::RectF(render_target_->GetSize()),
+                                       clear_color),
+        render_target_);
   }
 
   // This potential reference to a render tree whose animations may have ended
diff --git a/src/cobalt/renderer/rasterizer/pixel_test.cc b/src/cobalt/renderer/rasterizer/pixel_test.cc
index 6ee0ccb..8bc8886 100644
--- a/src/cobalt/renderer/rasterizer/pixel_test.cc
+++ b/src/cobalt/renderer/rasterizer/pixel_test.cc
@@ -19,6 +19,8 @@
 #include "base/files/file_path.h"
 #include "base/memory/ptr_util.h"
 #include "base/path_service.h"
+#include "cobalt/loader/image/animated_webp_image.h"
+#include "cobalt/loader/image/image_decoder_mock.h"
 #include "cobalt/math/matrix3_f.h"
 #include "cobalt/math/rect_f.h"
 #include "cobalt/math/size_f.h"
@@ -68,6 +70,9 @@
 #endif
 #endif
 
+using cobalt::loader::image::AnimatedWebPImage;
+using cobalt::loader::image::MockImageDecoder;
+using cobalt::loader::image::MockImageDecoderCallback;
 using cobalt::math::Matrix3F;
 using cobalt::math::PointF;
 using cobalt::math::RectF;
@@ -4566,6 +4571,38 @@
           TranslateMatrix(output_surface_size().width() * -0.5f, 0.0f)));
 }
 
+TEST_F(PixelTest, DebugAnimatedWebPFrame) {
+  MockImageDecoder image_decoder(GetResourceProvider());
+  image_decoder.ExpectCallWithError(base::nullopt);
+
+  std::vector<uint8> image_data =
+      GetFileData(GetTestFilePath("loading-spinner-opaque.webp"));
+  image_decoder.DecodeChunk(reinterpret_cast<char*>(&image_data[0]),
+                            image_data.size());
+  image_decoder.Finish();
+
+  scoped_refptr<AnimatedWebPImage> animated_webp_image =
+      base::polymorphic_downcast<AnimatedWebPImage*>(
+          image_decoder.image().get());
+
+  scoped_refptr<Image> frame_image =
+      animated_webp_image->GetFrameForDebugging(20);
+
+  scoped_refptr<ImageNode> frame_image_node = new ImageNode(frame_image);
+
+  CompositionNode::Builder builder;
+
+  // Test opaque background animated webp image on top of an opaque canvas
+  // webp image's background should be ignored and only shows underlying
+  // canvas's color.
+  builder.AddChild(new ClearRectNode(math::RectF(output_surface_size()),
+                                     ColorRGBA(0.0f, 0.0f, 0.0f, 1.0f)));
+  builder.AddChild(frame_image_node);
+
+  scoped_refptr<Node> root = new CompositionNode(builder);
+  TestTree(root);
+}
+
 #endif  // !SB_HAS(BLITTER)
 
 }  // namespace rasterizer
diff --git a/src/cobalt/renderer/rasterizer/testdata/DebugAnimatedWebPFrame-expected.png b/src/cobalt/renderer/rasterizer/testdata/DebugAnimatedWebPFrame-expected.png
new file mode 100644
index 0000000..c7ba0fe
--- /dev/null
+++ b/src/cobalt/renderer/rasterizer/testdata/DebugAnimatedWebPFrame-expected.png
Binary files differ
diff --git a/src/cobalt/renderer/rasterizer/testdata/loading-spinner-opaque.webp b/src/cobalt/renderer/rasterizer/testdata/loading-spinner-opaque.webp
new file mode 100644
index 0000000..6cee3dd
--- /dev/null
+++ b/src/cobalt/renderer/rasterizer/testdata/loading-spinner-opaque.webp
Binary files differ
diff --git a/src/cobalt/renderer/renderer.gyp b/src/cobalt/renderer/renderer.gyp
index 5904624..f63ce0b 100644
--- a/src/cobalt/renderer/renderer.gyp
+++ b/src/cobalt/renderer/renderer.gyp
@@ -102,6 +102,7 @@
       ],
       'dependencies': [
         '<(DEPTH)/cobalt/base/base.gyp:base',
+        '<(DEPTH)/cobalt/loader/loader.gyp:loader',
         '<(DEPTH)/testing/gmock.gyp:gmock',
         '<(DEPTH)/testing/gtest.gyp:gtest',
         'render_tree_pixel_tester',
diff --git a/src/docker/linux/raspi/gn/Dockerfile b/src/docker/linux/raspi/gn/Dockerfile
index 2952fef..3339455 100644
--- a/src/docker/linux/raspi/gn/Dockerfile
+++ b/src/docker/linux/raspi/gn/Dockerfile
@@ -14,5 +14,5 @@
 
 FROM cobalt-build-raspi
 
-CMD gn gen ${OUTDIR}/${PLATFORM}_${CONFIG} --args="target_platform=\"${PLATFORM}\" build_type=\"${CONFIG}\" target_cpu=\"arm\" treat_warnings_as_errors=false" && \
+CMD gn gen ${OUTDIR}/${PLATFORM}_${CONFIG} --args="target_platform=\"${PLATFORM}\" build_type=\"${CONFIG}\" target_cpu=\"arm\" is_clang=false can_build_evergreen_loader_apps=false " && \
     ninja -j ${NINJA_PARALLEL} -C ${OUTDIR}/${PLATFORM}_${CONFIG}
diff --git a/src/starboard/android/apk/app/src/main/java/dev/cobalt/media/CobaltMediaSession.java b/src/starboard/android/apk/app/src/main/java/dev/cobalt/media/CobaltMediaSession.java
index c31e017..ba0329d 100644
--- a/src/starboard/android/apk/app/src/main/java/dev/cobalt/media/CobaltMediaSession.java
+++ b/src/starboard/android/apk/app/src/main/java/dev/cobalt/media/CobaltMediaSession.java
@@ -521,6 +521,10 @@
   }
 
   private void updateMetadata(boolean resetMetadataWithEmptyBuilder) {
+    if (mediaSession == null) {
+      return;
+    }
+
     MediaMetadataCompat.Builder metadataBuilder = new MediaMetadataCompat.Builder();
     // Reset the metadata to make sure the artwork update correctly.
     if (resetMetadataWithEmptyBuilder) mediaSession.setMetadata(metadataBuilder.build());
diff --git a/src/starboard/android/shared/BUILD.gn b/src/starboard/android/shared/BUILD.gn
index a84353e..3cf4157 100644
--- a/src/starboard/android/shared/BUILD.gn
+++ b/src/starboard/android/shared/BUILD.gn
@@ -284,6 +284,9 @@
     "atomic_public.h",
     "audio_decoder.cc",
     "audio_decoder.h",
+    "audio_decoder_passthrough.h",
+    "audio_renderer_passthrough.cc",
+    "audio_renderer_passthrough.h",
     "audio_sink_get_max_channels.cc",
     "audio_sink_get_min_buffer_size_in_frames.cc",
     "audio_sink_get_nearest_supported_sample_frequency.cc",
@@ -293,6 +296,8 @@
     "audio_sink_min_required_frames_tester.h",
     "audio_track_audio_sink_type.cc",
     "audio_track_audio_sink_type.h",
+    "audio_track_bridge.cc",
+    "audio_track_bridge.h",
     "bionic/bionic_netlink.cpp",
     "bionic/bionic_netlink.h",
     "bionic/ifaddrs.cpp",
diff --git a/src/starboard/android/shared/starboard_platform.gypi b/src/starboard/android/shared/starboard_platform.gypi
index 6e61339..e8579cb 100644
--- a/src/starboard/android/shared/starboard_platform.gypi
+++ b/src/starboard/android/shared/starboard_platform.gypi
@@ -164,6 +164,7 @@
         'system_has_capability.cc',
         'system_network_is_disconnected.cc',
         'system_platform_error.cc',
+        'system_request_conceal.cc',
         'system_request_freeze_no_freezedone_callback.cc',
         'system_request_stop.cc',
         'system_request_suspend.cc',
@@ -357,7 +358,6 @@
         '<(DEPTH)/starboard/shared/signal/crash_signals_sigaction.cc',
         '<(DEPTH)/starboard/shared/signal/suspend_signals.cc',
         '<(DEPTH)/starboard/shared/signal/suspend_signals.h',
-        '<(DEPTH)/starboard/shared/signal/system_request_conceal.cc',
         '<(DEPTH)/starboard/shared/starboard/application.cc',
         '<(DEPTH)/starboard/shared/starboard/application.h',
         '<(DEPTH)/starboard/shared/starboard/audio_sink/audio_sink_create.cc',
diff --git a/src/starboard/android/shared/system_request_conceal.cc b/src/starboard/android/shared/system_request_conceal.cc
new file mode 100644
index 0000000..1406923
--- /dev/null
+++ b/src/starboard/android/shared/system_request_conceal.cc
@@ -0,0 +1,24 @@
+// Copyright 2017 The Cobalt Authors. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#include "starboard/system.h"
+
+#include "starboard/android/shared/jni_env_ext.h"
+
+using starboard::android::shared::JniEnvExt;
+
+void SbSystemRequestConceal() {
+  JniEnvExt* env = JniEnvExt::Get();
+  env->CallStarboardVoidMethodOrAbort("requestSuspend", "()V");
+}
diff --git a/src/starboard/android/shared/system_request_freeze_no_freezedone_callback.cc b/src/starboard/android/shared/system_request_freeze_no_freezedone_callback.cc
index d245e9e..7a4942b 100644
--- a/src/starboard/android/shared/system_request_freeze_no_freezedone_callback.cc
+++ b/src/starboard/android/shared/system_request_freeze_no_freezedone_callback.cc
@@ -14,12 +14,9 @@
 
 #include "starboard/system.h"
 
-#include "starboard/android/shared/jni_env_ext.h"
 #include "starboard/shared/signal/signal_internal.h"
 #include "starboard/shared/starboard/application.h"
 
-using starboard::android::shared::JniEnvExt;
-
 #if SB_IS(EVERGREEN_COMPATIBLE) && !SB_IS(EVERGREEN_COMPATIBLE_LITE)
 #include "starboard/loader_app/pending_restart.h"
 #endif  // SB_IS(EVERGREEN_COMPATIBLE) && !SB_IS(EVERGREEN_COMPATIBLE_LITE)
@@ -35,19 +32,11 @@
     // There is no FreezeDone callback for stopping all thread execution
     // after fully transitioning into Frozen.
     starboard::shared::starboard::Application::Get()->Freeze(NULL, NULL);
-
-    // Let Android platform directly transit into Frozen.
-    JniEnvExt* env = JniEnvExt::Get();
-    env->CallStarboardVoidMethodOrAbort("requestSuspend", "()V");
   }
 #else
   // There is no FreezeDone callback for stopping all thread execution
   // after fully transitioning into Frozen.
   starboard::shared::starboard::Application::Get()->Freeze(NULL, NULL);
-
-  // Let Android platform directly transit into Frozen.
-  JniEnvExt* env = JniEnvExt::Get();
-  env->CallStarboardVoidMethodOrAbort("requestSuspend", "()V");
 #endif  // SB_IS(EVERGREEN_COMPATIBLE) && !SB_IS(EVERGREEN_COMPATIBLE_LITE)
 }
-#endif  // SB_API_VERSION >= 13
+#endif  // SB_API_VERSION >= 13
\ No newline at end of file
diff --git a/src/starboard/build/config/BUILDCONFIG.gn b/src/starboard/build/config/BUILDCONFIG.gn
index 38169b8..b3356ca 100644
--- a/src/starboard/build/config/BUILDCONFIG.gn
+++ b/src/starboard/build/config/BUILDCONFIG.gn
@@ -26,6 +26,9 @@
   cobalt_fastbuild = getenv("IS_CI") == 1
 
   is_internal_build = false
+
+  # TODO: Remove this flag when the affected targets can be built.
+  can_build_evergreen_loader_apps = true
 }
 
 is_debug = build_type == "debug"
diff --git a/src/starboard/build/config/base_configuration.gni b/src/starboard/build/config/base_configuration.gni
index f2ea066..293751b 100644
--- a/src/starboard/build/config/base_configuration.gni
+++ b/src/starboard/build/config/base_configuration.gni
@@ -98,4 +98,7 @@
   static_library_configs = []
   source_set_configs = []
   loadable_module_configs = []
+
+  # Whether or not to build drm test suites.
+  has_drm_support = true
 }
diff --git a/src/starboard/build/config/sabi/BUILD.gn b/src/starboard/build/config/sabi/BUILD.gn
index 081e595..96b4185 100644
--- a/src/starboard/build/config/sabi/BUILD.gn
+++ b/src/starboard/build/config/sabi/BUILD.gn
@@ -49,6 +49,9 @@
     "SB_SABI_JSON_ID=R\"($sabi_id)\"",
     "SB_API_VERSION=$sb_api_version",
 
+    "SB_SABI_TARGET_ARCH=\"${target_cpu}\"",
+    "SB_SABI_WORD_SIZE=\"${word_size}\"",
+
     "SB_IS_ARCH_${arch_uppercase}=1",
     "SB_HAS_${calling_convention_uppercase}_CALLING=1",
     "SB_HAS_${floating_point_abi_uppercase}_FLOATS=1",
diff --git a/src/starboard/build/doc/migrating_gyp_to_gn.md b/src/starboard/build/doc/migrating_gyp_to_gn.md
index 1a3d4bb..c6d06b6 100644
--- a/src/starboard/build/doc/migrating_gyp_to_gn.md
+++ b/src/starboard/build/doc/migrating_gyp_to_gn.md
@@ -203,20 +203,25 @@
 comparison tool, i.e. [meld](https://meldmerge.org/). This will allow you to see
 any changes in commands, i.e. with flags or otherwise.
 
-The name of the intermediate .o, .d files is different in both cases: this
-doesn't cause any issues. Keep this in mind while comparing the ninja flags for
-GYP vs GN. Here is an example for raspi2 while compiling the same source file
-```
-starboard/common/new.cc
-```
-GYP generates:
-```
-obj/starboard/common/common.new.cc.o
-```
-GN generates:
-```
-obj/starboard/common/common/new.o
-```
+The following differences for ninja flags between GYP and GN don't cause any
+issues:
+
+1. The name of the intermediate .o, .d files is different in both cases: Here is
+   an example while compiling the same source file
+   ```
+   starboard/common/new.cc
+   ```
+   GYP generates:
+   ```
+   obj/starboard/common/common.new.cc.o
+   ```
+   GN generates:
+   ```
+   obj/starboard/common/common/new.o
+   ```
+2. The `-x` flag for specifying language is not present in GN migration.
+   For example GYP specifies `-x c` flag while building c language files for
+   certain targets. This flag is not specified while building any GN targets.
 
 ### Validating a Platform
 
diff --git a/src/starboard/contrib/linux/README.md b/src/starboard/contrib/linux/README.md
new file mode 100644
index 0000000..8c3fd94
--- /dev/null
+++ b/src/starboard/contrib/linux/README.md
@@ -0,0 +1,18 @@
+### Example Linux variant for Stadia
+
+## ./linux/stadia
+  This directory must be copied into starboard/linux/ in order to be built. Once this directory is copied into starboard/linux, you will be able to run the build commands for a Stadia configuration.
+  Sample commands:
+
+```bash
+$ cp starboard/contrib/linux/stadia starboard/linux/
+$ ./cobalt/build/gyp_cobalt linux-stadia
+$ ninja -C out/linux-stadia_devel cobalt
+```
+
+**NOTE: This target will not be able to successfully link without a shared library that implements the shared interface defined in ./clients**
+
+This build configuration was based completely on the linux-x64x11 configuration,
+and the only differences are that this configuration extends ApplicationX11 in
+order to initialize Stadia and that this configuration registers the Stadia
+extension API in SbSystemGetExtension.
diff --git a/src/starboard/contrib/linux/stadia/__init__.py b/src/starboard/contrib/linux/stadia/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/src/starboard/contrib/linux/stadia/__init__.py
diff --git a/src/starboard/contrib/linux/stadia/atomic_public.h b/src/starboard/contrib/linux/stadia/atomic_public.h
new file mode 100644
index 0000000..6c07e70
--- /dev/null
+++ b/src/starboard/contrib/linux/stadia/atomic_public.h
@@ -0,0 +1,20 @@
+// Copyright 2021 The Cobalt Authors. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#ifndef STARBOARD_LINUX_STADIA_ATOMIC_PUBLIC_H_
+#define STARBOARD_LINUX_STADIA_ATOMIC_PUBLIC_H_
+
+#include "starboard/linux/shared/atomic_public.h"
+
+#endif  // STARBOARD_LINUX_STADIA_ATOMIC_PUBLIC_H_
diff --git a/src/starboard/contrib/linux/stadia/configuration_public.h b/src/starboard/contrib/linux/stadia/configuration_public.h
new file mode 100644
index 0000000..8fb5278
--- /dev/null
+++ b/src/starboard/contrib/linux/stadia/configuration_public.h
@@ -0,0 +1,28 @@
+// Copyright 2021 The Cobalt Authors. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+// The Starboard configuration for Desktop x64 Linux. Other devices will have
+// specific Starboard implementations, even if they ultimately are running some
+// version of Linux.
+
+// Other source files should never include this header directly, but should
+// include the generic "starboard/configuration.h" instead.
+
+#ifndef STARBOARD_LINUX_STADIA_CONFIGURATION_PUBLIC_H_
+#define STARBOARD_LINUX_STADIA_CONFIGURATION_PUBLIC_H_
+
+// Include the x64x11 Linux configuration on which this config is based.
+#include "starboard/linux/x64x11/configuration_public.h"
+
+#endif  // STARBOARD_LINUX_STADIA_CONFIGURATION_PUBLIC_H_
diff --git a/src/starboard/contrib/linux/stadia/gyp_configuration.gypi b/src/starboard/contrib/linux/stadia/gyp_configuration.gypi
new file mode 100644
index 0000000..14694c7
--- /dev/null
+++ b/src/starboard/contrib/linux/stadia/gyp_configuration.gypi
@@ -0,0 +1,43 @@
+# Copyright 2021 The Cobalt Authors. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+{
+  'variables': {
+    'variables': {
+      'sb_evergreen_compatible': 1,
+      'sb_evergreen_compatible_libunwind': 1,
+    }
+  },
+  'target_defaults': {
+    'default_configuration': 'linux-stadia_debug',
+    'configurations': {
+      'linux-stadia_debug': {
+        'inherit_from': ['debug_base'],
+      },
+      'linux-stadia_devel': {
+        'inherit_from': ['devel_base'],
+      },
+      'linux-stadia_qa': {
+        'inherit_from': ['qa_base'],
+      },
+      'linux-stadia_gold': {
+        'inherit_from': ['gold_base'],
+      },
+    }, # end of configurations
+  },
+
+  'includes': [
+    '<(DEPTH)/starboard/linux/x64x11/gyp_configuration.gypi',
+  ],
+}
diff --git a/src/starboard/contrib/linux/stadia/gyp_configuration.py b/src/starboard/contrib/linux/stadia/gyp_configuration.py
new file mode 100644
index 0000000..c75a68c
--- /dev/null
+++ b/src/starboard/contrib/linux/stadia/gyp_configuration.py
@@ -0,0 +1,59 @@
+# Copyright 2021 The Cobalt Authors. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+"""Starboard Linux Stadia platform configuration."""
+
+from starboard.linux.shared import gyp_configuration as shared_configuration
+from starboard.tools.toolchain import ar
+from starboard.tools.toolchain import bash
+from starboard.tools.toolchain import clang
+from starboard.tools.toolchain import clangxx
+from starboard.tools.toolchain import cp
+from starboard.tools.toolchain import touch
+
+
+class LinuxStadiaConfiguration(shared_configuration.LinuxConfiguration):
+  """Starboard Linux Stadia platform configuration."""
+
+  def __init__(self,
+               platform='linux-stadia',
+               asan_enabled_by_default=True,
+               sabi_json_path='starboard/sabi/default/sabi.json'):
+    super(LinuxStadiaConfiguration,
+          self).__init__(platform, asan_enabled_by_default, sabi_json_path)
+
+  def GetTargetToolchain(self, **kwargs):
+    return self.GetHostToolchain(**kwargs)
+
+  def GetHostToolchain(self, **kwargs):
+    environment_variables = self.GetEnvironmentVariables()
+    cc_path = environment_variables['CC']
+    cxx_path = environment_variables['CXX']
+
+    return [
+        clang.CCompiler(path=cc_path),
+        clang.CxxCompiler(path=cxx_path),
+        clang.AssemblerWithCPreprocessor(path=cc_path),
+        ar.StaticThinLinker(),
+        ar.StaticLinker(),
+        clangxx.ExecutableLinker(path=cxx_path),
+        clangxx.SharedLibraryLinker(path=cxx_path),
+        cp.Copy(),
+        touch.Stamp(),
+        bash.Shell(),
+    ]
+
+
+def CreatePlatformConfig():
+  return LinuxStadiaConfiguration(
+      sabi_json_path='starboard/sabi/x64/sysv/sabi-v{sb_api_version}.json')
diff --git a/src/starboard/contrib/linux/stadia/libraries.gypi b/src/starboard/contrib/linux/stadia/libraries.gypi
new file mode 100644
index 0000000..fbf7bd1
--- /dev/null
+++ b/src/starboard/contrib/linux/stadia/libraries.gypi
@@ -0,0 +1,19 @@
+# Copyright 2021 The Cobalt Authors. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+{
+  'includes': [
+    '<(DEPTH)/starboard/linux/x64x11/shared/libraries.gypi',
+  ],
+}
diff --git a/src/starboard/contrib/linux/stadia/main.cc b/src/starboard/contrib/linux/stadia/main.cc
new file mode 100644
index 0000000..61c90a1
--- /dev/null
+++ b/src/starboard/contrib/linux/stadia/main.cc
@@ -0,0 +1,49 @@
+// Copyright 2021 The Cobalt Authors. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#include <time.h>
+
+#include "starboard/configuration.h"
+#include "starboard/contrib/stadia/x11/application_stadia_x11.h"
+#include "starboard/shared/signal/crash_signals.h"
+#include "starboard/shared/signal/suspend_signals.h"
+#include "starboard/shared/starboard/link_receiver.h"
+
+#include "third_party/crashpad/wrapper/wrapper.h"
+
+extern "C" SB_EXPORT_PLATFORM int main(int argc, char** argv) {
+  tzset();
+  starboard::shared::signal::InstallCrashSignalHandlers();
+  starboard::shared::signal::InstallSuspendSignalHandlers();
+
+#if SB_IS(EVERGREEN_COMPATIBLE)
+  third_party::crashpad::wrapper::InstallCrashpadHandler();
+#endif
+
+#if SB_HAS_QUIRK(BACKTRACE_DLOPEN_BUG)
+  // Call backtrace() once to work around potential
+  // crash bugs in glibc, in dlopen()
+  SbLogRawDumpStack(3);
+#endif
+
+  starboard::contrib::stadia::x11::ApplicationStadiaX11 application;
+  int result = 0;
+  {
+    starboard::shared::starboard::LinkReceiver receiver(&application);
+    result = application.Run(argc, argv);
+  }
+  starboard::shared::signal::UninstallSuspendSignalHandlers();
+  starboard::shared::signal::UninstallCrashSignalHandlers();
+  return result;
+}
diff --git a/src/starboard/contrib/linux/stadia/starboard_platform.gyp b/src/starboard/contrib/linux/stadia/starboard_platform.gyp
new file mode 100644
index 0000000..ed04709
--- /dev/null
+++ b/src/starboard/contrib/linux/stadia/starboard_platform.gyp
@@ -0,0 +1,44 @@
+# Copyright 2021 The Cobalt Authors. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Note, that despite the file extension ".gyp", this file is included by several
+# platform variants of linux-x64x11, like a ".gypi" file, since those platforms
+# have no need to modify this code.
+{
+  'includes': ['<(DEPTH)/starboard/linux/x64x11/shared/starboard_platform_target.gypi'],
+
+  'variables': {
+    'starboard_platform_sources': [
+      '<(DEPTH)/starboard/linux/stadia/main.cc',
+      '<(DEPTH)/starboard/linux/x64x11/sanitizer_options.cc',
+      '<(DEPTH)/starboard/linux/x64x11/system_get_property.cc',
+      '<(DEPTH)/starboard/linux/x64x11/system_get_property_impl.cc',
+      '<(DEPTH)/starboard/shared/libjpeg/image_decode.cc',
+      '<(DEPTH)/starboard/shared/libjpeg/image_is_decode_supported.cc',
+      '<(DEPTH)/starboard/shared/libjpeg/jpeg_image_decoder.cc',
+      '<(DEPTH)/starboard/shared/libjpeg/jpeg_image_decoder.h',
+      '<(DEPTH)/starboard/shared/starboard/link_receiver.cc',
+      '<(DEPTH)/starboard/contrib/stadia/x11/application_stadia_x11.cc',
+      '<(DEPTH)/starboard/shared/x11/egl_swap_buffers.cc',
+      '<(DEPTH)/starboard/contrib/stadia/get_platform_service_api.cc',
+      '<(DEPTH)/starboard/contrib/stadia/get_platform_service_api.h',
+      '<(DEPTH)/starboard/shared/x11/player_set_bounds.cc',
+      '<(DEPTH)/starboard/shared/x11/window_create.cc',
+      '<(DEPTH)/starboard/shared/x11/window_destroy.cc',
+      '<(DEPTH)/starboard/shared/x11/window_get_platform_handle.cc',
+      '<(DEPTH)/starboard/shared/x11/window_get_size.cc',
+      '<(DEPTH)/starboard/shared/x11/window_internal.cc',
+    ],
+  },
+}
diff --git a/src/starboard/contrib/linux/stadia/system_get_extensions.cc b/src/starboard/contrib/linux/stadia/system_get_extensions.cc
new file mode 100644
index 0000000..f5db101
--- /dev/null
+++ b/src/starboard/contrib/linux/stadia/system_get_extensions.cc
@@ -0,0 +1,47 @@
+// Copyright 2021 The Cobalt Authors. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+#include "cobalt/extension/configuration.h"
+#include "cobalt/extension/crash_handler.h"
+#include "starboard/common/string.h"
+#include "starboard/contrib/stadia/get_platform_service_api.h"
+#include "starboard/shared/starboard/crash_handler.h"
+#include "starboard/system.h"
+#if SB_IS(EVERGREEN_COMPATIBLE)
+#include "starboard/elf_loader/evergreen_config.h"
+#endif
+#include "starboard/linux/shared/configuration.h"
+
+const void* SbSystemGetExtension(const char* name) {
+#if SB_IS(EVERGREEN_COMPATIBLE)
+  const starboard::elf_loader::EvergreenConfig* evergreen_config =
+      starboard::elf_loader::EvergreenConfig::GetInstance();
+  if (evergreen_config != NULL &&
+      evergreen_config->custom_get_extension_ != NULL) {
+    const void* ext = evergreen_config->custom_get_extension_(name);
+    if (ext != NULL) {
+      return ext;
+    }
+  }
+#endif
+  if (strcmp(name, kCobaltExtensionConfigurationName) == 0) {
+    return starboard::shared::GetConfigurationApi();
+  }
+  if (strcmp(name, kCobaltExtensionCrashHandlerName) == 0) {
+    return starboard::common::GetCrashHandlerApi();
+  }
+  if (strcmp(name, kCobaltExtensionPlatformServiceName) == 0) {
+    return starboard::contrib::stadia::GetPlatformServiceApi();
+  }
+  return NULL;
+}
diff --git a/src/starboard/contrib/linux/stadia/thread_types_public.h b/src/starboard/contrib/linux/stadia/thread_types_public.h
new file mode 100644
index 0000000..96dc485
--- /dev/null
+++ b/src/starboard/contrib/linux/stadia/thread_types_public.h
@@ -0,0 +1,20 @@
+// Copyright 2021 The Cobalt Authors. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#ifndef STARBOARD_LINUX_STADIA_THREAD_TYPES_PUBLIC_H_
+#define STARBOARD_LINUX_STADIA_THREAD_TYPES_PUBLIC_H_
+
+#include "starboard/linux/shared/thread_types_public.h"
+
+#endif  // STARBOARD_LINUX_STADIA_THREAD_TYPES_PUBLIC_H_
diff --git a/src/starboard/contrib/stadia/README.md b/src/starboard/contrib/stadia/README.md
new file mode 100644
index 0000000..1063f30
--- /dev/null
+++ b/src/starboard/contrib/stadia/README.md
@@ -0,0 +1,13 @@
+### Reference implementation for Stadia
+
+ This directory contains patches for Starboard required in order to use the Stadia web app from Cobalt.
+
+## ./
+
+  Files in the top-level directory offer the ability to pass binary messages back and forth between the Stadia web app and native Stadia services.
+
+## ./clients
+  Files in the clients/ subdirectory mimics the public interface of an underlying services library.
+
+## ./x11
+  This directory contains a fork of the starboard/shared/x11 code that integrates the Stadia-required changes in order to enable communication with an underlying shared library.
diff --git a/src/starboard/contrib/stadia/clients/vendor/public/stadia_export.h b/src/starboard/contrib/stadia/clients/vendor/public/stadia_export.h
new file mode 100644
index 0000000..bac4582
--- /dev/null
+++ b/src/starboard/contrib/stadia/clients/vendor/public/stadia_export.h
@@ -0,0 +1,30 @@
+// Copyright 2021 The Cobalt Authors. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+#ifndef STARBOARD_CONTRIB_STADIA_CLIENTS_VENDOR_PUBLIC_STADIA_EXPORT_H_
+#define STARBOARD_CONTRIB_STADIA_CLIENTS_VENDOR_PUBLIC_STADIA_EXPORT_H_
+
+// Generates a forward declaration, a string with the function name, and a
+// typedef for the given return_type, function_name, and parameters. This macro
+// ensures consistency between the symbol that can be loaded dynamincally for
+// this function and the underlying implementation. e.g.
+// STADIA_EXPORT_FUNCTION(bool, GreaterThan, (int a, int b)) will produce the
+// following statements:
+//     * bool GreaterThan(int a, int b);
+//     * const char* kGreaterThan = "_GreaterThan";
+//     * typedef bool (*GreaterThanFunction)(int a, int b);
+#define STADIA_EXPORT_FUNCTION(return_type, name, parameters) \
+  return_type name parameters;                                \
+  const char* k##name = "_" #name;                            \
+  typedef return_type(*name##Function) parameters
+#endif  // STARBOARD_CONTRIB_STADIA_CLIENTS_VENDOR_PUBLIC_STADIA_EXPORT_H_
diff --git a/src/starboard/contrib/stadia/clients/vendor/public/stadia_lifecycle.h b/src/starboard/contrib/stadia/clients/vendor/public/stadia_lifecycle.h
new file mode 100644
index 0000000..efdd0b7
--- /dev/null
+++ b/src/starboard/contrib/stadia/clients/vendor/public/stadia_lifecycle.h
@@ -0,0 +1,26 @@
+// Copyright 2021 The Cobalt Authors. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#ifndef STARBOARD_CONTRIB_STADIA_CLIENTS_VENDOR_PUBLIC_STADIA_LIFECYCLE_H_
+#define STARBOARD_CONTRIB_STADIA_CLIENTS_VENDOR_PUBLIC_STADIA_LIFECYCLE_H_
+
+#include "starboard/contrib/stadia/clients/vendor/public/stadia_export.h"
+
+extern "C" {
+
+// An initialization call for Stadia Plugins that should be called when the
+// application window is created.
+STADIA_EXPORT_FUNCTION(void, StadiaInitialize, ());
+}
+#endif  // STARBOARD_CONTRIB_STADIA_CLIENTS_VENDOR_PUBLIC_STADIA_LIFECYCLE_H_
diff --git a/src/starboard/contrib/stadia/clients/vendor/public/stadia_plugin.h b/src/starboard/contrib/stadia/clients/vendor/public/stadia_plugin.h
new file mode 100644
index 0000000..4b5e699
--- /dev/null
+++ b/src/starboard/contrib/stadia/clients/vendor/public/stadia_plugin.h
@@ -0,0 +1,50 @@
+// Copyright 2021 The Cobalt Authors. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#ifndef STARBOARD_CONTRIB_STADIA_CLIENTS_VENDOR_PUBLIC_STADIA_PLUGIN_H_
+#define STARBOARD_CONTRIB_STADIA_CLIENTS_VENDOR_PUBLIC_STADIA_PLUGIN_H_
+
+#include <stddef.h>
+#include <stdint.h>
+
+#include "starboard/contrib/stadia/clients/vendor/public/stadia_export.h"
+
+// An interface header that allows to interact with Stadia plugins.
+
+extern "C" {
+typedef struct StadiaPlugin StadiaPlugin;
+
+// Callback that the StadiaPlugin will invoke with data that it needs to pass
+// back to the client.
+typedef void (*StadiaPluginReceiveFromCallback)(const uint8_t* message,
+                                                size_t length,
+                                                void* user_data);
+
+STADIA_EXPORT_FUNCTION(bool, StadiaPluginHas, (const char* channel));
+
+STADIA_EXPORT_FUNCTION(StadiaPlugin*,
+                       StadiaPluginOpen,
+                       (const char* channel,
+                        StadiaPluginReceiveFromCallback callback,
+                        void* user_data));
+
+STADIA_EXPORT_FUNCTION(void,
+                       StadiaPluginSendTo,
+                       (StadiaPlugin* plugin,
+                        const char* message,
+                        size_t length));
+
+STADIA_EXPORT_FUNCTION(void, StadiaPluginClose, (StadiaPlugin* plugin));
+}
+#endif  // STARBOARD_CONTRIB_STADIA_CLIENTS_VENDOR_PUBLIC_STADIA_PLUGIN_H_
diff --git a/src/starboard/contrib/stadia/get_platform_service_api.cc b/src/starboard/contrib/stadia/get_platform_service_api.cc
new file mode 100644
index 0000000..d4dc0ac
--- /dev/null
+++ b/src/starboard/contrib/stadia/get_platform_service_api.cc
@@ -0,0 +1,144 @@
+// Copyright 2021 The Cobalt Authors. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#include "starboard/contrib/stadia/get_platform_service_api.h"
+
+#include <algorithm>
+#include <memory>
+#include <vector>
+
+#include "cobalt/extension/platform_service.h"
+#include "starboard/common/log.h"
+#include "starboard/common/mutex.h"
+#include "starboard/common/string.h"
+#include "starboard/contrib/stadia/clients/vendor/public/stadia_plugin.h"
+#include "starboard/event.h"
+#include "starboard/memory.h"
+#include "starboard/window.h"
+
+namespace starboard {
+namespace contrib {
+namespace stadia {
+
+namespace {
+
+namespace {
+// Encapsulates a channel name and data to be sent on that channel.
+struct StadiaPluginSendToData {
+  StadiaPlugin* plugin;
+  std::vector<uint8_t> data;
+  StadiaPluginSendToData(StadiaPlugin* plugin, const std::vector<uint8_t>& data)
+      : plugin(plugin), data(data) {}
+};
+}  // namespace
+
+bool HasPlatformService(const char* name) {
+  return StadiaPluginHas(name);
+}
+
+CobaltExtensionPlatformService OpenPlatformService(
+    void* context,
+    const char* name_c_str,
+    ReceiveMessageCallback receive_callback) {
+  // name_c_str is allocated by Cobalt, but must be freed here.
+  std::unique_ptr<const char[]> service_name(name_c_str);
+
+  SB_DCHECK(context);
+  SB_LOG(INFO) << "Open " << service_name.get();
+
+  if (!StadiaPluginHas(&service_name[0])) {
+    SB_LOG(ERROR) << "Cannot open service. Service not found. "
+                  << service_name.get();
+    return kCobaltExtensionPlatformServiceInvalid;
+  }
+
+  auto std_callback = std::make_unique<
+      std::function<void(const std::vector<uint8_t>& message)>>(
+      [receive_callback, context](const std::vector<uint8_t>& message) -> void {
+
+        receive_callback(context, message.data(), message.size());
+
+      });
+
+  StadiaPlugin* plugin = StadiaPluginOpen(
+      name_c_str,
+
+      [](const uint8_t* const message, size_t length, void* user_data) -> void {
+
+        auto callback = static_cast<
+            const std::function<void(const std::vector<uint8_t>& message)>*>(
+            user_data);
+        std::vector<uint8_t> data(message, message + length);
+        (*callback)(data);
+      },
+      std_callback.release());
+
+  return reinterpret_cast<CobaltExtensionPlatformService>(plugin);
+}
+
+void ClosePlatformService(CobaltExtensionPlatformService service) {
+  SB_DCHECK(service);
+  auto plugin = reinterpret_cast<StadiaPlugin*>(service);
+  StadiaPluginClose(plugin);
+}
+
+void* SendToPlatformService(CobaltExtensionPlatformService service,
+                            void* data,
+                            uint64_t length,
+                            uint64_t* output_length,
+                            bool* invalid_state) {
+  SB_DCHECK(service);
+  SB_DCHECK(data);
+  SB_DCHECK(output_length);
+  SB_DCHECK(invalid_state);
+
+  auto plugin = reinterpret_cast<StadiaPlugin*>(service);
+  std::vector<uint8_t> buffer(static_cast<uint8_t*>(data),
+                              static_cast<uint8_t*>(data) + length);
+
+  auto send_to_plugin_data =
+      std::make_unique<StadiaPluginSendToData>(plugin, buffer);
+
+  // Use the main thread.
+  SbEventSchedule(
+      [](void* context) -> void {
+        auto internal_data = std::unique_ptr<StadiaPluginSendToData>(
+            static_cast<StadiaPluginSendToData*>(context));
+
+        std::vector<uint8_t> plugin_data(internal_data->data);
+        StadiaPluginSendTo(internal_data->plugin,
+                           reinterpret_cast<const char*>(plugin_data.data()),
+                           plugin_data.size());
+      },
+      send_to_plugin_data.release(), 0);
+
+  std::vector<uint8_t> response = std::vector<uint8_t>();
+  return response.data();
+}
+
+const CobaltExtensionPlatformServiceApi kPlatformServiceApi = {
+    kCobaltExtensionPlatformServiceName,
+    // API version that's implemented.
+    1, &HasPlatformService, &OpenPlatformService, &ClosePlatformService,
+    &SendToPlatformService,
+};
+}  // namespace
+
+const void* GetPlatformServiceApi() {
+  return &kPlatformServiceApi;
+}
+
+}  // namespace stadia
+}  // namespace contrib
+}  // namespace starboard
diff --git a/src/starboard/contrib/stadia/get_platform_service_api.h b/src/starboard/contrib/stadia/get_platform_service_api.h
new file mode 100644
index 0000000..5382ad1
--- /dev/null
+++ b/src/starboard/contrib/stadia/get_platform_service_api.h
@@ -0,0 +1,27 @@
+// Copyright 2021 The Cobalt Authors. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#ifndef STARBOARD_CONTRIB_STADIA_GET_PLATFORM_SERVICE_API_H_
+#define STARBOARD_CONTRIB_STADIA_GET_PLATFORM_SERVICE_API_H_
+
+namespace starboard {
+namespace contrib {
+namespace stadia {
+
+const void* GetPlatformServiceApi();
+
+}  // namespace stadia
+}  // namespace contrib
+}  // namespace starboard
+#endif  // STARBOARD_CONTRIB_STADIA_GET_PLATFORM_SERVICE_API_H_
diff --git a/src/starboard/contrib/stadia/x11/application_stadia_x11.cc b/src/starboard/contrib/stadia/x11/application_stadia_x11.cc
new file mode 100644
index 0000000..fb2fc76
--- /dev/null
+++ b/src/starboard/contrib/stadia/x11/application_stadia_x11.cc
@@ -0,0 +1,40 @@
+// Copyright 2021 The Cobalt Authors. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#include "starboard/contrib/stadia/x11/application_stadia_x11.h"
+
+#include "starboard/contrib/stadia/services/vendor/linux/public/stadia_lifecycle.h"
+#include "starboard/shared/x11/application_x11.cc"
+#include "starboard/shared/x11/window_internal.h"
+
+namespace starboard {
+namespace contrib {
+namespace stadia {
+namespace x11 {
+
+using ::starboard::shared::dev_input::DevInput;
+
+constexpr char kAppId[] = "com.google.stadia.linux";
+
+SbWindow ApplicationStadiaX11::CreateWindow(const SbWindowOptions* options) {
+  SbWindow window =
+      starboard::shared::x11::ApplicationX11::CreateWindow(options);
+  StadiaInitialize();
+  return window;
+}
+
+}  // namespace x11
+}  // namespace stadia
+}  // namespace contrib
+}  // namespace starboard
diff --git a/src/starboard/contrib/stadia/x11/application_stadia_x11.h b/src/starboard/contrib/stadia/x11/application_stadia_x11.h
new file mode 100644
index 0000000..3d40274
--- /dev/null
+++ b/src/starboard/contrib/stadia/x11/application_stadia_x11.h
@@ -0,0 +1,40 @@
+// Copyright 2021 The Cobalt Authors. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#ifndef STARBOARD_CONTRIB_STADIA_X11_APPLICATION_STADIA_X11_H_
+#define STARBOARD_CONTRIB_STADIA_X11_APPLICATION_STADIA_X11_H_
+
+#include "starboard/shared/x11/application_x11.h"
+#include "starboard/window.h"
+
+namespace starboard {
+namespace contrib {
+namespace stadia {
+namespace x11 {
+
+// This application engine combines the generic queue with the X11 event queue.
+class ApplicationStadiaX11 : public starboard::shared::x11::ApplicationX11 {
+ public:
+  ApplicationStadiaX11();
+  ~ApplicationStadiaX11();
+
+  SbWindow CreateWindow(const SbWindowOptions* options) override;
+};
+
+}  // namespace x11
+}  // namespace stadia
+}  // namespace contrib
+}  // namespace starboard
+
+#endif  // STARBOARD_CONRTIB_STADIA_X11_APPLICATION_STADIA_X11_H_
diff --git a/src/starboard/elf_loader/BUILD.gn b/src/starboard/elf_loader/BUILD.gn
index 9ce393b..eff2b9e 100644
--- a/src/starboard/elf_loader/BUILD.gn
+++ b/src/starboard/elf_loader/BUILD.gn
@@ -97,31 +97,33 @@
   ]
 }
 
-target(final_executable_type, "elf_loader_sys_sandbox") {
-  # To properly function the system loader requires the starboard
-  # symbols to be exported from the binary.
-  # To allow symbols to be exported remove the '-fvisibility=hidden' flag
-  # from your compiler_flags.gypi. For Linux this would be:
-  #   starboard/linux/shared/compiler_flags.gypi
-  # Example run:
-  # export LD_LIBRARY_PATH=.
-  # ./elf_loader_sys_sandbox --evergreen_library=app/cobalt/lib/libcobalt.so --evergreen_content=app/cobalt/content
-  sources = [ "sandbox.cc" ]
-  configs += [ ":elf_loader_config" ]
+if (can_build_evergreen_loader_apps) {
+  target(final_executable_type, "elf_loader_sys_sandbox") {
+    # To properly function the system loader requires the starboard
+    # symbols to be exported from the binary.
+    # To allow symbols to be exported remove the '-fvisibility=hidden' flag
+    # from your compiler_flags.gypi. For Linux this would be:
+    #   starboard/linux/shared/compiler_flags.gypi
+    # Example run:
+    # export LD_LIBRARY_PATH=.
+    # ./elf_loader_sys_sandbox --evergreen_library=app/cobalt/lib/libcobalt.so --evergreen_content=app/cobalt/content
+    sources = [ "sandbox.cc" ]
+    configs += [ ":elf_loader_config" ]
 
-  starboard_syms_path =
-      rebase_path("//starboard/starboard.syms", root_build_dir)
-  ldflags = [
-    "-Wl,--dynamic-list=$starboard_syms_path",
-    "-ldl",
-  ]
+    starboard_syms_path =
+        rebase_path("//starboard/starboard.syms", root_build_dir)
+    ldflags = [
+      "-Wl,--dynamic-list=$starboard_syms_path",
+      "-ldl",
+    ]
 
-  deps = [
-    ":elf_loader_sys",
-    ":evergreen_info",
-    ":sabi_string",
-    "//starboard",
-  ]
+    deps = [
+      ":elf_loader_sys",
+      ":evergreen_info",
+      ":sabi_string",
+      "//starboard",
+    ]
+  }
 }
 
 target(gtest_target_type, "elf_loader_test") {
diff --git a/src/starboard/linux/shared/BUILD.gn b/src/starboard/linux/shared/BUILD.gn
index 9ef03b9..b9d5b3a 100644
--- a/src/starboard/linux/shared/BUILD.gn
+++ b/src/starboard/linux/shared/BUILD.gn
@@ -366,7 +366,6 @@
     "//starboard/shared/stub/system_get_total_gpu_memory.cc",
     "//starboard/shared/stub/system_get_used_gpu_memory.cc",
     "//starboard/shared/stub/system_hide_splash_screen.cc",
-    "//starboard/shared/stub/system_network_is_disconnected.cc",
     "//starboard/shared/stub/system_raise_platform_error.cc",
     "//starboard/shared/stub/system_sign_with_certification_secret_key.cc",
     "//starboard/shared/stub/thread_create_priority.cc",
diff --git a/src/starboard/linux/shared/platform_configuration/configuration.gni b/src/starboard/linux/shared/platform_configuration/configuration.gni
index eda9b87..8b40276 100644
--- a/src/starboard/linux/shared/platform_configuration/configuration.gni
+++ b/src/starboard/linux/shared/platform_configuration/configuration.gni
@@ -33,3 +33,5 @@
     "//starboard/linux/shared/platform_configuration:no_pedantic_warnings"
 
 sb_widevine_platform = "linux"
+
+has_drm_support = is_internal_build
diff --git a/src/starboard/loader_app/BUILD.gn b/src/starboard/loader_app/BUILD.gn
index 481ccc8..cc35c66 100644
--- a/src/starboard/loader_app/BUILD.gn
+++ b/src/starboard/loader_app/BUILD.gn
@@ -42,22 +42,24 @@
   }
 }
 
-target(final_executable_type, "loader_app_sys") {
-  if (target_cpu == "x86" || target_cpu == "x64" || target_cpu == "arm" ||
-      target_cpu == "arm64") {
-    sources = _common_loader_app_sources
+if (can_build_evergreen_loader_apps) {
+  target(final_executable_type, "loader_app_sys") {
+    if (target_cpu == "x86" || target_cpu == "x64" || target_cpu == "arm" ||
+        target_cpu == "arm64") {
+      sources = _common_loader_app_sources
 
-    starboard_syms_path =
-        rebase_path("//starboard/starboard.syms", root_build_dir)
-    ldflags = [
-      "-Wl,--dynamic-list=$starboard_syms_path",
-      "-ldl",
-    ]
-    deps = [
-      ":common_loader_app_dependencies",
-      "//cobalt/content/fonts:copy_font_data",
-      "//starboard/elf_loader:elf_loader_sys",
-    ]
+      starboard_syms_path =
+          rebase_path("//starboard/starboard.syms", root_build_dir)
+      ldflags = [
+        "-Wl,--dynamic-list=$starboard_syms_path",
+        "-ldl",
+      ]
+      deps = [
+        ":common_loader_app_dependencies",
+        "//cobalt/content/fonts:copy_font_data",
+        "//starboard/elf_loader:elf_loader_sys",
+      ]
+    }
   }
 }
 
diff --git a/src/starboard/nplb/BUILD.gn b/src/starboard/nplb/BUILD.gn
index a53df6a..20e502d 100644
--- a/src/starboard/nplb/BUILD.gn
+++ b/src/starboard/nplb/BUILD.gn
@@ -107,6 +107,7 @@
     "drm_helpers.cc",
     "drm_helpers.h",
     "drm_is_server_certificate_updatable_test.cc",
+    "drm_session_test.cc",
     "drm_update_server_certificate_test.cc",
     "egl_test.cc",
     "extern_c_test.cc",
@@ -294,7 +295,7 @@
     "window_get_size_test.cc",
   ]
 
-  if (is_internal_build) {
+  if (has_drm_support) {
     sources += [
       "drm_create_system_test.cc",
       "media_can_play_mime_and_key_system_test.cc",
@@ -303,6 +304,10 @@
 
   deps = [ "//starboard/nplb/testdata/file_tests:nplb_file_tests_data" ]
 
+  if (is_internal_build) {
+    deps += [ "//starboard/private/nplb:nplb_private" ]
+  }
+
   public_deps = [
     "//starboard",
     "//starboard/common",
diff --git a/src/starboard/raspi/shared/platform_configuration/BUILD.gn b/src/starboard/raspi/shared/platform_configuration/BUILD.gn
index 98d7b28..fe181d1 100644
--- a/src/starboard/raspi/shared/platform_configuration/BUILD.gn
+++ b/src/starboard/raspi/shared/platform_configuration/BUILD.gn
@@ -182,8 +182,7 @@
     # This decision should be revisited after raspi toolchain is upgraded.
     "-Wno-maybe-uninitialized",
 
-    #TODO: Renable -Werror after fixing all warnings.
-    #"-Werror",
+    "-Werror",
     "-Wno-expansion-to-defined",
     "-Wno-implicit-fallthrough",
   ]
diff --git a/src/starboard/raspi/shared/platform_configuration/configuration.gni b/src/starboard/raspi/shared/platform_configuration/configuration.gni
index fd4a3ce..4ceaa77 100644
--- a/src/starboard/raspi/shared/platform_configuration/configuration.gni
+++ b/src/starboard/raspi/shared/platform_configuration/configuration.gni
@@ -15,12 +15,12 @@
 import("//starboard/build/config/base_configuration.gni")
 
 arm_float_abi = "hard"
+has_drm_support = false
 sb_pedantic_warnings = true
 sb_static_contents_output_data_dir = "$root_out_dir/content"
 
-pedantic_warnings_config_path =
-    "//starboard/raspi/shared/platform_configuration:pedantic_warnings"
 no_pedantic_warnings_config_path =
     "//starboard/raspi/shared/platform_configuration:no_pedantic_warnings"
-
+pedantic_warnings_config_path =
+    "//starboard/raspi/shared/platform_configuration:pedantic_warnings"
 sabi_path = "//starboard/sabi/arm/hardfp/sabi-v$sb_api_version.json"
diff --git a/src/third_party/crashpad/handler/BUILD.gn b/src/third_party/crashpad/handler/BUILD.gn
index 8823beb..91a0f06 100644
--- a/src/third_party/crashpad/handler/BUILD.gn
+++ b/src/third_party/crashpad/handler/BUILD.gn
@@ -152,6 +152,20 @@
 }
 
 if (!crashpad_is_ios) {
+  if (crashpad_is_in_starboard) {
+    config("crashpad_handler_starboard_config") {
+      cflags = [
+        "-ffunction-sections",
+        "-fdata-sections",
+      ]
+      ldflags = [
+        "-Wl,--as-needed",
+        "-Wl,-gc-sections",
+        "-Wl,-z,noexecstack",
+      ]
+    }
+  }
+
   crashpad_executable("crashpad_handler") {
     if (crashpad_is_in_starboard) {
       check_includes = false
@@ -166,17 +180,22 @@
       "../third_party/mini_chromium:base",
     ]
 
+    configs = []
     if (crashpad_is_win) {
       if (crashpad_is_in_chromium || crashpad_is_in_dart) {
         remove_configs = [ "//build/config/win:console" ]
-        configs = [ "//build/config/win:windowed" ]
+        configs += [ "//build/config/win:windowed" ]
       } else {
         remove_configs =
             [ "//third_party/mini_chromium/mini_chromium/build:win_console" ]
-        configs =
+        configs +=
             [ "//third_party/mini_chromium/mini_chromium/build:win_windowed" ]
       }
     }
+
+    if (crashpad_is_in_starboard) {
+      configs += [ ":crashpad_handler_starboard_config" ]
+    }
   }
 }
 
diff --git a/src/tools/format_ninja.py b/src/tools/format_ninja.py
index f18e622..3793f80 100644
--- a/src/tools/format_ninja.py
+++ b/src/tools/format_ninja.py
@@ -18,12 +18,14 @@
 Primarily used for looking at the differences between GYP and GN builds during
 the GN migration.
 
-To test, first generate a the ninja build files, then use
+To test, first generate the ".ninja" build files, then use
 
 ninja -t compdb > out.json
 
-in the build directory to generate a JSON file containing all actions ninja
-would run. The run this script on that file and diff it with another.
+in the build directory to generate a JSON file (out.json) containing all actions
+ninja would run. Then, run this script on the out.json file to generate the
+normalized_out.json file. Diff this normalized_out.json file with another
+generated from GYP/GN to see differences in actions, build flags, etc.
 """
 
 import argparse
