Selaa lähdekoodia

Release 86.0.4240.73

csagan5 4 vuotta sitten
vanhempi
commit
8839e61ea5

+ 4 - 0
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)

+ 1 - 1
build/RELEASE

@@ -1 +1 @@
-86.0.4240.70
+86.0.4240.73

+ 5 - 0
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

+ 1 - 1
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"/>

+ 42 - 0
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
+

+ 14 - 4
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 @@
+     <PreferenceCategory
+         android:key="account_section"
+         android:order="1"
+-        android:title="@string/prefs_section_account"/>
++        android:title="@string/prefs_section_account"
++        app:isPreferenceVisible="false"/>
+     <PreferenceCategory
+         android:key="account_and_google_services_section"
+         android:order="2"
+@@ -23,14 +24,6 @@
          android:key="sign_in"
          android:order="3"
          android:title="@string/sign_in_to_chrome"/>

+ 144 - 0
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"/>
++
++    <PreferenceCategory
++        android:key="services_category"
++        android:title="@string/services_category_title">
++      <org.chromium.components.browser_ui.settings.ChromeSwitchPreference
++          android:key="search_suggestions"
++          android:title="@string/autocomplete_searches_and_urls_title"
++          android:summary="@string/autocomplete_searches_and_urls_summary"
++          android:persistent="false"/>
++      <org.chromium.components.browser_ui.settings.ChromeSwitchPreference
++          android:key="autofill_assistant"
++          android:title="@string/prefs_autofill_assistant_title"
++          android:summary="@string/prefs_autofill_assistant_summary"
++          android:persistent="false"/>
++      <org.chromium.components.browser_ui.settings.ChromeBasePreference
++          android:key="contextual_search"
++          android:title="@string/contextual_search_title"
++          android:fragment="org.chromium.chrome.browser.contextualsearch.ContextualSearchPreferenceFragment"/>
++     </PreferenceCategory>
+ </PreferenceScreen>
+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
+

+ 2 - 2
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
      <org.chromium.components.browser_ui.settings.ChromeBasePreference
          android:key="manage_sync"
          android:order="5"
-@@ -107,11 +103,6 @@
+@@ -108,11 +104,6 @@
          android:key="languages"
          android:order="21"
          android:title="@string/language_settings"/>

+ 41 - 0
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
+

+ 151 - 0
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 <memory>
+ #include <utility>
+ 
++#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<TextureOwner> 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 <string.h>
+ 
++#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<ui::ScopedMakeCurrent> 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 <memory>
+ 
++#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
+

+ 127 - 0
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<gfx::BufferFormat>
+@@ -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
+