diff --git a/CHANGELOG.md b/CHANGELOG.md
index a4ac7801..4ec273ee 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,7 @@
+# 86.0.4240.73
+* re-introduce ARM64 AImageReader mitigations (fixes https://github.com/bromite/bromite/issues/766)
+* re-introduce menu items for autocomplete, autofill assistant and contextual search (fixes https://github.com/bromite/bromite/issues/763)
+
# 86.0.4240.70
* fixed crash on unused menu item tap (fixes https://github.com/bromite/bromite/issues/760)
* fixed issue on new installations without DoH configuration (fixes https://github.com/bromite/bromite/issues/761)
diff --git a/build/RELEASE b/build/RELEASE
index 9037b8ad..4ccae782 100644
--- a/build/RELEASE
+++ b/build/RELEASE
@@ -1 +1 @@
-86.0.4240.70
+86.0.4240.73
diff --git a/build/bromite_patches_list.txt b/build/bromite_patches_list.txt
index dfa0bcb0..e2b4d28c 100644
--- a/build/bromite_patches_list.txt
+++ b/build/bromite_patches_list.txt
@@ -127,6 +127,10 @@ Disable-DRM-media-origin-IDs-preprovisioning.patch
Disable-smart-selection-by-default.patch
Enable-user-agent-freeze-by-default.patch
disable-browser-autologin-by-default.patch
+Revert-gpu-android-Remove-setup-for-disabling-AImageReader.patch
+Revert-Remove-flags-to-enable-disable-AImageReader.patch
+Disable-AImageReader-for-ARM64-P-and-ARM64-Q.patch
+Restore-GPU-bug-blacklist-for-AImageReader-on-ARM-CPUs.patch
Update-i18n-zh_CN-support.patch
Add-a-flag-to-allow-screenshots-in-Incognito-mode.patch
Add-menu-item-to-view-source.patch
@@ -144,4 +148,5 @@ Block-all-connection-requests-with-qjz9zk-in-the-domain-name-or-with-a-trk-schem
Hardening-against-incognito-mode-detection.patch
Remove-weblayer-dependency-on-Play-Services.patch
Timezone-customization.patch
+Move-some-account-settings-back-to-privacy-settings.patch
Automated-domain-substitution.patch
diff --git a/build/patches/Add-option-to-configure-the-ad-blocker-filters-URL.patch b/build/patches/Add-option-to-configure-the-ad-blocker-filters-URL.patch
index c274002d..e112d805 100644
--- a/build/patches/Add-option-to-configure-the-ad-blocker-filters-URL.patch
+++ b/build/patches/Add-option-to-configure-the-ad-blocker-filters-URL.patch
@@ -175,7 +175,7 @@ new file mode 100644
diff --git a/chrome/android/java/res/xml/main_preferences.xml b/chrome/android/java/res/xml/main_preferences.xml
--- a/chrome/android/java/res/xml/main_preferences.xml
+++ b/chrome/android/java/res/xml/main_preferences.xml
-@@ -88,6 +88,11 @@
+@@ -89,6 +89,11 @@
android:key="privacy"
android:order="18"
android:title="@string/prefs_privacy"/>
diff --git a/build/patches/Disable-AImageReader-for-ARM64-P-and-ARM64-Q.patch b/build/patches/Disable-AImageReader-for-ARM64-P-and-ARM64-Q.patch
new file mode 100644
index 00000000..15f5289c
--- /dev/null
+++ b/build/patches/Disable-AImageReader-for-ARM64-P-and-ARM64-Q.patch
@@ -0,0 +1,42 @@
+From: csagan5 <32685696+csagan5@users.noreply.github.com>
+Date: Thu, 20 Feb 2020 22:44:06 +0100
+Subject: Disable AImageReader for ARM64/P and ARM64/Q
+
+---
+ gpu/config/gpu_finch_features.cc | 4 ++++
+ media/base/media_switches.cc | 4 ++++
+ 2 files changed, 8 insertions(+)
+
+diff --git a/gpu/config/gpu_finch_features.cc b/gpu/config/gpu_finch_features.cc
+--- a/gpu/config/gpu_finch_features.cc
++++ b/gpu/config/gpu_finch_features.cc
+@@ -15,7 +15,11 @@ namespace features {
+
+ // Use android AImageReader when playing videos with MediaPlayer.
+ const base::Feature kAImageReaderMediaPlayer{"AImageReaderMediaPlayer",
++#ifdef ARCH_CPU_ARM64
++ base::FEATURE_DISABLED_BY_DEFAULT};
++#else
+ base::FEATURE_ENABLED_BY_DEFAULT};
++#endif
+
+ #if defined(OS_ANDROID)
+ // Used to limit GL version to 2.0 for skia raster on Android.
+diff --git a/media/base/media_switches.cc b/media/base/media_switches.cc
+--- a/media/base/media_switches.cc
++++ b/media/base/media_switches.cc
+@@ -549,7 +549,11 @@ const base::Feature kMediaDrmPreprovisioningAtStartup{
+
+ // Enables the Android Image Reader path for Video decoding(for AVDA and MCVD)
+ const base::Feature kAImageReaderVideoOutput{"AImageReaderVideoOutput",
++#ifdef ARCH_CPU_ARM64
++ base::FEATURE_DISABLED_BY_DEFAULT};
++#else
+ base::FEATURE_ENABLED_BY_DEFAULT};
++#endif
+
+ // Prevents using SurfaceLayer for videos. This is meant to be used by embedders
+ // that cannot support SurfaceLayer at the moment.
+--
+2.17.1
+
diff --git a/build/patches/Disable-sync-services-menu-entry.patch b/build/patches/Disable-sync-services-menu-entry.patch
index 75eaeb51..1e92ee53 100644
--- a/build/patches/Disable-sync-services-menu-entry.patch
+++ b/build/patches/Disable-sync-services-menu-entry.patch
@@ -3,14 +3,24 @@ Date: Mon, 11 Nov 2019 23:09:48 +0100
Subject: Disable sync services menu entry
---
- chrome/android/java/res/xml/main_preferences.xml | 8 --------
- chrome/android/java/res/xml/privacy_preferences.xml | 5 -----
- 2 files changed, 13 deletions(-)
+ chrome/android/java/res/xml/main_preferences.xml | 11 ++---------
+ chrome/android/java/res/xml/privacy_preferences.xml | 5 -----
+ 2 files changed, 2 insertions(+), 14 deletions(-)
diff --git a/chrome/android/java/res/xml/main_preferences.xml b/chrome/android/java/res/xml/main_preferences.xml
--- a/chrome/android/java/res/xml/main_preferences.xml
+++ b/chrome/android/java/res/xml/main_preferences.xml
-@@ -23,14 +23,6 @@
+@@ -13,7 +13,8 @@
+
++ android:title="@string/prefs_section_account"
++ app:isPreferenceVisible="false"/>
+
diff --git a/build/patches/Move-some-account-settings-back-to-privacy-settings.patch b/build/patches/Move-some-account-settings-back-to-privacy-settings.patch
new file mode 100644
index 00000000..c32330cb
--- /dev/null
+++ b/build/patches/Move-some-account-settings-back-to-privacy-settings.patch
@@ -0,0 +1,144 @@
+From: csagan5 <32685696+csagan5@users.noreply.github.com>
+Date: Sun, 4 Oct 2020 12:58:17 +0200
+Subject: Move some account settings back to privacy settings
+
+Search suggestions, autofill assistant and contextual search
+---
+ .../java/res/xml/privacy_preferences.xml | 19 ++++++
+ .../privacy/settings/PrivacySettings.java | 59 ++++++++++++++++++-
+ 2 files changed, 77 insertions(+), 1 deletion(-)
+
+diff --git a/chrome/android/java/res/xml/privacy_preferences.xml b/chrome/android/java/res/xml/privacy_preferences.xml
+--- a/chrome/android/java/res/xml/privacy_preferences.xml
++++ b/chrome/android/java/res/xml/privacy_preferences.xml
+@@ -58,4 +58,23 @@
+ android:summary="@string/clear_browsing_data_summary"
+ android:fragment="org.chromium.chrome.browser.browsing_data.ClearBrowsingDataTabsFragment"
+ android:order="5"/>
++
++
++
++
++
++
+
+diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java b/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java
+--- a/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java
++++ b/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java
+@@ -37,6 +37,13 @@ import org.chromium.ui.text.SpanApplier;
+
+ import org.chromium.base.Log;
+
++import androidx.annotation.Nullable;
++import androidx.preference.PreferenceCategory;
++import org.chromium.chrome.browser.contextualsearch.ContextualSearchManager;
++import org.chromium.chrome.browser.preferences.SharedPreferencesManager;
++import org.chromium.components.browser_ui.settings.ChromeSwitchPreference;
++import org.chromium.chrome.browser.preferences.ChromePreferenceKeys;
++
+ /**
+ * Fragment to keep track of the all the privacy related preferences.
+ */
+@@ -57,6 +64,18 @@ public class PrivacySettings
+ public static final String PREF_ALLOW_CUSTOM_TAB_INTENTS = "allow_custom_tab_intents";
+ public static final String PREF_INCOGNITO_TAB_HISTORY_ENABLED = "incognito_history_enabled";
+
++ // moved from SyncAndServicesSettings.java
++ private static final String PREF_SERVICES_CATEGORY = "services_category";
++ private static final String PREF_SEARCH_SUGGESTIONS = "search_suggestions";
++ private static final String PREF_CONTEXTUAL_SEARCH = "contextual_search";
++ public static final String PREF_AUTOFILL_ASSISTANT = "autofill_assistant";
++ private ChromeSwitchPreference mSearchSuggestions;
++ private @Nullable ChromeSwitchPreference mAutofillAssistant;
++ private @Nullable Preference mContextualSearch;
++ private final SharedPreferencesManager mSharedPreferencesManager =
++ SharedPreferencesManager.getInstance();
++ private final PrefService prefService = UserPrefs.get(Profile.getLastUsedRegularProfile());
++
+ @Override
+ public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
+ PrivacyPreferencesManager privacyPrefManager = PrivacyPreferencesManager.getInstance();
+@@ -78,6 +97,29 @@ public class PrivacySettings
+
+ mManagedPreferenceDelegate = createManagedPreferenceDelegate();
+
++ mSearchSuggestions = (ChromeSwitchPreference) findPreference(PREF_SEARCH_SUGGESTIONS);
++ mSearchSuggestions.setOnPreferenceChangeListener(this);
++ mSearchSuggestions.setManagedPreferenceDelegate(mManagedPreferenceDelegate);
++
++ mAutofillAssistant = (ChromeSwitchPreference) findPreference(PREF_AUTOFILL_ASSISTANT);
++ if (shouldShowAutofillAssistantPreference()) {
++ mAutofillAssistant.setOnPreferenceChangeListener(this);
++ mAutofillAssistant.setManagedPreferenceDelegate(mManagedPreferenceDelegate);
++ mAutofillAssistant.setChecked(mSharedPreferencesManager.readBoolean(
++ ChromePreferenceKeys.AUTOFILL_ASSISTANT_ENABLED, false));
++ } else {
++ PreferenceCategory servicesCategory =
++ (PreferenceCategory) findPreference(PREF_SERVICES_CATEGORY);
++ servicesCategory.removePreference(mAutofillAssistant);
++ mAutofillAssistant = null;
++ }
++
++ mContextualSearch = findPreference(PREF_CONTEXTUAL_SEARCH);
++ boolean isContextualSearchEnabled =
++ !ContextualSearchManager.isContextualSearchDisabled();
++ mContextualSearch.setSummary(
++ isContextualSearchEnabled ? R.string.text_on : R.string.text_off);
++
+ ChromeBaseCheckBoxPreference canMakePaymentPref =
+ (ChromeBaseCheckBoxPreference) findPreference(PREF_CAN_MAKE_PAYMENT);
+ canMakePaymentPref.setOnPreferenceChangeListener(this);
+@@ -110,6 +152,11 @@ public class PrivacySettings
+ } else if (PREF_CAN_MAKE_PAYMENT.equals(key)) {
+ UserPrefs.get(Profile.getLastUsedRegularProfile())
+ .setBoolean(Pref.CAN_MAKE_PAYMENT_ENABLED, (boolean) newValue);
++ } else if (PREF_SEARCH_SUGGESTIONS.equals(key)) {
++ prefService.setBoolean(Pref.SEARCH_SUGGEST_ENABLED, (boolean) newValue);
++ } else if (PREF_AUTOFILL_ASSISTANT.equals(key)) {
++ mSharedPreferencesManager.writeBoolean(
++ ChromePreferenceKeys.AUTOFILL_ASSISTANT_ENABLED, (boolean) newValue);
+ } else if (PREF_NETWORK_PREDICTIONS.equals(key)) {
+ PrivacyPreferencesManager.getInstance().setNetworkPredictionEnabled((boolean) newValue);
+ } else if (PREF_ALLOW_CUSTOM_TAB_INTENTS.equals(key)) {
+@@ -124,6 +171,16 @@ public class PrivacySettings
+ return true;
+ }
+
++ /**
++ * This checks whether Autofill Assistant is enabled and was shown at least once (only then
++ * will the AA switch be assigned a value).
++ */
++ private boolean shouldShowAutofillAssistantPreference() {
++ return ChromeFeatureList.isEnabled(ChromeFeatureList.AUTOFILL_ASSISTANT)
++ && mSharedPreferencesManager.contains(
++ ChromePreferenceKeys.AUTOFILL_ASSISTANT_ENABLED);
++ }
++
+ @Override
+ public void onResume() {
+ super.onResume();
+@@ -134,7 +191,7 @@ public class PrivacySettings
+ * Updates the summaries for several preferences.
+ */
+ public void updateSummaries() {
+- PrefService prefService = UserPrefs.get(Profile.getLastUsedRegularProfile());
++ mSearchSuggestions.setChecked(prefService.getBoolean(Pref.SEARCH_SUGGEST_ENABLED));
+
+ CheckBoxPreference canMakePaymentPref =
+ (CheckBoxPreference) findPreference(PREF_CAN_MAKE_PAYMENT);
+--
+2.17.1
+
diff --git a/build/patches/Remove-signin-and-data-saver-integrations.patch b/build/patches/Remove-signin-and-data-saver-integrations.patch
index d30ea8f1..ce33a2f0 100644
--- a/build/patches/Remove-signin-and-data-saver-integrations.patch
+++ b/build/patches/Remove-signin-and-data-saver-integrations.patch
@@ -102,7 +102,7 @@ diff --git a/chrome/android/java/AndroidManifest.xml b/chrome/android/java/Andro
diff --git a/chrome/android/java/res/xml/main_preferences.xml b/chrome/android/java/res/xml/main_preferences.xml
--- a/chrome/android/java/res/xml/main_preferences.xml
+++ b/chrome/android/java/res/xml/main_preferences.xml
-@@ -19,10 +19,6 @@
+@@ -20,10 +20,6 @@
android:order="2"
android:title="@string/prefs_section_account_and_google_services"
app:isPreferenceVisible="false"/>
@@ -113,7 +113,7 @@ diff --git a/chrome/android/java/res/xml/main_preferences.xml b/chrome/android/j
diff --git a/build/patches/Restore-GPU-bug-blacklist-for-AImageReader-on-ARM-CPUs.patch b/build/patches/Restore-GPU-bug-blacklist-for-AImageReader-on-ARM-CPUs.patch
new file mode 100644
index 00000000..ade695d4
--- /dev/null
+++ b/build/patches/Restore-GPU-bug-blacklist-for-AImageReader-on-ARM-CPUs.patch
@@ -0,0 +1,41 @@
+From: csagan5 <32685696+csagan5@users.noreply.github.com>
+Date: Sat, 15 Feb 2020 08:20:40 +0100
+Subject: Restore GPU bug blacklist for AImageReader on ARM CPUs
+
+Restore the AImageReader blacklist for ARM/ARM64 devices which causes
+crashes on Android 9 and 10 (at different code locations).
+
+See discussion at https://github.com/bromite/bromite/issues/445
+---
+ gpu/config/gpu_driver_bug_list.json | 16 ++++++++++++++++
+ 1 file changed, 16 insertions(+)
+
+diff --git a/gpu/config/gpu_driver_bug_list.json b/gpu/config/gpu_driver_bug_list.json
+--- a/gpu/config/gpu_driver_bug_list.json
++++ b/gpu/config/gpu_driver_bug_list.json
+@@ -3286,6 +3286,22 @@
+ "dont_delete_source_texture_for_egl_image"
+ ]
+ },
++ {
++ "id":335,
++ "cr_bugs": [1051705],
++ "description": "Disable AImageReader on ARM GPUs",
++ "os": {
++ "type": "android",
++ "version": {
++ "op": "<",
++ "value": "10"
++ }
++ },
++ "gl_vendor": "ARM.*",
++ "features": [
++ "disable_aimagereader"
++ ]
++ },
+ {
+ "id": 336,
+ "cr_bugs": [625785],
+--
+2.17.1
+
diff --git a/build/patches/Revert-Remove-flags-to-enable-disable-AImageReader.patch b/build/patches/Revert-Remove-flags-to-enable-disable-AImageReader.patch
new file mode 100644
index 00000000..3c9d9de5
--- /dev/null
+++ b/build/patches/Revert-Remove-flags-to-enable-disable-AImageReader.patch
@@ -0,0 +1,151 @@
+From: csagan5 <32685696+csagan5@users.noreply.github.com>
+Date: Tue, 5 May 2020 07:26:55 +0200
+Subject: Revert "Remove flags to enable/disable AImageReader."
+
+This reverts commit 463fa0f2e3b9e418bc26e2c8954463f0b0f76634.
+---
+ .../service/image_reader_gl_owner_unittest.cc | 5 +++++
+ gpu/config/gpu_finch_features.cc | 4 ++++
+ gpu/config/gpu_finch_features.h | 1 +
+ gpu/ipc/service/stream_texture_android.cc | 11 ++++++++++-
+ media/base/media_switches.cc | 4 ++++
+ media/base/media_switches.h | 1 +
+ media/gpu/android/video_frame_factory_impl.cc | 5 ++++-
+ 7 files changed, 29 insertions(+), 2 deletions(-)
+
+diff --git a/gpu/command_buffer/service/image_reader_gl_owner_unittest.cc b/gpu/command_buffer/service/image_reader_gl_owner_unittest.cc
+--- a/gpu/command_buffer/service/image_reader_gl_owner_unittest.cc
++++ b/gpu/command_buffer/service/image_reader_gl_owner_unittest.cc
+@@ -8,10 +8,12 @@
+ #include
+ #include
+
++#include "base/test/scoped_feature_list.h"
+ #include "base/test/task_environment.h"
+ #include "gpu/command_buffer/service/abstract_texture.h"
+ #include "gpu/command_buffer/service/image_reader_gl_owner.h"
+ #include "gpu/command_buffer/service/mock_abstract_texture.h"
++#include "media/base/media_switches.h"
+ #include "media/base/android/media_codec_util.h"
+ #include "testing/gtest/include/gtest/gtest.h"
+ #include "ui/gl/gl_bindings.h"
+@@ -31,6 +33,8 @@ class ImageReaderGLOwnerTest : public testing::Test {
+ if (!IsImageReaderSupported())
+ return;
+
++ scoped_feature_list_.InitAndEnableFeature(media::kAImageReaderVideoOutput);
++
+ gl::init::InitializeStaticGLBindingsImplementation(
+ gl::kGLImplementationEGLGLES2, false);
+ gl::init::InitializeGLOneOffPlatformImplementation(false, false, true);
+@@ -70,6 +74,7 @@ class ImageReaderGLOwnerTest : public testing::Test {
+ return base::android::AndroidImageReader::GetInstance().IsSupported();
+ }
+
++ base::test::ScopedFeatureList scoped_feature_list_;
+ scoped_refptr image_reader_;
+ GLuint texture_id_ = 0;
+
+diff --git a/gpu/config/gpu_finch_features.cc b/gpu/config/gpu_finch_features.cc
+--- a/gpu/config/gpu_finch_features.cc
++++ b/gpu/config/gpu_finch_features.cc
+@@ -13,6 +13,10 @@
+
+ namespace features {
+
++// Use android AImageReader when playing videos with MediaPlayer.
++const base::Feature kAImageReaderMediaPlayer{"AImageReaderMediaPlayer",
++ base::FEATURE_ENABLED_BY_DEFAULT};
++
+ #if defined(OS_ANDROID)
+ // Used to limit GL version to 2.0 for skia raster on Android.
+ const base::Feature kUseGles2ForOopR{"UseGles2ForOopR",
+diff --git a/gpu/config/gpu_finch_features.h b/gpu/config/gpu_finch_features.h
+--- a/gpu/config/gpu_finch_features.h
++++ b/gpu/config/gpu_finch_features.h
+@@ -17,6 +17,7 @@ namespace features {
+ // All features in alphabetical order. The features should be documented
+ // alongside the definition of their values in the .cc file.
+ #if defined(OS_ANDROID)
++GPU_EXPORT extern const base::Feature kAImageReaderMediaPlayer;
+ GPU_EXPORT extern const base::Feature kUseGles2ForOopR;
+ GPU_EXPORT extern const base::Feature kAndroidSurfaceControl;
+ GPU_EXPORT extern const base::Feature kAImageReader;
+diff --git a/gpu/ipc/service/stream_texture_android.cc b/gpu/ipc/service/stream_texture_android.cc
+--- a/gpu/ipc/service/stream_texture_android.cc
++++ b/gpu/ipc/service/stream_texture_android.cc
+@@ -6,6 +6,7 @@
+
+ #include
+
++#include "base/android/android_image_reader_compat.h"
+ #include "base/android/scoped_hardware_buffer_fence_sync.h"
+ #include "base/bind.h"
+ #include "base/feature_list.h"
+@@ -47,7 +48,15 @@ std::unique_ptr MakeCurrent(
+ }
+
+ TextureOwner::Mode GetTextureOwnerMode() {
+- return features::IsAImageReaderEnabled()
++ const bool a_image_reader_supported =
++ base::android::AndroidImageReader::GetInstance().IsSupported();
++
++ // TODO(vikassoni) : Currently we have 2 different flags to enable/disable
++ // AImageReader - one for MCVD and other for MediaPlayer here. Merge those 2
++ // flags into a single flag. Keeping the 2 flags separate for now since finch
++ // experiment using this flag is in progress.
++ return a_image_reader_supported && features::IsAImageReaderEnabled() &&
++ base::FeatureList::IsEnabled(features::kAImageReaderMediaPlayer)
+ ? TextureOwner::Mode::kAImageReaderInsecure
+ : TextureOwner::Mode::kSurfaceTextureInsecure;
+ }
+diff --git a/media/base/media_switches.cc b/media/base/media_switches.cc
+--- a/media/base/media_switches.cc
++++ b/media/base/media_switches.cc
+@@ -547,6 +547,10 @@ const base::Feature kMediaDrmPreprovisioning{"MediaDrmPreprovisioning",
+ const base::Feature kMediaDrmPreprovisioningAtStartup{
+ "MediaDrmPreprovisioningAtStartup", base::FEATURE_ENABLED_BY_DEFAULT};
+
++// Enables the Android Image Reader path for Video decoding(for AVDA and MCVD)
++const base::Feature kAImageReaderVideoOutput{"AImageReaderVideoOutput",
++ base::FEATURE_ENABLED_BY_DEFAULT};
++
+ // Prevents using SurfaceLayer for videos. This is meant to be used by embedders
+ // that cannot support SurfaceLayer at the moment.
+ const base::Feature kDisableSurfaceLayerForVideo{
+diff --git a/media/base/media_switches.h b/media/base/media_switches.h
+--- a/media/base/media_switches.h
++++ b/media/base/media_switches.h
+@@ -192,6 +192,7 @@ MEDIA_EXPORT extern const base::Feature kMediaControlsExpandGesture;
+ MEDIA_EXPORT extern const base::Feature kMediaDrmPersistentLicense;
+ MEDIA_EXPORT extern const base::Feature kMediaDrmPreprovisioning;
+ MEDIA_EXPORT extern const base::Feature kMediaDrmPreprovisioningAtStartup;
++MEDIA_EXPORT extern const base::Feature kAImageReaderVideoOutput;
+ MEDIA_EXPORT extern const base::Feature kDisableSurfaceLayerForVideo;
+ MEDIA_EXPORT extern const base::Feature kCanPlayHls;
+ MEDIA_EXPORT extern const base::Feature kPictureInPictureAPI;
+diff --git a/media/gpu/android/video_frame_factory_impl.cc b/media/gpu/android/video_frame_factory_impl.cc
+--- a/media/gpu/android/video_frame_factory_impl.cc
++++ b/media/gpu/android/video_frame_factory_impl.cc
+@@ -6,6 +6,7 @@
+
+ #include
+
++#include "base/android/android_image_reader_compat.h"
+ #include "base/bind.h"
+ #include "base/bind_helpers.h"
+ #include "base/callback.h"
+@@ -65,7 +66,9 @@ gpu::TextureOwner::Mode GetTextureOwnerMode(
+ switch (overlay_mode) {
+ case VideoFrameFactory::OverlayMode::kDontRequestPromotionHints:
+ case VideoFrameFactory::OverlayMode::kRequestPromotionHints:
+- return features::IsAImageReaderEnabled()
++ return base::android::AndroidImageReader::GetInstance().IsSupported() &&
++ features::IsAImageReaderEnabled() &&
++ base::FeatureList::IsEnabled(media::kAImageReaderVideoOutput)
+ ? gpu::TextureOwner::Mode::kAImageReaderInsecure
+ : gpu::TextureOwner::Mode::kSurfaceTextureInsecure;
+ case VideoFrameFactory::OverlayMode::kSurfaceControlSecure:
+--
+2.17.1
+
diff --git a/build/patches/Revert-gpu-android-Remove-setup-for-disabling-AImageReader.patch b/build/patches/Revert-gpu-android-Remove-setup-for-disabling-AImageReader.patch
new file mode 100644
index 00000000..a503b22e
--- /dev/null
+++ b/build/patches/Revert-gpu-android-Remove-setup-for-disabling-AImageReader.patch
@@ -0,0 +1,127 @@
+From: csagan5 <32685696+csagan5@users.noreply.github.com>
+Date: Tue, 5 May 2020 07:22:20 +0200
+Subject: Revert "gpu/android: Remove setup for disabling AImageReader."
+
+This reverts commit dcd5a39518246eb999f1cc63bf1ec95d93fd5b2f.
+---
+ base/android/android_image_reader_compat.cc | 8 +++++++-
+ base/android/android_image_reader_compat.h | 4 ++++
+ gpu/config/gpu_util.cc | 8 ++++++++
+ gpu/config/gpu_workaround_list.txt | 1 +
+ gpu/ipc/service/gpu_init.cc | 11 +++++++++++
+ 5 files changed, 31 insertions(+), 1 deletion(-)
+
+diff --git a/base/android/android_image_reader_compat.cc b/base/android/android_image_reader_compat.cc
+--- a/base/android/android_image_reader_compat.cc
++++ b/base/android/android_image_reader_compat.cc
+@@ -22,6 +22,8 @@
+ namespace base {
+ namespace android {
+
++bool AndroidImageReader::disable_support_ = false;
++
+ AndroidImageReader& AndroidImageReader::GetInstance() {
+ // C++11 static local variable initialization is
+ // thread-safe.
+@@ -29,8 +31,12 @@ AndroidImageReader& AndroidImageReader::GetInstance() {
+ return *instance;
+ }
+
++void AndroidImageReader::DisableSupport() {
++ disable_support_ = true;
++}
++
+ bool AndroidImageReader::IsSupported() {
+- return is_supported_;
++ return !disable_support_ && is_supported_;
+ }
+
+ AndroidImageReader::AndroidImageReader() {
+diff --git a/base/android/android_image_reader_compat.h b/base/android/android_image_reader_compat.h
+--- a/base/android/android_image_reader_compat.h
++++ b/base/android/android_image_reader_compat.h
+@@ -22,6 +22,9 @@ class BASE_EXPORT AndroidImageReader {
+ // Thread safe GetInstance.
+ static AndroidImageReader& GetInstance();
+
++ // Disable image reader support.
++ static void DisableSupport();
++
+ // Check if the image reader usage is supported. This function returns TRUE
+ // if android version is >=OREO, image reader support is not disabled and all
+ // the required functions are loaded.
+@@ -64,6 +67,7 @@ class BASE_EXPORT AndroidImageReader {
+ AndroidImageReader();
+ bool LoadFunctions();
+
++ static bool disable_support_;
+ bool is_supported_;
+ pAImage_delete AImage_delete_;
+ pAImage_deleteAsync AImage_deleteAsync_;
+diff --git a/gpu/config/gpu_util.cc b/gpu/config/gpu_util.cc
+--- a/gpu/config/gpu_util.cc
++++ b/gpu/config/gpu_util.cc
+@@ -111,6 +111,9 @@ GpuFeatureStatus GetAndroidSurfaceControlFeatureStatus(
+ #if !defined(OS_ANDROID)
+ return kGpuFeatureStatusDisabled;
+ #else
++ if (blocklisted_features.count(GPU_FEATURE_TYPE_ANDROID_SURFACE_CONTROL))
++ return kGpuFeatureStatusBlocklisted;
++
+ if (!gpu_preferences.enable_android_surface_control)
+ return kGpuFeatureStatusDisabled;
+
+@@ -374,6 +377,11 @@ void AdjustGpuFeatureStatusToWorkarounds(GpuFeatureInfo* gpu_feature_info) {
+ gpu_feature_info->status_values[GPU_FEATURE_TYPE_ACCELERATED_WEBGL2] =
+ kGpuFeatureStatusBlocklisted;
+ }
++
++ if (gpu_feature_info->IsWorkaroundEnabled(DISABLE_AIMAGEREADER)) {
++ gpu_feature_info->status_values[GPU_FEATURE_TYPE_ANDROID_SURFACE_CONTROL] =
++ kGpuFeatureStatusBlocklisted;
++ }
+ }
+
+ // Estimates roughly user total disk space by counting in the drives where
+diff --git a/gpu/config/gpu_workaround_list.txt b/gpu/config/gpu_workaround_list.txt
+--- a/gpu/config/gpu_workaround_list.txt
++++ b/gpu/config/gpu_workaround_list.txt
+@@ -13,6 +13,7 @@ decode_encode_srgb_for_generatemipmap
+ depth_stencil_renderbuffer_resize_emulation
+ disable_2d_canvas_auto_flush
+ disable_accelerated_av1_decode
++disable_aimagereader
+ disable_accelerated_vp8_decode
+ disable_accelerated_vp8_encode
+ disable_accelerated_vp9_decode
+diff --git a/gpu/ipc/service/gpu_init.cc b/gpu/ipc/service/gpu_init.cc
+--- a/gpu/ipc/service/gpu_init.cc
++++ b/gpu/ipc/service/gpu_init.cc
+@@ -708,6 +708,12 @@ void GpuInit::InitializeInProcess(base::CommandLine* command_line,
+ AdjustInfoToSwiftShader();
+ }
+
++#if defined(OS_ANDROID)
++ // Disable AImageReader if the workaround is enabled.
++ if (gpu_feature_info_.IsWorkaroundEnabled(DISABLE_AIMAGEREADER)) {
++ base::android::AndroidImageReader::DisableSupport();
++ }
++#endif
+ #if defined(USE_OZONE)
+ if (features::IsUsingOzonePlatform()) {
+ const std::vector
+@@ -727,6 +733,11 @@ void GpuInit::InitializeInProcess(base::CommandLine* command_line,
+ gl::DirectCompositionSurfaceWin::DisableDecodeSwapChain();
+ #endif
+
++ // Disable AImageReader if the workaround is enabled.
++ if (gpu_feature_info_.IsWorkaroundEnabled(DISABLE_AIMAGEREADER)) {
++ base::android::AndroidImageReader::DisableSupport();
++ }
++
+ UMA_HISTOGRAM_ENUMERATION("GPU.GLImplementation", gl::GetGLImplementation());
+ }
+ #endif // OS_ANDROID
+--
+2.17.1
+