From 3c24cd2e78a5b5ec40dd8d2d44af13ecab43e801 Mon Sep 17 00:00:00 2001 From: Lukas Rusak Date: Thu, 31 May 2018 13:02:21 -0700 Subject: [PATCH] chromium: remove package --- .../addons/browser/chromium/changelog.txt | 26 - .../addons/browser/chromium/config/Xdefaults | 1 - .../browser/chromium/config/pango.modules | 13 - .../addons/browser/chromium/config/pangorc | 10 - .../chromium/config/pixbuf.loaders.cache | 125 --- .../addons/browser/chromium/icon/icon.png | Bin 33372 -> 0 bytes packages/addons/browser/chromium/package.mk | 164 ---- .../patches/chromium-0001_widevine.patch | 10 - .../patches/chromium-0002-allow-root.patch | 11 - ...-0003_oe-root-filesystem-is-readonly.patch | 10 - .../chromium-0004-vaapi-on-linux.patch | 722 ------------------ .../chromium-0005-define-toolchains.patch | 48 -- .../chromium-0006-exclude_unwind_tables.patch | 44 -- ...chromium-0007-dont-link-atomic-in-gn.patch | 12 - .../patches/chromium-0008-fix-webrtc.patch | 10 - .../patches/chromium-0009-fix-gtk_ui.patch | 10 - .../patches/chromium-0010-fix-gcc.patch | 16 - .../browser/chromium/source/bin/chromium | 106 --- .../addons/browser/chromium/source/default.py | 163 ---- .../resources/language/English/strings.xml | 17 - .../chromium/source/resources/settings.xml | 21 - 21 files changed, 1539 deletions(-) delete mode 100644 packages/addons/browser/chromium/changelog.txt delete mode 100644 packages/addons/browser/chromium/config/Xdefaults delete mode 100644 packages/addons/browser/chromium/config/pango.modules delete mode 100644 packages/addons/browser/chromium/config/pangorc delete mode 100644 packages/addons/browser/chromium/config/pixbuf.loaders.cache delete mode 100644 packages/addons/browser/chromium/icon/icon.png delete mode 100644 packages/addons/browser/chromium/package.mk delete mode 100644 packages/addons/browser/chromium/patches/chromium-0001_widevine.patch delete mode 100644 packages/addons/browser/chromium/patches/chromium-0002-allow-root.patch delete mode 100644 packages/addons/browser/chromium/patches/chromium-0003_oe-root-filesystem-is-readonly.patch delete mode 100644 packages/addons/browser/chromium/patches/chromium-0004-vaapi-on-linux.patch delete mode 100644 packages/addons/browser/chromium/patches/chromium-0005-define-toolchains.patch delete mode 100644 packages/addons/browser/chromium/patches/chromium-0006-exclude_unwind_tables.patch delete mode 100644 packages/addons/browser/chromium/patches/chromium-0007-dont-link-atomic-in-gn.patch delete mode 100644 packages/addons/browser/chromium/patches/chromium-0008-fix-webrtc.patch delete mode 100644 packages/addons/browser/chromium/patches/chromium-0009-fix-gtk_ui.patch delete mode 100644 packages/addons/browser/chromium/patches/chromium-0010-fix-gcc.patch delete mode 100644 packages/addons/browser/chromium/source/bin/chromium delete mode 100644 packages/addons/browser/chromium/source/default.py delete mode 100644 packages/addons/browser/chromium/source/resources/language/English/strings.xml delete mode 100644 packages/addons/browser/chromium/source/resources/settings.xml diff --git a/packages/addons/browser/chromium/changelog.txt b/packages/addons/browser/chromium/changelog.txt deleted file mode 100644 index 5d279814ad..0000000000 --- a/packages/addons/browser/chromium/changelog.txt +++ /dev/null @@ -1,26 +0,0 @@ -108 -- Security Update to 63.0.3239.108 - -107 -- Update to 63.0.3239.84 - -106 -- Update to 55.0.2883.75 - -105 -- Update to 55.0.2883.44 - -104 -- Update to 53.0.2785.92 - -103 -- add xdotool - -102 -- add unclutter - -101 -- update to version 50.0.2661.75 - -100 -- initial LibreELEC release diff --git a/packages/addons/browser/chromium/config/Xdefaults b/packages/addons/browser/chromium/config/Xdefaults deleted file mode 100644 index 95307ee3db..0000000000 --- a/packages/addons/browser/chromium/config/Xdefaults +++ /dev/null @@ -1 +0,0 @@ -Xft.dpi: 96 diff --git a/packages/addons/browser/chromium/config/pango.modules b/packages/addons/browser/chromium/config/pango.modules deleted file mode 100644 index 3a7ae71db4..0000000000 --- a/packages/addons/browser/chromium/config/pango.modules +++ /dev/null @@ -1,13 +0,0 @@ -/storage/.kodi/addons/browser.chromium/pango-modules/pango-arabic-lang.so ArabicScriptEngineLang PangoEngineLang PangoRenderNone arabic:* -/storage/.kodi/addons/browser.chromium/pango-modules/pango-basic-fc.so BasicScriptEngineFc PangoEngineShape PangoRenderFc common: -/storage/.kodi/addons/browser.chromium/pango-modules/pango-indic-lang.so devaIndicScriptEngineLang PangoEngineLang PangoRenderNone devanagari:* -/storage/.kodi/addons/browser.chromium/pango-modules/pango-indic-lang.so bengIndicScriptEngineLang PangoEngineLang PangoRenderNone bengali:* -/storage/.kodi/addons/browser.chromium/pango-modules/pango-indic-lang.so guruIndicScriptEngineLang PangoEngineLang PangoRenderNone gurmukhi:* -/storage/.kodi/addons/browser.chromium/pango-modules/pango-indic-lang.so gujrIndicScriptEngineLang PangoEngineLang PangoRenderNone gujarati:* -/storage/.kodi/addons/browser.chromium/pango-modules/pango-indic-lang.so oryaIndicScriptEngineLang PangoEngineLang PangoRenderNone oriya:* -/storage/.kodi/addons/browser.chromium/pango-modules/pango-indic-lang.so tamlIndicScriptEngineLang PangoEngineLang PangoRenderNone tamil:* -/storage/.kodi/addons/browser.chromium/pango-modules/pango-indic-lang.so teluIndicScriptEngineLang PangoEngineLang PangoRenderNone telugu:* -/storage/.kodi/addons/browser.chromium/pango-modules/pango-indic-lang.so kndaIndicScriptEngineLang PangoEngineLang PangoRenderNone kannada:* -/storage/.kodi/addons/browser.chromium/pango-modules/pango-indic-lang.so mlymIndicScriptEngineLang PangoEngineLang PangoRenderNone malayalam:* -/storage/.kodi/addons/browser.chromium/pango-modules/pango-indic-lang.so sinhIndicScriptEngineLang PangoEngineLang PangoRenderNone sinhala:* - diff --git a/packages/addons/browser/chromium/config/pangorc b/packages/addons/browser/chromium/config/pangorc deleted file mode 100644 index e7a942d712..0000000000 --- a/packages/addons/browser/chromium/config/pangorc +++ /dev/null @@ -1,10 +0,0 @@ -# -# pangorc file for uninstalled operation. If pango-viewer is run with -# this file in the current directory it will set it as PANGO_RC_FILE -# - -[Pango] -ModuleFiles = /storage/.kodi/addons/browser.chromium/config/pango.modules - -[PangoX] -AliasFiles = /storage/.kodi/addons/browser.chromium/config/pangx.aliases diff --git a/packages/addons/browser/chromium/config/pixbuf.loaders.cache b/packages/addons/browser/chromium/config/pixbuf.loaders.cache deleted file mode 100644 index 62ef3707da..0000000000 --- a/packages/addons/browser/chromium/config/pixbuf.loaders.cache +++ /dev/null @@ -1,125 +0,0 @@ -"/storage/.kodi/addons/browser.chromium/gdk-pixbuf-modules/libpixbufloader-jpeg.so" -"jpeg" 5 "gdk-pixbuf" "The JPEG image format" "LGPL" -"image/jpeg" "" -"jpeg" "jpe" "jpg" "" -"\377\330" "" 100 - -"/storage/.kodi/addons/browser.chromium/gdk-pixbuf-modules/libpixbufloader-ani.so" -"ani" 4 "gdk-pixbuf" "The ANI image format" "LGPL" -"application/x-navi-animation" "" -"ani" "" -"RIFF ACON" " xxxx " 100 - -"/storage/.kodi/addons/browser.chromium/gdk-pixbuf-modules/libpixbufloader-ico.so" -"ico" 5 "gdk-pixbuf" "The ICO image format" "LGPL" -"image/x-icon" "image/x-ico" "image/x-win-bitmap" "" -"ico" "cur" "" -" \001 " "zz znz" 100 -" \002 " "zz znz" 100 - -"/storage/.kodi/addons/browser.chromium/gdk-pixbuf-modules/libpixbufloader-ras.so" -"ras" 4 "gdk-pixbuf" "The Sun raster image format" "LGPL" -"image/x-cmu-raster" "image/x-sun-raster" "" -"ras" "" -"Y\246j\225" "" 100 - -"/storage/.kodi/addons/browser.chromium/gdk-pixbuf-modules/libpixbufloader-jasper.so" -"jpeg2000" 4 "gdk-pixbuf" "The JPEG 2000 image format" "LGPL" -"image/jp2" "image/jpeg2000" "image/jpx" "" -"jp2" "jpc" "jpx" "j2k" "jpf" "" -" jP" "!!!! " 100 -"\377O\377Q" "" 100 - -"/storage/.kodi/addons/browser.chromium/gdk-pixbuf-modules/libpixbufloader-wbmp.so" -"wbmp" 4 "gdk-pixbuf" "The WBMP image format" "LGPL" -"image/vnd.wap.wbmp" "" -"wbmp" "" -" " "zz" 1 -" `" "z " 1 -" @" "z " 1 -" " "z " 1 - -"/storage/.kodi/addons/browser.chromium/gdk-pixbuf-modules/libpixbufloader-png.so" -"png" 5 "gdk-pixbuf" "The PNG image format" "LGPL" -"image/png" "" -"png" "" -"\211PNG\r\n\032\n" "" 100 - -"/storage/.kodi/addons/browser.chromium/gdk-pixbuf-modules/libpixbufloader-pcx.so" -"pcx" 4 "gdk-pixbuf" "The PCX image format" "LGPL" -"image/x-pcx" "" -"pcx" "" -"\n \001" "" 100 -"\n\002\001" "" 100 -"\n\003\001" "" 100 -"\n\004\001" "" 100 -"\n\005\001" "" 100 - -"/storage/.kodi/addons/browser.chromium/gdk-pixbuf-modules/libpixbufloader-qtif.so" -"qtif" 4 "gdk-pixbuf" "The QTIF image format" "LGPL" -"image/x-quicktime" "image/qtif" "" -"qtif" "qif" "" -"abcdidsc" "xxxx " 100 -"abcdidat" "xxxx " 100 - -"/storage/.kodi/addons/browser.chromium/gdk-pixbuf-modules/libpixbufloader-tiff.so" -"tiff" 5 "gdk-pixbuf" "The TIFF image format" "LGPL" -"image/tiff" "" -"tiff" "tif" "" -"MM *" " z " 100 -"II* " " z" 100 -"II* \020 CR\002 " " z zzz z" 0 - -"/storage/.kodi/addons/browser.chromium/gdk-pixbuf-modules/libpixbufloader-icns.so" -"icns" 4 "gdk-pixbuf" "The ICNS image format" "GPL" -"image/x-icns" "" -"icns" "" -"icns" "" 100 - -"/storage/.kodi/addons/browser.chromium/gdk-pixbuf-modules/libpixbufloader-tga.so" -"tga" 4 "gdk-pixbuf" "The Targa image format" "LGPL" -"image/x-tga" "" -"tga" "targa" "" -" \001\001" "x " 100 -" \001\t" "x " 100 -" \002" "xz " 99 -" \003" "xz " 100 -" \n" "xz " 100 -" \v" "xz " 100 - -"/storage/.kodi/addons/browser.chromium/gdk-pixbuf-modules/libpixbufloader-bmp.so" -"bmp" 5 "gdk-pixbuf" "The BMP image format" "LGPL" -"image/bmp" "image/x-bmp" "image/x-MS-bmp" "" -"bmp" "" -"BM" "" 100 - -"/storage/.kodi/addons/browser.chromium/gdk-pixbuf-modules/libpixbufloader-xbm.so" -"xbm" 4 "gdk-pixbuf" "The XBM image format" "LGPL" -"image/x-xbitmap" "" -"xbm" "" -"#define " "" 100 -"/*" "" 50 - -"/storage/.kodi/addons/browser.chromium/gdk-pixbuf-modules/libpixbufloader-xpm.so" -"xpm" 4 "gdk-pixbuf" "The XPM image format" "LGPL" -"image/x-xpixmap" "" -"xpm" "" -"/* XPM */" "" 100 - -"/storage/.kodi/addons/browser.chromium/gdk-pixbuf-modules/libpixbufloader-pnm.so" -"pnm" 4 "gdk-pixbuf" "The PNM/PBM/PGM/PPM image format family" "LGPL" -"image/x-portable-anymap" "image/x-portable-bitmap" "image/x-portable-graymap" "image/x-portable-pixmap" "" -"pnm" "pbm" "pgm" "ppm" "" -"P1" "" 100 -"P2" "" 100 -"P3" "" 100 -"P4" "" 100 -"P5" "" 100 -"P6" "" 100 - -"/storage/.kodi/addons/browser.chromium/gdk-pixbuf-modules/libpixbufloader-gif.so" -"gif" 4 "gdk-pixbuf" "The GIF image format" "LGPL" -"image/gif" "" -"gif" "" -"GIF8" "" 100 - diff --git a/packages/addons/browser/chromium/icon/icon.png b/packages/addons/browser/chromium/icon/icon.png deleted file mode 100644 index 033fb10f71144cab2d1b1e686c1f9ca7f1cbf000..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33372 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%0A2+Rq~0#g2{z{Gop~E|7PFJ$X!?Ze;-Ll$TC@T7 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 YTKdRq*a0hJ`p+{-iOGxB2pb0e9}sCo8~^|S diff --git a/packages/addons/browser/chromium/package.mk b/packages/addons/browser/chromium/package.mk deleted file mode 100644 index 90c9ae84d7..0000000000 --- a/packages/addons/browser/chromium/package.mk +++ /dev/null @@ -1,164 +0,0 @@ -################################################################################ -# This file is part of OpenELEC - http://www.openelec.tv -# Copyright (C) 2009-2012 Stephan Raue (stephan@openelec.tv) -# -# This Program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. -# -# This Program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with OpenELEC.tv; see the file COPYING. If not, write to -# the Free Software Foundation, 51 Franklin Street, Suite 500, Boston, MA 02110, USA. -# http://www.gnu.org/copyleft/gpl.html -################################################################################ - -PKG_NAME="chromium" -PKG_VERSION="63.0.3239.108" -PKG_SHA256="47d80798194da78bdd519b7ce012425b13cf89d6eb287e22a34342a245c31a2b" -PKG_REV="108" -PKG_ARCH="x86_64" -PKG_LICENSE="Mixed" -PKG_SITE="http://www.chromium.org/Home" -PKG_URL="https://commondatastorage.googleapis.com/chromium-browser-official/$PKG_NAME-$PKG_VERSION.tar.xz" -PKG_DEPENDS_HOST="toolchain ninja:host Python2:host" -PKG_DEPENDS_TARGET="chromium:host node:host pciutils dbus libXcomposite libXcursor libXtst alsa-lib bzip2 yasm nss libXScrnSaver libexif libpng atk gtk+ libva-vdpau-driver unclutter xdotool" -PKG_SECTION="browser" -PKG_SHORTDESC="Chromium Browser: the open-source web browser from Google" -PKG_LONGDESC="Chromium Browser ($PKG_VERSION): the open-source web browser from Google" -PKG_TOOLCHAIN="manual" - -PKG_IS_ADDON="yes" -PKG_ADDON_NAME="Chromium" -PKG_ADDON_TYPE="xbmc.python.script" -PKG_ADDON_PROVIDES="executable" - -post_patch() { - cd $(get_build_dir chromium) - - # Use Python 2 - find . -name '*.py' -exec sed -i -r "s|/usr/bin/python$|$TOOLCHAIN/bin/python|g" {} + - - # set correct widevine - sed -i -e 's/@WIDEVINE_VERSION@/Pinkie Pie/' ./third_party/widevine/cdm/stub/widevine_cdm_version.h -} - -make_host() { - ./tools/gn/bootstrap/bootstrap.py --no-rebuild --no-clean --verbose -} - -make_target() { - export LDFLAGS="$LDFLAGS -ludev" - export LD=$CXX - - # Google API keys (see http://www.chromium.org/developers/how-tos/api-keys) - # Note: These are for OpenELEC use ONLY. For your own distribution, please - # get your own set of keys. - - local _google_api_key=AIzaSyAQ6L9vt9cnN4nM0weaa6Y38K4eyPvtKgI - local _google_default_client_id=740889307901-4bkm4e0udppnp1lradko85qsbnmkfq3b.apps.googleusercontent.com - local _google_default_client_secret=9TJlhL661hvShQub4cWhANXa - - local _flags=( - "host_toolchain=\"//build/toolchain/linux:x64_host\"" - 'is_clang=false' - 'clang_use_chrome_plugins=false' - 'symbol_level=0' - 'is_debug=false' - 'fatal_linker_warnings=false' - 'treat_warnings_as_errors=false' - 'fieldtrial_testing_like_official_build=true' - 'remove_webcore_debug_symbols=true' - 'ffmpeg_branding="Chrome"' - 'proprietary_codecs=true' - 'link_pulseaudio=true' - 'linux_use_bundled_binutils=false' - 'use_allocator="none"' - 'use_cups=false' - 'use_custom_libcxx=false' - 'use_gconf=false' - 'use_gnome_keyring=false' - 'use_gold=false' - 'use_gtk3=false' - 'use_kerberos=false' - 'use_pulseaudio=false' - 'use_sysroot=true' - 'use_vaapi=true' - 'use_v8_context_snapshot=false' - 'enable_vulkan=false' - "target_sysroot=\"${SYSROOT_PREFIX}\"" - 'exclude_unwind_tables=true' - 'enable_hangout_services_extension=true' - 'enable_widevine=true' - 'enable_nacl=false' - 'enable_nacl_nonsfi=false' - 'enable_swiftshader=false' - 'enable_vulkan=false' - "google_api_key=\"${_google_api_key}\"" - "google_default_client_id=\"${_google_default_client_id}\"" - "google_default_client_secret=\"${_google_default_client_secret}\"" - ) - - ./third_party/libaddressinput/chromium/tools/update-strings.py - - ./out/Release/gn gen out/Release --args="${_flags[*]}" --script-executable=$TOOLCHAIN/bin/python - mkdir -p $PKG_BUILD/third_party/node/linux/node-linux-x64/bin - ln -fs $TOOLCHAIN/bin/node $PKG_BUILD/third_party/node/linux/node-linux-x64/bin/node - - ninja -j${CONCURRENCY_MAKE_LEVEL} -C out/Release chrome chrome_sandbox widevinecdmadapter -} - -addon() { - mkdir -p $ADDON_BUILD/$PKG_ADDON_ID/bin - cp -P $PKG_BUILD/out/Release/chrome $ADDON_BUILD/$PKG_ADDON_ID/bin/chromium.bin - cp -P $PKG_BUILD/out/Release/chrome_sandbox $ADDON_BUILD/$PKG_ADDON_ID/bin/chrome-sandbox - cp -P $PKG_BUILD/out/Release/{*.pak,*.dat,*.bin,libwidevinecdmadapter.so} $ADDON_BUILD/$PKG_ADDON_ID/bin - cp -PR $PKG_BUILD/out/Release/locales $ADDON_BUILD/$PKG_ADDON_ID/bin/ - cp -PR $PKG_BUILD/out/Release/gen/content/content_resources.pak $ADDON_BUILD/$PKG_ADDON_ID/bin/ - - # config - mkdir -p $ADDON_BUILD/$PKG_ADDON_ID/config - cp -P $PKG_DIR/config/* $ADDON_BUILD/$PKG_ADDON_ID/config - - mkdir -p $ADDON_BUILD/$PKG_ADDON_ID/lib - - # pango - cp -PL $(get_build_dir pango)/.install_pkg/usr/lib/libpangocairo-1.0.so.0 $ADDON_BUILD/$PKG_ADDON_ID/lib - cp -PL $(get_build_dir pango)/.install_pkg/usr/lib/libpango-1.0.so.0 $ADDON_BUILD/$PKG_ADDON_ID/lib - cp -PL $(get_build_dir pango)/.install_pkg/usr/lib/libpangoft2-1.0.so.0 $ADDON_BUILD/$PKG_ADDON_ID/lib - - # cairo - cp -PL $(get_build_dir cairo)/.install_pkg/usr/lib/libcairo.so.2 $ADDON_BUILD/$PKG_ADDON_ID/lib - - # gtk - cp -PL $(get_build_dir gtk+)/.install_pkg/usr/lib/libgdk-x11-2.0.so.0 $ADDON_BUILD/$PKG_ADDON_ID/lib - cp -PL $(get_build_dir gtk+)/.install_pkg/usr/lib/libgtk-x11-2.0.so.0 $ADDON_BUILD/$PKG_ADDON_ID/lib - - # harfbuzz - cp -PL $(get_build_dir harfbuzz)/.install_pkg/usr/lib/libharfbuzz.so* $ADDON_BUILD/$PKG_ADDON_ID/lib - cp -PL $(get_build_dir harfbuzz)/.install_pkg/usr/lib/libharfbuzz-icu.so* $ADDON_BUILD/$PKG_ADDON_ID/lib - - # gdk-pixbuf - cp -PL $(get_build_dir gdk-pixbuf)/.install_pkg/usr/lib/libgdk_pixbuf-2.0.so.0 $ADDON_BUILD/$PKG_ADDON_ID/lib - - # pixbuf loaders - mkdir -p $ADDON_BUILD/$PKG_ADDON_ID/gdk-pixbuf-modules - cp -PL $(get_build_dir gdk-pixbuf)/.install_pkg/usr/lib/gdk-pixbuf-2.0/2.10.0/loaders/* $ADDON_BUILD/$PKG_ADDON_ID/gdk-pixbuf-modules - - # libexif - cp -PL $(get_build_dir libexif)/.install_pkg/usr/lib/* $ADDON_BUILD/$PKG_ADDON_ID/lib - - # libva-vdpau-driver - cp -PL $(get_build_dir libva-vdpau-driver)/.install_pkg/usr/lib/dri/*.so $ADDON_BUILD/$PKG_ADDON_ID/lib - - # unclutter - cp -P $(get_build_dir unclutter)/.install_pkg/usr/bin/unclutter $ADDON_BUILD/$PKG_ADDON_ID/bin - - # xdotool - cp -P $(get_build_dir xdotool)/xdotool $ADDON_BUILD/$PKG_ADDON_ID/bin -} diff --git a/packages/addons/browser/chromium/patches/chromium-0001_widevine.patch b/packages/addons/browser/chromium/patches/chromium-0001_widevine.patch deleted file mode 100644 index a67ae8b1c1..0000000000 --- a/packages/addons/browser/chromium/patches/chromium-0001_widevine.patch +++ /dev/null @@ -1,10 +0,0 @@ -diff -upr chromium-48.0.2564.82.orig/third_party/widevine/cdm/stub/widevine_cdm_version.h chromium-48.0.2564.82/third_party/widevine/cdm/stub/widevine_cdm_version.h ---- chromium-48.0.2564.82.orig/third_party/widevine/cdm/stub/widevine_cdm_version.h 2016-01-14 01:05:17.000000000 +0200 -+++ chromium-48.0.2564.82/third_party/widevine/cdm/stub/widevine_cdm_version.h 2016-01-21 19:18:51.287978456 +0200 -@@ -12,4 +12,6 @@ - - #define WIDEVINE_CDM_AVAILABLE - -+#define WIDEVINE_CDM_VERSION_STRING "@WIDEVINE_VERSION@" -+ - #endif // WIDEVINE_CDM_VERSION_H_ diff --git a/packages/addons/browser/chromium/patches/chromium-0002-allow-root.patch b/packages/addons/browser/chromium/patches/chromium-0002-allow-root.patch deleted file mode 100644 index eccfbbf87c..0000000000 --- a/packages/addons/browser/chromium/patches/chromium-0002-allow-root.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- chromium-59.0.3071.109/./chrome/browser/ui/views/chrome_browser_main_extra_parts_views.cc.org 2017-06-26 20:32:34.907628561 +0200 -+++ chromium-59.0.3071.109/./chrome/browser/ui/views/chrome_browser_main_extra_parts_views.cc 2017-06-26 20:31:05.855206203 +0200 -@@ -99,7 +99,7 @@ - IMEDriver::Register(); - #endif - --#if defined(OS_LINUX) && !defined(OS_CHROMEOS) -+#if 0 - // On the Linux desktop, we want to prevent the user from logging in as root, - // so that we don't destroy the profile. Now that we have some minimal ui - // initialized, check to see if we're running as root and bail if we are. diff --git a/packages/addons/browser/chromium/patches/chromium-0003_oe-root-filesystem-is-readonly.patch b/packages/addons/browser/chromium/patches/chromium-0003_oe-root-filesystem-is-readonly.patch deleted file mode 100644 index 4982ee8b0b..0000000000 --- a/packages/addons/browser/chromium/patches/chromium-0003_oe-root-filesystem-is-readonly.patch +++ /dev/null @@ -1,10 +0,0 @@ ---- a/sandbox/linux/suid/client/setuid_sandbox_client.cc 2015-11-13 03:04:19.000000000 -0800 -+++ b/sandbox/linux/suid/client/setuid_sandbox_client.cc 2016-01-12 22:06:26.291831672 -0800 -@@ -123,7 +123,6 @@ - - // We now consider ourselves "fully sandboxed" as far as the - // setuid sandbox is concerned. -- CHECK(IsFileSystemAccessDenied()); - sandboxed_ = true; - return true; - } diff --git a/packages/addons/browser/chromium/patches/chromium-0004-vaapi-on-linux.patch b/packages/addons/browser/chromium/patches/chromium-0004-vaapi-on-linux.patch deleted file mode 100644 index b8dff361a7..0000000000 --- a/packages/addons/browser/chromium/patches/chromium-0004-vaapi-on-linux.patch +++ /dev/null @@ -1,722 +0,0 @@ -From 7f29b44224439377592be2b75da0b86d82d8ad6d Mon Sep 17 00:00:00 2001 -From: Daniel Charles -Date: Wed, 18 Oct 2017 17:27:42 -0700 -Subject: [PATCH] Enable VAVDA, VAVEA and VAJDA on linux with VAAPI only - -This patch contains all the changes necessary to use VA-API along with -vaapi-driver to run all media use cases supported with hardware acceleration. - -It is intended to remain as experimental accessible from chrome://flags on linux. -It requires libva/intel-vaapi-driver to be installed on the system path where -chrome is executed. Other drivers could be tested if available. Flags are -kept independent for linux, where this feature has to be enabled before -actually using it. This should not change how other OSes use the flags -already, the new flags will show at the buttom on the section of unavailable -experiments - -The changes cover a range of compiler pre-processor flags to enable the stack. -It moves the presandbox operations to the vaapi_wrapper class as the hook function -is available there. vaInit will open driver on the correct installed folder. - -chrome flags consolidtation into only two flags for linux. Mjpeg and accelerated -video are used. The other flags are kept for ChromeOS and other OSes. - -Developer testing was made on skylake hardware, ChromeOS and Ubuntu. - -BUG=NONE -TEST="subjective testing with VAVDA,VAVEA and VAJDA, autotest for encoder" -TEST="and decoder hardware accelerated" -TEST="have libva/intel-vaapi-driver installed and not installed in the system" -TEST="repeat on different hardware families" -R=posciak@chromium.org -R=kcwu@chromium.org - -Cq-Include-Trybots: master.tryserver.chromium.android:android_optional_gpu_tests_rel;master.tryserver.chromium.linux:linux_optional_gpu_tests_rel;master.tryserver.chromium.mac:mac_optional_gpu_tests_rel;master.tryserver.chromium.win:win_optional_gpu_tests_rel -Change-Id: Ifbbf5c9e5221a8b5733fc6d4d0cf984a1f103171 -Signed-off-by: Daniel Charles ---- - -diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc -index 3555293..4c3115f 100644 ---- a/chrome/browser/about_flags.cc -+++ b/chrome/browser/about_flags.cc -@@ -1246,12 +1246,14 @@ - flag_descriptions::kUiPartialSwapDescription, kOsAll, - SINGLE_DISABLE_VALUE_TYPE(switches::kUIDisablePartialSwap)}, - #if BUILDFLAG(ENABLE_WEBRTC) -+#if !defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_ANDROID) - {"disable-webrtc-hw-decoding", flag_descriptions::kWebrtcHwDecodingName, - flag_descriptions::kWebrtcHwDecodingDescription, kOsAndroid | kOsCrOS, - SINGLE_DISABLE_VALUE_TYPE(switches::kDisableWebRtcHWDecoding)}, - {"disable-webrtc-hw-encoding", flag_descriptions::kWebrtcHwEncodingName, - flag_descriptions::kWebrtcHwEncodingDescription, kOsAndroid | kOsCrOS, - SINGLE_DISABLE_VALUE_TYPE(switches::kDisableWebRtcHWEncoding)}, -+#endif - {"enable-webrtc-hw-h264-encoding", - flag_descriptions::kWebrtcHwH264EncodingName, - flag_descriptions::kWebrtcHwH264EncodingDescription, kOsAndroid | kOsCrOS, -@@ -1557,6 +1559,13 @@ - flag_descriptions::kSpuriousPowerButtonLidAngleChangeDescription, kOsCrOS, - MULTI_VALUE_TYPE(kSpuriousPowerButtonLidAngleChangeChoices)}, - #endif // OS_CHROMEOS -+#if defined(OS_LINUX) && !defined(OS_CHROMEOS) && !defined(OS_ANDROID) -+ { -+ "enable-accelerated-video", flag_descriptions::kAcceleratedVideoName, -+ flag_descriptions::kAcceleratedVideoDescription, kOsLinux, -+ SINGLE_VALUE_TYPE(switches::kEnableAcceleratedVideo), -+ }, -+#else - { - "disable-accelerated-video-decode", - flag_descriptions::kAcceleratedVideoDecodeName, -@@ -1564,6 +1573,7 @@ - kOsMac | kOsWin | kOsCrOS | kOsAndroid, - SINGLE_DISABLE_VALUE_TYPE(switches::kDisableAcceleratedVideoDecode), - }, -+#endif - {"mojo-video-encode-accelerator", - flag_descriptions::kMojoVideoEncodeAcceleratorName, - flag_descriptions::kMojoVideoEncodeAcceleratorDescription, -@@ -2229,12 +2239,17 @@ - FEATURE_VALUE_TYPE(features::kWebVrVsyncAlign)}, - #endif // OS_ANDROID - #endif // ENABLE_VR --#if defined(OS_CHROMEOS) -+#if defined(OS_LINUX) && !defined(OS_CHROMEOS) && !defined(OS_ANDROID) -+ {"enable-accelerated-mjpeg-decode", -+ flag_descriptions::kAcceleratedMjpegDecodeName, -+ flag_descriptions::kAcceleratedMjpegDecodeDescription, kOsLinux, -+ SINGLE_VALUE_TYPE(switches::kEnableAcceleratedMjpegDecode)}, -+#elif defined(OS_CHROMEOS) - {"disable-accelerated-mjpeg-decode", - flag_descriptions::kAcceleratedMjpegDecodeName, - flag_descriptions::kAcceleratedMjpegDecodeDescription, kOsCrOS, - SINGLE_DISABLE_VALUE_TYPE(switches::kDisableAcceleratedMjpegDecode)}, --#endif // OS_CHROMEOS -+#endif - {"v8-cache-options", flag_descriptions::kV8CacheOptionsName, - flag_descriptions::kV8CacheOptionsDescription, kOsAll, - MULTI_VALUE_TYPE(kV8CacheOptionsChoices)}, -diff --git a/chrome/browser/chromeos/login/chrome_restart_request.cc b/chrome/browser/chromeos/login/chrome_restart_request.cc -index 3815e79..d5d3712 100644 ---- a/chrome/browser/chromeos/login/chrome_restart_request.cc -+++ b/chrome/browser/chromeos/login/chrome_restart_request.cc -@@ -19,6 +19,7 @@ - #include "base/sys_info.h" - #include "base/timer/timer.h" - #include "base/values.h" -+#include "build/build_config.h" - #include "cc/base/switches.h" - #include "chrome/browser/browser_process.h" - #include "chrome/browser/chromeos/boot_times_recorder.h" -@@ -79,8 +80,13 @@ - ::switches::kDisable2dCanvasImageChromium, - ::switches::kDisableAccelerated2dCanvas, - ::switches::kDisableAcceleratedJpegDecoding, -+#if defined(OS_LINUX) && !defined(OS_CHROMEOS) && !defined(OS_ANDROID) -+ ::switches::kEnableAcceleratedMjpegDecode, -+ ::switches::kEnableAcceleratedVideo, -+#else - ::switches::kDisableAcceleratedMjpegDecode, - ::switches::kDisableAcceleratedVideoDecode, -+#endif - ::switches::kDisableBlinkFeatures, - ::switches::kDisableCastStreamingHWEncoding, - ::switches::kDisableDistanceFieldText, -@@ -166,7 +172,7 @@ - ::switches::kDisableWebGLImageChromium, - ::switches::kEnableWebGLImageChromium, - ::switches::kEnableWebVR, --#if BUILDFLAG(ENABLE_WEBRTC) -+#if BUILDFLAG(ENABLE_WEBRTC) && (defined(OS_CHROMEOS) || defined(OS_ANDROID)) - ::switches::kDisableWebRtcHWDecoding, - ::switches::kDisableWebRtcHWEncoding, - #endif -diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc -index 74e6bc7..ab184a5 100644 ---- a/chrome/browser/flag_descriptions.cc -+++ b/chrome/browser/flag_descriptions.cc -@@ -14,6 +14,13 @@ - "Enables the use of the GPU to perform 2d canvas rendering instead of " - "using software rendering."; - -+#if defined(OS_LINUX) && !defined(OS_CHROMEOS) -+const char kAcceleratedVideoName[] = "Hardware-accelerated video"; -+const char kAcceleratedVideoDescription[] = -+ "Hardware-accelerated video where VA-API driver is installed on the" -+ "system."; -+#endif -+ - const char kAcceleratedVideoDecodeName[] = "Hardware-accelerated video decode"; - const char kAcceleratedVideoDecodeDescription[] = - "Hardware-accelerated video decode where available."; -@@ -1478,6 +1485,7 @@ - const char kWebrtcEchoCanceller3Description[] = - "Experimental WebRTC echo canceller (AEC3)."; - -+#if !defined(OS_LINUX) || !defined(OS_CHROMEOS) - const char kWebrtcHwDecodingName[] = "WebRTC hardware video decoding"; - const char kWebrtcHwDecodingDescription[] = - "Support in WebRTC for decoding video streams using platform hardware."; -@@ -1485,6 +1493,7 @@ - const char kWebrtcHwEncodingName[] = "WebRTC hardware video encoding"; - const char kWebrtcHwEncodingDescription[] = - "Support in WebRTC for encoding video streams using platform hardware."; -+#endif - - const char kWebrtcHwH264EncodingName[] = "WebRTC hardware h264 video encoding"; - const char kWebrtcHwH264EncodingDescription[] = -@@ -2283,14 +2292,16 @@ - - // Chrome OS ------------------------------------------------------------------- - --#if defined(OS_CHROMEOS) -+#if defined(OS_CHROMEOS) || (defined(OS_LINUX) && !defined(OS_ANDROID)) - - const char kAcceleratedMjpegDecodeName[] = - "Hardware-accelerated mjpeg decode for captured frame"; - const char kAcceleratedMjpegDecodeDescription[] = - "Enable hardware-accelerated mjpeg decode for captured frame where " - "available."; -+#endif - -+#if defined(OS_CHROMEOS) - const char kAllowTouchpadThreeFingerClickName[] = "Touchpad three-finger-click"; - const char kAllowTouchpadThreeFingerClickDescription[] = - "Enables touchpad three-finger-click as middle button."; -diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h -index 54a4950..5ace5e0 100644 ---- a/chrome/browser/flag_descriptions.h -+++ b/chrome/browser/flag_descriptions.h -@@ -37,6 +37,10 @@ - extern const char kAccelerated2dCanvasName[]; - extern const char kAccelerated2dCanvasDescription[]; - -+#if defined(OS_LINUX) && !defined(OS_CHROMEOS) && !defined(OS_ANDROID) -+extern const char kAcceleratedVideoName[]; -+extern const char kAcceleratedVideoDescription[]; -+#endif - extern const char kAcceleratedVideoDecodeName[]; - extern const char kAcceleratedVideoDecodeDescription[]; - -@@ -1401,13 +1405,17 @@ - - #endif // defined(OS_MACOSX) - --// Chrome OS ------------------------------------------------------------------ -- --#if defined(OS_CHROMEOS) -+#if defined(OS_CHROMEOS) || (defined(OS_LINUX) && !defined(OS_ANDROID)) - - extern const char kAcceleratedMjpegDecodeName[]; - extern const char kAcceleratedMjpegDecodeDescription[]; - -+#endif -+ -+// Chrome OS ------------------------------------------------------------------ -+ -+#if defined(OS_CHROMEOS) -+ - extern const char kAllowTouchpadThreeFingerClickName[]; - extern const char kAllowTouchpadThreeFingerClickDescription[]; - -diff --git a/content/browser/gpu/compositor_util.cc b/content/browser/gpu/compositor_util.cc -index 122282d..bc102a3 100644 ---- a/content/browser/gpu/compositor_util.cc -+++ b/content/browser/gpu/compositor_util.cc -@@ -105,7 +105,11 @@ - {"video_decode", - manager->IsFeatureBlacklisted( - gpu::GPU_FEATURE_TYPE_ACCELERATED_VIDEO_DECODE), -+#if defined(OS_LINUX) && !defined(OS_CHROMEOS) && !defined(OS_ANDROID) -+ !command_line.HasSwitch(switches::kEnableAcceleratedVideo), -+#else - command_line.HasSwitch(switches::kDisableAcceleratedVideoDecode), -+#endif - "Accelerated video decode has been disabled, either via blacklist," - " about:flags or the command line.", - true}, -@@ -113,7 +117,11 @@ - {"video_encode", - manager->IsFeatureBlacklisted( - gpu::GPU_FEATURE_TYPE_ACCELERATED_VIDEO_ENCODE), -+#if defined(OS_LINUX) && !defined(OS_CHROMEOS) && !defined(OS_ANDROID) -+ !command_line.HasSwitch(switches::kEnableAcceleratedVideo), -+#else - command_line.HasSwitch(switches::kDisableWebRtcHWEncoding), -+#endif - "Accelerated video encode has been disabled, either via blacklist," - " about:flags or the command line.", - true}, -diff --git a/content/browser/gpu/gpu_data_manager_impl_private.cc b/content/browser/gpu/gpu_data_manager_impl_private.cc -index 51aa672..963da85 100644 ---- a/content/browser/gpu/gpu_data_manager_impl_private.cc -+++ b/content/browser/gpu/gpu_data_manager_impl_private.cc -@@ -717,7 +717,11 @@ - DCHECK(command_line); - - if (ShouldDisableAcceleratedVideoDecode(command_line)) -+#if defined(OS_LINUX) && !defined(OS_CHROMEOS) && !defined(OS_ANDROID) -+ command_line->AppendSwitch(switches::kEnableAcceleratedVideo); -+#else - command_line->AppendSwitch(switches::kDisableAcceleratedVideoDecode); -+#endif - - #if defined(USE_AURA) - if (!CanUseGpuBrowserCompositor()) -@@ -748,7 +752,11 @@ - } - - if (ShouldDisableAcceleratedVideoDecode(command_line)) { -+#if defined(OS_LINUX) && !defined(OS_CHROMEOS) && !defined(OS_ANDROID) -+ command_line->AppendSwitch(switches::kEnableAcceleratedVideo); -+#else - command_line->AppendSwitch(switches::kDisableAcceleratedVideoDecode); -+#endif - } - - #if defined(USE_OZONE) -@@ -826,7 +834,12 @@ - const base::CommandLine* command_line = - base::CommandLine::ForCurrentProcess(); - if (!ShouldDisableAcceleratedVideoDecode(command_line) && -- !command_line->HasSwitch(switches::kDisableAcceleratedVideoDecode)) { -+#if defined(OS_LINUX) && !defined(OS_CHROMEOS) && !defined(OS_ANDROID) -+ command_line->HasSwitch(switches::kEnableAcceleratedVideo) -+#else -+ !command_line->HasSwitch(switches::kDisableAcceleratedVideoDecode) -+#endif -+ ) { - prefs->pepper_accelerated_video_decode_enabled = true; - } - } -@@ -1016,7 +1029,13 @@ - // to resolve crbug/442039 has been collected. - const std::string group_name = base::FieldTrialList::FindFullName( - "DisableAcceleratedVideoDecode"); -- if (command_line->HasSwitch(switches::kDisableAcceleratedVideoDecode)) { -+ if ( -+#if defined(OS_LINUX) && !defined(OS_CHROMEOS) && !defined(OS_ANDROID) -+ !command_line->HasSwitch(switches::kEnableAcceleratedVideo) -+#else -+ command_line->HasSwitch(switches::kDisableAcceleratedVideoDecode) -+#endif -+ ) { - // It was already disabled on the command line. - return false; - } -diff --git a/content/browser/gpu/gpu_process_host.cc b/content/browser/gpu/gpu_process_host.cc -index 95d4dff..9b26d3f 100644 ---- a/content/browser/gpu/gpu_process_host.cc -+++ b/content/browser/gpu/gpu_process_host.cc -@@ -111,7 +111,11 @@ - - // Command-line switches to propagate to the GPU process. - static const char* const kSwitchNames[] = { -+#if defined(OS_LINUX) && !defined(OS_CHROMEOS) && !defined(OS_ANDROID) -+ switches::kEnableAcceleratedVideo, -+#else - switches::kDisableAcceleratedVideoDecode, -+#endif - switches::kDisableBreakpad, - switches::kDisableGpuRasterization, - switches::kDisableGpuSandbox, -@@ -120,7 +124,7 @@ - switches::kDisableLogging, - switches::kDisableSeccompFilterSandbox, - switches::kDisableShaderNameHashing, --#if BUILDFLAG(ENABLE_WEBRTC) -+#if BUILDFLAG(ENABLE_WEBRTC) && !defined(OS_LINUX) - switches::kDisableWebRtcHWEncoding, - #endif - #if defined(OS_WIN) -diff --git a/content/browser/renderer_host/media/video_capture_browsertest.cc b/content/browser/renderer_host/media/video_capture_browsertest.cc -index 8ca0ad0..8c489d0 100644 ---- a/content/browser/renderer_host/media/video_capture_browsertest.cc -+++ b/content/browser/renderer_host/media/video_capture_browsertest.cc -@@ -155,8 +155,13 @@ - base::CommandLine::ForCurrentProcess()->AppendSwitch( - switches::kUseFakeJpegDecodeAccelerator); - } else { -+#if defined(OS_LINUX) && !defined(OS_CHROMEOS) && !defined(OS_ANDROID) -+ base::CommandLine::ForCurrentProcess()->AppendSwitch( -+ switches::kEnableAcceleratedMjpegDecode); -+#else - base::CommandLine::ForCurrentProcess()->AppendSwitch( - switches::kDisableAcceleratedMjpegDecode); -+#endif - } - if (params_.use_mojo_service) { - base::CommandLine::ForCurrentProcess()->AppendSwitchASCII( -diff --git a/content/browser/renderer_host/media/video_capture_gpu_jpeg_decoder.cc b/content/browser/renderer_host/media/video_capture_gpu_jpeg_decoder.cc -index 34afec23..ad77490 100644 ---- a/content/browser/renderer_host/media/video_capture_gpu_jpeg_decoder.cc -+++ b/content/browser/renderer_host/media/video_capture_gpu_jpeg_decoder.cc -@@ -56,15 +56,21 @@ - bool is_platform_supported = - base::CommandLine::ForCurrentProcess()->HasSwitch( - switches::kUseFakeJpegDecodeAccelerator); --#if defined(OS_CHROMEOS) -- // Non-ChromeOS platforms do not support HW JPEG decode now. Do not establish -- // gpu channel to avoid introducing overhead. -+#if !defined(OS_ANDROID) && defined(OS_LINUX) -+ // Non-ChromeOS or Non-Linux platforms do not support HW JPEG decode now. Do -+ // not establish gpu channel to avoid introducing overhead. - is_platform_supported = true; - #endif - - if (!is_platform_supported || -+#if defined(OS_LINUX) && !defined(OS_CHROMEOS) && !defined(OS_ANDROID) -+ !base::CommandLine::ForCurrentProcess()->HasSwitch( -+ switches::kEnableAcceleratedMjpegDecode) -+#else - base::CommandLine::ForCurrentProcess()->HasSwitch( -- switches::kDisableAcceleratedMjpegDecode)) { -+ switches::kDisableAcceleratedMjpegDecode) -+#endif -+ ) { - decoder_status_ = FAILED; - RecordInitDecodeUMA_Locked(); - return; -diff --git a/content/browser/renderer_host/render_process_host_impl.cc b/content/browser/renderer_host/render_process_host_impl.cc -index fbe4d21..1be295e 100644 ---- a/content/browser/renderer_host/render_process_host_impl.cc -+++ b/content/browser/renderer_host/render_process_host_impl.cc -@@ -2506,7 +2506,11 @@ - switches::kDefaultTileHeight, - switches::kDisable2dCanvasImageChromium, - switches::kDisableAcceleratedJpegDecoding, -+#if defined(OS_LINUX) && !defined(OS_CHROMEOS) -+ switches::kEnableAcceleratedVideo, -+#else - switches::kDisableAcceleratedVideoDecode, -+#endif - switches::kDisableBackgroundTimerThrottling, - switches::kDisableBreakpad, - switches::kDisableBrowserSideNavigation, -@@ -2660,8 +2664,10 @@ - switches::kDisableMojoRenderer, - #endif - #if BUILDFLAG(ENABLE_WEBRTC) -+#if !defined(OS_LINUX) || defined(OS_CHROMEOS) - switches::kDisableWebRtcHWDecoding, - switches::kDisableWebRtcHWEncoding, -+#endif - switches::kEnableWebRtcSrtpAesGcm, - switches::kEnableWebRtcSrtpEncryptedHeaders, - switches::kEnableWebRtcStunOrigin, -diff --git a/content/browser/webrtc/webrtc_media_recorder_browsertest.cc b/content/browser/webrtc/webrtc_media_recorder_browsertest.cc -index 3d815a2..2c96048 100644 ---- a/content/browser/webrtc/webrtc_media_recorder_browsertest.cc -+++ b/content/browser/webrtc/webrtc_media_recorder_browsertest.cc -@@ -58,7 +58,12 @@ - return; - // This flag is also used for encoding, https://crbug.com/616640. - base::CommandLine::ForCurrentProcess()->AppendSwitch( -- switches::kDisableAcceleratedVideoDecode); -+#if defined(OS_LINUX) && !defined(OS_CHROMEOS) -+ switches::kEnableAcceleratedVideo -+#else -+ switches::kDisableAcceleratedVideoDecode -+#endif -+ ); - } - - private: -diff --git a/content/gpu/BUILD.gn b/content/gpu/BUILD.gn -index a5424bb..b68b802 100644 ---- a/content/gpu/BUILD.gn -+++ b/content/gpu/BUILD.gn -@@ -45,7 +45,6 @@ - ] - - configs += [ "//content:content_implementation" ] -- - deps = [ - "//base", - "//base/third_party/dynamic_annotations", -@@ -114,4 +113,8 @@ - if (enable_vulkan) { - deps += [ "//gpu/vulkan" ] - } -+ -+ if (is_desktop_linux) { -+ public_configs = [ "//media/gpu:libva_config" ] -+ } - } -diff --git a/content/gpu/gpu_main.cc b/content/gpu/gpu_main.cc -index 556cf00..730f4ae 100644 ---- a/content/gpu/gpu_main.cc -+++ b/content/gpu/gpu_main.cc -@@ -254,7 +254,7 @@ - // Initializes StatisticsRecorder which tracks UMA histograms. - base::StatisticsRecorder::Initialize(); - --#if defined(OS_ANDROID) || defined(OS_CHROMEOS) -+#if defined(OS_LINUX) - // Set thread priority before sandbox initialization. - base::PlatformThread::SetCurrentThreadPriority(base::ThreadPriority::DISPLAY); - #endif -@@ -283,7 +283,7 @@ - GetContentClient()->SetGpuInfo(gpu_init->gpu_info()); - - base::ThreadPriority io_thread_priority = base::ThreadPriority::NORMAL; --#if defined(OS_ANDROID) || defined(OS_CHROMEOS) -+#if defined(OS_LINUX) - io_thread_priority = base::ThreadPriority::DISPLAY; - #endif - -diff --git a/content/public/browser/gpu_utils.cc b/content/public/browser/gpu_utils.cc -index 6aafb06..d4ddd8d 100644 ---- a/content/public/browser/gpu_utils.cc -+++ b/content/public/browser/gpu_utils.cc -@@ -7,6 +7,7 @@ - #include "base/command_line.h" - #include "base/single_thread_task_runner.h" - #include "base/strings/string_number_conversions.h" -+#include "build/build_config.h" - #include "content/browser/gpu/gpu_process_host.h" - #include "content/public/common/content_features.h" - #include "content/public/common/content_switches.h" -@@ -57,12 +58,19 @@ - gpu_preferences.ui_prioritize_in_gpu_process = - command_line->HasSwitch(switches::kUIPrioritizeInGpuProcess); - gpu_preferences.disable_accelerated_video_decode = -+#if defined(OS_LINUX) && !defined(OS_CHROMEOS) -+ !command_line->HasSwitch(switches::kEnableAcceleratedVideo); -+#else - command_line->HasSwitch(switches::kDisableAcceleratedVideoDecode); --#if defined(OS_CHROMEOS) -+#endif -+#if defined(OS_LINUX) && !defined(OS_CHROMEOS) -+ gpu_preferences.disable_vaapi_accelerated_video_encode = -+ !command_line->HasSwitch(switches::kEnableAcceleratedVideo); -+#elif defined(OS_CHROMEOS) - gpu_preferences.disable_vaapi_accelerated_video_encode = - command_line->HasSwitch(switches::kDisableVaapiAcceleratedVideoEncode); - #endif --#if BUILDFLAG(ENABLE_WEBRTC) -+#if BUILDFLAG(ENABLE_WEBRTC) && (!defined(OS_LINUX) || defined(OS_CHROMEOS)) - gpu_preferences.disable_web_rtc_hw_encoding = - command_line->HasSwitch(switches::kDisableWebRtcHWEncoding); - #endif -diff --git a/content/public/common/content_switches.cc b/content/public/common/content_switches.cc -index 4e699d1..3a7a2b7 100644 ---- a/content/public/common/content_switches.cc -+++ b/content/public/common/content_switches.cc -@@ -89,12 +89,21 @@ - - // Disable gpu-accelerated 2d canvas. - const char kDisableAccelerated2dCanvas[] = "disable-accelerated-2d-canvas"; -- -+#if defined(OS_LINUX) && !defined(OS_CHROMEOS) -+// Enable hardware accelerated mjpeg decode on linux -+const char kEnableAcceleratedMjpegDecode[] = "enable-accelerated-mjpeg-decode"; -+#else - // Disable hardware acceleration of mjpeg decode for captured frame, where - // available. - const char kDisableAcceleratedMjpegDecode[] = - "disable-accelerated-mjpeg-decode"; -+#endif - -+#if defined(OS_LINUX) -+// Enables hardware acceleration of video for Linux only. VA-API driver -+// is required to be present on the system installation. -+const char kEnableAcceleratedVideo[] = "enable-accelerated-video"; -+#endif - // Disables hardware acceleration of video decode, where available. - const char kDisableAcceleratedVideoDecode[] = - "disable-accelerated-video-decode"; -@@ -932,11 +941,13 @@ - // ignores this switch on its stable and beta channels. - const char kDisableWebRtcEncryption[] = "disable-webrtc-encryption"; - -+#if defined(OS_CHROMEOS) - // Disables HW decode acceleration for WebRTC. - const char kDisableWebRtcHWDecoding[] = "disable-webrtc-hw-decoding"; - - // Disables HW encode acceleration for WebRTC. - const char kDisableWebRtcHWEncoding[] = "disable-webrtc-hw-encoding"; -+#endif - - // Enables negotiation of GCM cipher suites from RFC 7714 for SRTP in WebRTC. - // See https://tools.ietf.org/html/rfc7714 for further information. -diff --git a/content/public/common/content_switches.h b/content/public/common/content_switches.h -index 2704924..67d00bb 100644 ---- a/content/public/common/content_switches.h -+++ b/content/public/common/content_switches.h -@@ -35,7 +35,11 @@ - CONTENT_EXPORT extern const char kDisable3DAPIs[]; - CONTENT_EXPORT extern const char kDisableAccelerated2dCanvas[]; - CONTENT_EXPORT extern const char kDisableAcceleratedJpegDecoding[]; -+#if defined(OS_LINUX) && !defined(OS_CHROMEOS) -+CONTENT_EXPORT extern const char kEnableAcceleratedMjpegDecode[]; -+#else - CONTENT_EXPORT extern const char kDisableAcceleratedMjpegDecode[]; -+#endif - CONTENT_EXPORT extern const char kDisableAcceleratedVideoDecode[]; - CONTENT_EXPORT extern const char kDisableAudioSupportForDesktopShare[]; - extern const char kDisableBackingStoreLimit[]; -@@ -109,6 +113,9 @@ - CONTENT_EXPORT extern const char kDomAutomationController[]; - extern const char kDisable2dCanvasClipAntialiasing[]; - CONTENT_EXPORT extern const char kDumpBlinkRuntimeCallStats[]; -+#if defined(OS_LINUX) && !defined(OS_CHROMEOS) && !defined(OS_ANDROID) -+CONTENT_EXPORT extern const char kEnableAcceleratedVideo[]; -+#endif - CONTENT_EXPORT extern const char kEnableAggressiveDOMStorageFlushing[]; - CONTENT_EXPORT extern const char kEnableAutomation[]; - CONTENT_EXPORT extern const char kEnablePreferCompositingToLCDText[]; -@@ -256,8 +263,10 @@ - - #if BUILDFLAG(ENABLE_WEBRTC) - CONTENT_EXPORT extern const char kDisableWebRtcEncryption[]; -+#if defined(OS_CHROMEOS) - CONTENT_EXPORT extern const char kDisableWebRtcHWDecoding[]; - CONTENT_EXPORT extern const char kDisableWebRtcHWEncoding[]; -+#endif - CONTENT_EXPORT extern const char kEnableWebRtcSrtpAesGcm[]; - CONTENT_EXPORT extern const char kEnableWebRtcSrtpEncryptedHeaders[]; - CONTENT_EXPORT extern const char kEnableWebRtcStunOrigin[]; -diff --git a/content/renderer/media/webrtc/peer_connection_dependency_factory.cc b/content/renderer/media/webrtc/peer_connection_dependency_factory.cc -index 017056c..825bdce 100644 ---- a/content/renderer/media/webrtc/peer_connection_dependency_factory.cc -+++ b/content/renderer/media/webrtc/peer_connection_dependency_factory.cc -@@ -239,10 +239,19 @@ - - const base::CommandLine* cmd_line = base::CommandLine::ForCurrentProcess(); - if (gpu_factories && gpu_factories->IsGpuVideoAcceleratorEnabled()) { -+#if defined(OS_LINUX) && !defined(OS_CHROMEOS) -+ if (cmd_line->HasSwitch(switches::kEnableAcceleratedVideo)) -+#else - if (!cmd_line->HasSwitch(switches::kDisableWebRtcHWDecoding)) -+#endif - decoder_factory.reset(new RTCVideoDecoderFactory(gpu_factories)); - -- if (!cmd_line->HasSwitch(switches::kDisableWebRtcHWEncoding)) { -+#if defined(OS_LINUX) && !defined(OS_CHROMEOS) -+ if (cmd_line->HasSwitch(switches::kEnableAcceleratedVideo)) -+#else -+ if (!cmd_line->HasSwitch(switches::kDisableWebRtcHWEncoding)) -+#endif -+ { - encoder_factory.reset(new RTCVideoEncoderFactory(gpu_factories)); - } - } -diff --git a/content/renderer/render_thread_impl.cc b/content/renderer/render_thread_impl.cc -index dc01117..2f9ee03 100644 ---- a/content/renderer/render_thread_impl.cc -+++ b/content/renderer/render_thread_impl.cc -@@ -1456,7 +1456,11 @@ - scoped_refptr media_task_runner = - GetMediaThreadTaskRunner(); - const bool enable_video_accelerator = -+#if defined(OS_LINUX) && !defined(OS_CHROMEOS) -+ cmd_line->HasSwitch(switches::kEnableAcceleratedVideo); -+#else - !cmd_line->HasSwitch(switches::kDisableAcceleratedVideoDecode); -+#endif - const bool enable_gpu_memory_buffer_video_frames = - #if defined(OS_MACOSX) || defined(OS_LINUX) - !cmd_line->HasSwitch(switches::kDisableGpuMemoryBufferVideoFrames) && -diff --git a/gpu/command_buffer/service/gpu_preferences.h b/gpu/command_buffer/service/gpu_preferences.h -index b37c2cc..a721eb7 100644 ---- a/gpu/command_buffer/service/gpu_preferences.h -+++ b/gpu/command_buffer/service/gpu_preferences.h -@@ -50,7 +50,7 @@ - // Disables hardware acceleration of video decode, where available. - bool disable_accelerated_video_decode = false; - --#if defined(OS_CHROMEOS) -+#if defined(OS_CHROMEOS) || defined(OS_LINUX) - // Disables VA-API accelerated video encode. - bool disable_vaapi_accelerated_video_encode = false; - #endif -diff --git a/gpu/config/software_rendering_list.json b/gpu/config/software_rendering_list.json -index 1289a55..22e11e5 100644 ---- a/gpu/config/software_rendering_list.json -+++ b/gpu/config/software_rendering_list.json -@@ -374,17 +374,6 @@ - ] - }, - { -- "id": 48, -- "description": "Accelerated video decode is unavailable on Linux", -- "cr_bugs": [137247], -- "os": { -- "type": "linux" -- }, -- "features": [ -- "accelerated_video_decode" -- ] -- }, -- { - "id": 50, - "description": "Disable VMware software renderer on older Mesa", - "cr_bugs": [145531, 332596, 571899, 629434], -diff --git a/media/filters/BUILD.gn b/media/filters/BUILD.gn -index 490722c..1cda2fb 100644 ---- a/media/filters/BUILD.gn -+++ b/media/filters/BUILD.gn -@@ -189,7 +189,7 @@ - deps += [ "//media/base/android" ] - } - -- if (current_cpu != "arm" && is_chromeos) { -+ if (current_cpu != "arm" && (is_chromeos || is_desktop_linux)) { - sources += [ - "h264_bitstream_buffer.cc", - "h264_bitstream_buffer.h", -diff --git a/media/gpu/BUILD.gn b/media/gpu/BUILD.gn -index 729c6fa..4878251 100644 ---- a/media/gpu/BUILD.gn -+++ b/media/gpu/BUILD.gn -@@ -24,6 +24,14 @@ - import("//build/config/mac/mac_sdk.gni") - } - -+if (is_desktop_linux && use_vaapi) { -+ import("//build/config/linux/pkg_config.gni") -+ -+ pkg_config("libva_config") { -+ packages = [ "libva" ] -+ } -+} -+ - if (use_vaapi) { - action("libva_generate_stubs") { - extra_header = "va_stub_header.fragment" -@@ -334,6 +342,9 @@ - "vaapi_drm_picture.h", - ] - } -+ if (is_desktop_linux) { -+ public_configs = [ ":libva_config" ] -+ } - } - - if (is_win) { -diff --git a/media/gpu/gpu_video_decode_accelerator_factory.cc b/media/gpu/gpu_video_decode_accelerator_factory.cc -index 2cee490..de02414 100644 ---- a/media/gpu/gpu_video_decode_accelerator_factory.cc -+++ b/media/gpu/gpu_video_decode_accelerator_factory.cc -@@ -87,6 +87,7 @@ - // profile (instead of calculating a superset). - // TODO(posciak,henryhsu): improve this so that we choose a superset of - // resolutions and other supported profile parameters. -+ DVLOG(1) << "Get Supported profiles"; - #if defined(OS_WIN) - capabilities.supported_profiles = - DXVAVideoDecodeAccelerator::GetSupportedProfiles(gpu_preferences, -diff --git a/media/gpu/vaapi_wrapper.cc b/media/gpu/vaapi_wrapper.cc -index 1e72893..6495642 100644 ---- a/media/gpu/vaapi_wrapper.cc -+++ b/media/gpu/vaapi_wrapper.cc -@@ -1117,6 +1117,7 @@ - if (drm_file.IsValid()) - GetDisplayState()->SetDrmFd(drm_file.GetPlatformFile()); - #endif -+ GetProfileInfos(); // dlopen all necessary libraries - } - - // static diff --git a/packages/addons/browser/chromium/patches/chromium-0005-define-toolchains.patch b/packages/addons/browser/chromium/patches/chromium-0005-define-toolchains.patch deleted file mode 100644 index b512277a4f..0000000000 --- a/packages/addons/browser/chromium/patches/chromium-0005-define-toolchains.patch +++ /dev/null @@ -1,48 +0,0 @@ ---- a/build/toolchain/linux/BUILD.gn 2017-08-30 14:08:06.342205027 +0200 -+++ b/build/toolchain/linux/BUILD.gn 2017-08-30 14:15:18.648503216 +0200 -@@ -129,12 +129,13 @@ - } - - gcc_toolchain("x64") { -- cc = "gcc" -- cxx = "g++" -+ toolchainprefix = "x86_64-libreelec-linux-gnu-" -+ cc = "${toolchainprefix}gcc" -+ cxx = "${toolchainprefix}g++" - -- readelf = "readelf" -- nm = "nm" -- ar = "ar" -+ readelf = "${toolchainprefix}readelf" -+ nm = "${toolchainprefix}nm" -+ ar = "${toolchainprefix}ar" - ld = cxx - - # Output linker map files for binary size analysis. -@@ -147,6 +148,26 @@ - } - } - -+gcc_toolchain("x64_host") { -+ toolchainprefix = "host-" -+ cc = "${toolchainprefix}gcc" -+ cxx = "${toolchainprefix}g++" -+ -+ readelf = "readelf" -+ nm = "nm" -+ ar = "ar" -+ ld = cxx -+ -+ # Output linker map files for binary size analysis. -+ enable_linker_map = true -+ -+ toolchain_args = { -+ current_cpu = "x64" -+ current_os = "linux" -+ is_clang = false -+ } -+} -+ - clang_toolchain("clang_mipsel") { - toolchain_args = { - current_cpu = "mipsel" diff --git a/packages/addons/browser/chromium/patches/chromium-0006-exclude_unwind_tables.patch b/packages/addons/browser/chromium/patches/chromium-0006-exclude_unwind_tables.patch deleted file mode 100644 index 67232595dd..0000000000 --- a/packages/addons/browser/chromium/patches/chromium-0006-exclude_unwind_tables.patch +++ /dev/null @@ -1,44 +0,0 @@ -From 1fc37227522ccd314f82ec893ed15c6129296604 Mon Sep 17 00:00:00 2001 -From: Paul Jensen -Date: Wed, 11 Oct 2017 08:37:34 -0400 -Subject: [PATCH] Move exclude_unwind_tables back into declare_args - -There is desire to adjust this flag manually. - -BUG=762629 -R=thakis@chromium.org - -Change-Id: I3bd134c19270cd1f729b3ea078674e734493d4ab ---- - -diff --git a/build/config/compiler/compiler.gni b/build/config/compiler/compiler.gni -index ad40fd9..50e19a4 100644 ---- a/build/config/compiler/compiler.gni -+++ b/build/config/compiler/compiler.gni -@@ -68,18 +68,18 @@ - - # Whether or not we should use position independent code. - use_pic = true -+ -+ # Exclude unwind tables for official builds as unwinding can be done from -+ # stack dumps produced by Crashpad at a later time "offline" in the crash -+ # server. For unofficial (e.g. development) builds and non-Chrome branded -+ # (e.g. Cronet which doesn't use Crashpad, crbug.com/479283) builds it's -+ # useful to be able to unwind at runtime. -+ exclude_unwind_tables = (is_chrome_branded && is_official_build) || -+ (is_chromecast && !is_cast_desktop_build && !is_debug) - } - - assert(!is_cfi || use_thin_lto, "CFI requires ThinLTO") - --# Exclude unwind tables for official builds as unwinding can be done from stack --# dumps produced by Crashpad at a later time "offline" in the crash server. --# For unofficial (e.g. development) builds and non-Chrome branded (e.g. Cronet --# which doesn't use Crashpad, crbug.com/479283) builds it's useful to be able --# to unwind at runtime. --exclude_unwind_tables = (is_chrome_branded && is_official_build) || -- (is_chromecast && !is_cast_desktop_build && !is_debug) -- - # If true, optimize for size. Does not affect windows builds. - # Linux & Mac favor speed over size. - # TODO(brettw) it's weird that Mac and desktop Linux are different. We should diff --git a/packages/addons/browser/chromium/patches/chromium-0007-dont-link-atomic-in-gn.patch b/packages/addons/browser/chromium/patches/chromium-0007-dont-link-atomic-in-gn.patch deleted file mode 100644 index b271dc7379..0000000000 --- a/packages/addons/browser/chromium/patches/chromium-0007-dont-link-atomic-in-gn.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff -Naur a/tools/gn/bootstrap/bootstrap.py b/tools/gn/bootstrap/bootstrap.py ---- a/tools/gn/bootstrap/bootstrap.py 2017-08-10 17:18:53.767165155 +0200 -+++ b/tools/gn/bootstrap/bootstrap.py 2017-08-10 17:23:28.668750638 +0200 -@@ -657,7 +657,7 @@ - 'base/allocator/allocator_shim.cc', - 'base/allocator/allocator_shim_default_dispatch_to_glibc.cc', - ]) -- libs.extend(['-lrt', '-latomic']) -+ libs.extend(['-lrt']) - static_libraries['libevent']['include_dirs'].extend([ - os.path.join(SRC_ROOT, 'base', 'third_party', 'libevent', 'linux') - ]) diff --git a/packages/addons/browser/chromium/patches/chromium-0008-fix-webrtc.patch b/packages/addons/browser/chromium/patches/chromium-0008-fix-webrtc.patch deleted file mode 100644 index 7b70999719..0000000000 --- a/packages/addons/browser/chromium/patches/chromium-0008-fix-webrtc.patch +++ /dev/null @@ -1,10 +0,0 @@ ---- chromium-63.0.3239.84//third_party/webrtc/p2p/base/port.cc.org 2017-12-09 01:53:55.490672425 +0100 -+++ chromium-63.0.3239.84//third_party/webrtc/p2p/base/port.cc 2017-12-09 01:54:10.826751406 +0100 -@@ -12,6 +12,7 @@ - - #include - #include -+#include - - #include "p2p/base/common.h" - #include "p2p/base/portallocator.h" diff --git a/packages/addons/browser/chromium/patches/chromium-0009-fix-gtk_ui.patch b/packages/addons/browser/chromium/patches/chromium-0009-fix-gtk_ui.patch deleted file mode 100644 index edd53b2b02..0000000000 --- a/packages/addons/browser/chromium/patches/chromium-0009-fix-gtk_ui.patch +++ /dev/null @@ -1,10 +0,0 @@ ---- a/chrome/browser/ui/libgtkui/gtk_ui.h 2017-10-19 00:15:47.451704332 +0200 -+++ b/chrome/browser/ui/libgtkui/gtk_ui.h 2017-10-18 23:53:19.328373980 +0200 -@@ -14,6 +14,7 @@ - #include "base/observer_list.h" - #include "chrome/browser/ui/libgtkui/gtk_signal.h" - #include "chrome/browser/ui/libgtkui/libgtkui_export.h" -+#include "chrome/browser/ui/libgtkui/nav_button_layout_manager.h" - #include "ui/gfx/color_utils.h" - #include "ui/views/linux_ui/linux_ui.h" - #include "ui/views/window/frame_buttons.h" diff --git a/packages/addons/browser/chromium/patches/chromium-0010-fix-gcc.patch b/packages/addons/browser/chromium/patches/chromium-0010-fix-gcc.patch deleted file mode 100644 index 0101dfa03a..0000000000 --- a/packages/addons/browser/chromium/patches/chromium-0010-fix-gcc.patch +++ /dev/null @@ -1,16 +0,0 @@ -Source: https://aur.archlinux.org/packages/chromium-vaapi/ chromium-gcc-r1.patch - -diff --git a/base/numerics/safe_math_shared_impl.h b/base/numerics/safe_math_shared_impl.h -index 99f230ce7e9a..de2415d402f5 100644 ---- a/base/numerics/safe_math_shared_impl.h -+++ b/base/numerics/safe_math_shared_impl.h -@@ -21,8 +21,7 @@ - #if !defined(__native_client__) && \ - ((defined(__clang__) && \ - ((__clang_major__ > 3) || \ -- (__clang_major__ == 3 && __clang_minor__ >= 4))) || \ -- (defined(__GNUC__) && __GNUC__ >= 5)) -+ (__clang_major__ == 3 && __clang_minor__ >= 4)))) - #include "base/numerics/safe_math_clang_gcc_impl.h" - #define BASE_HAS_OPTIMIZED_SAFE_MATH (1) - #else diff --git a/packages/addons/browser/chromium/source/bin/chromium b/packages/addons/browser/chromium/source/bin/chromium deleted file mode 100644 index 74f59d8f38..0000000000 --- a/packages/addons/browser/chromium/source/bin/chromium +++ /dev/null @@ -1,106 +0,0 @@ -#!/bin/sh -################################################################################ -# This file is part of OpenELEC - http://www.openelec.tv -# Copyright (C) 2009-2014 Stephan Raue (stephan@openelec.tv) -# -# OpenELEC is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 2 of the License, or -# (at your option) any later version. -# -# OpenELEC is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with OpenELEC. If not, see . -################################################################################ -. /etc/profile -oe_setup_addon browser.chromium -if [ -e $ADDON_HOME/env ] -then - . $ADDON_HOME/env -fi - -# drop profile for testing only -#rm -rf /storage/.kodi/userdata/addon_data/browser.chromium/profile - -# fix file permissons (zip packaging) -chmod +x $ADDON_DIR/bin/chromium $ADDON_DIR/bin/chromium.bin -chmod 4755 $ADDON_DIR/bin/chrome-sandbox - -# make sure we use "own" gtk/pango/nss/etc -export LD_LIBRARY_PATH=$ADDON_DIR/lib - -# configure pango/pixbuf -export PANGO_RC_FILE=$ADDON_DIR/config/pangorc -export GDK_PIXBUF_MODULE_FILE=$ADDON_DIR/config/pixbuf.loaders.cache - -# font rendering in gtk widgets is brokeen with nvidia blob. use our Xdefaults -export XENVIRONMENT=$ADDON_DIR/config/Xdefaults - -# start unclutter -if [ "$HIDE_CURSOR" == "true" ] -then - unclutter & - UNCLUTTER_PID=$! -fi - -# vaapi -LIBVA_DRIVERS_PATH="/usr/lib/dri:$ADDON_DIR/lib" -LIBVA_DRIVER_NAME='' -case $VAAPI_MODE in - 'intel') - LIBVA_DRIVER_NAME='i965' - CHROMIUM_OPTS="$CHROMIUM_OPTS --enable-accelerated-video" - ;; - 'amd') - LIBVA_DRIVER_NAME='vdpau' - CHROMIUM_OPTS="$CHROMIUM_OPTS --enable-accelerated-video" - ;; - 'nvidia') - LIBVA_DRIVER_NAME='vdpau' - CHROMIUM_OPTS="$CHROMIUM_OPTS --enable-accelerated-video --allow-no-sandbox-job --disable-gpu-sandbox" - ;; - *) - LIBGL_ALWAYS_SOFTWARE='1' - export LIBGL_ALWAYS_SOFTWARE -esac -export LIBVA_DRIVER_NAME LIBVA_DRIVERS_PATH - -# windowed -case $WINDOW_MODE in - 'maximized') CHROMIUM_OPTS="$CHROMIUM_OPTS --start-maximized";; - 'kiosk') CHROMIUM_OPTS="$CHROMIUM_OPTS --kiosk";; -esac - -# rasterization -case $RASTER_MODE in - 'off') CHROMIUM_OPTS="$CHROMIUM_OPTS --disable-accelerated-2d-canvas --disable-gpu-compositing";; - 'force') CHROMIUM_OPTS="$CHROMIUM_OPTS --enable-gpu-rasterization --enable-accelerated-2d-canvas --ignore-gpu-blacklist";; -esac - -# flash -if [ -e $ADDON_DIR/PepperFlash/libpepflashplayer.so ]; then - CHROMIUM_OPTS="$CHROMIUM_OPTS --ppapi-flash-path=$ADDON_DIR/PepperFlash/libpepflashplayer.so" -fi - -# alsa -if [ ! -z $ALSA_DEVICE ]; then - CHROMIUM_OPTS="$CHROMIUM_OPTS --alsa-output-device=$ALSA_DEVICE" -fi - -# start chromium -LD_PRELOAD=/usr/lib/libGL.so $ADDON_DIR/bin/chromium.bin \ - $CHROMIUM_OPTS \ - --no-sandbox \ - --user-data-dir=$ADDON_HOME/profile \ - --test-type $@ \ - 2>&1 | tee $ADDON_LOG_FILE - -# kill unclutter -if [ "$HIDE_CURSOR" == "true" ] -then - kill $UNCLUTTER_PID -fi diff --git a/packages/addons/browser/chromium/source/default.py b/packages/addons/browser/chromium/source/default.py deleted file mode 100644 index 02bb7f9bc8..0000000000 --- a/packages/addons/browser/chromium/source/default.py +++ /dev/null @@ -1,163 +0,0 @@ -################################################################################ -# This file is part of OpenELEC - http://www.openelec.tv -# Copyright (C) 2009-2012 Stephan Raue (stephan@openelec.tv) -# -# This Program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. -# -# This Program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with OpenELEC.tv; see the file COPYING. If not, write to -# the Free Software Foundation, 51 Franklin Street, Suite 500, Boston, MA 02110, USA. -# http://www.gnu.org/copyleft/gpl.html -################################################################################ - -import os -import sys -import time -import xbmcaddon -import subprocess -from xml.dom.minidom import parse - -sys.path.append('/usr/share/kodi/addons/service.libreelec.settings') - -import oe - -__addon__ = xbmcaddon.Addon(); -__path__ = os.path.join(__addon__.getAddonInfo('path'), 'bin') + '/' - -pauseXBMC = __addon__.getSetting("PAUSE_XBMC") - -# widevine and flash stuff -def install_flash(): - __url__ = 'https://fpdownload.adobe.com/pub/flashplayer/pdc/24.0.0.186/flash_player_ppapi_linux.x86_64.tar.gz' - __file__ = __url__.split('/')[-1] - __tmp__ = '/tmp/pepperflash/' - __lib__ = 'libpepflashplayer.so' - try: - if not os.path.isdir(__tmp__): - os.mkdir(__tmp__) - if not os.path.exists(__tmp__ + __file__): - oe.download_file(__url__, __tmp__ + __file__) - if not os.path.exists(__tmp__ + __file__): - oe.notify('Chromium', 'Could not download file') - else: - oe.notify('Chromium', 'Extracting libpepflashplayer.so') - if not os.path.isdir(__tmp__ + __file__): - oe.execute('tar zxf ' + __tmp__ + __file__ + ' -C ' + __tmp__ + '') - if not os.path.isdir(__path__ + 'PepperFlash'): - os.mkdir(__path__ + 'PepperFlash') - oe.copy_file(__tmp__ + __lib__, __path__ + 'PepperFlash/' + __lib__) - oe.notify('Chromium', 'Installation of libpepflashplayer.so succeeded') - except Exception, e: - oe.notify('Chromium', 'Installation of libpepflashplayer.so failed') - -def install_widevine(): - __url__ = 'https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb' - __file__ = __url__.split('/')[-1] - __tar__ = 'data.tar.xz' - __tmp__ = '/tmp/widevine/' - __lib__ = 'opt/google/chrome/libwidevinecdm.so' - try: - if not os.path.isdir(__tmp__): - os.mkdir(__tmp__) - if not os.path.exists(__tmp__ + __file__): - oe.download_file(__url__, __tmp__ + __file__) - if not os.path.exists(__tmp__ + __file__): - oe.notify('Chromium', 'Could not download file') - else: - oe.notify('Chromium', 'Extracting libwidevinecdm.so') - if not os.path.isdir(__tmp__ + __tar__): - oe.execute('cd ' + __tmp__ + ' && ar -x ' + __file__) - oe.execute('tar xf ' + __tmp__ + __tar__ + ' -C ' + __tmp__ + ' ./' + __lib__) - oe.copy_file(__tmp__ + __lib__, __path__ + __lib__.split('/')[-1]) - oe.notify('Chromium', 'Installation of libwidevinecdm.so succeeded') - except Exception, e: - oe.notify('Chromium', 'Installation of libwidevinecdm.so failed') - -def pauseXbmc(): - if pauseXBMC == "true": - xbmc.executebuiltin("PlayerControl(Stop)") - xbmc.audioSuspend() - xbmc.enableNavSounds(False) - -def resumeXbmc(): - if pauseXBMC == "true": - xbmc.audioResume() - xbmc.enableNavSounds(True) - -def startChromium(args): - try: - new_env = os.environ.copy() - new_env['VAAPI_MODE'] = __addon__.getSetting('VAAPI_MODE') - new_env['WINDOW_MODE'] = __addon__.getSetting('WINDOW_MODE') - new_env['RASTER_MODE'] = __addon__.getSetting('RASTER_MODE') - - new_env['ALSA_DEVICE'] = '' - if __addon__.getSetting('USE_CUST_AUDIODEVICE') == 'true': - alsa_device = __addon__.getSetting('CUST_AUDIODEVICE_STR') - else: - alsa_device = getAudioDevice() - if not alsa_device == None and not alsa_device == '': - new_env['ALSA_DEVICE'] = alsa_device - - chrome_params = args + ' ' + \ - __addon__.getSetting('HOMEPAGE') - subprocess.call(__path__ + 'chromium ' + chrome_params, shell=True, env=new_env) - except Exception, e: - oe.dbg_log('chromium', unicode(e)) - -def isRuning(pname): - tmp = os.popen("ps -Af").read() - pcount = tmp.count(pname) - if pcount > 0: - return True - return False - -def getAudioDevice(): - try: - dom = parse("/storage/.kodi/userdata/guisettings.xml") - audiooutput=dom.getElementsByTagName('audiooutput') - for node in audiooutput: - dev = node.getElementsByTagName('audiodevice')[0].childNodes[0].nodeValue - if dev.startswith("ALSA:"): - dev = dev.split("ALSA:")[1] - if dev == "@": - return None - if dev.startswith("@:"): - dev = dev.split("@:")[1] - else: - # not ALSA - return None - except: - return None - if dev.startswith("CARD="): - dev = "plughw:" + dev - return dev - -if (not __addon__.getSetting("firstrun")): - __addon__.setSetting("firstrun", "1") - __addon__.openSettings() - -try: - args = ' '.join(sys.argv[1:]) -except: - args = "" - -if args == 'widevine': - install_widevine() -elif args == 'flash': - install_flash() -else: - if not isRuning('chromium.bin'): - pauseXbmc() - startChromium(args) - while isRuning('chromium.bin'): - time.sleep(1) - resumeXbmc() diff --git a/packages/addons/browser/chromium/source/resources/language/English/strings.xml b/packages/addons/browser/chromium/source/resources/language/English/strings.xml deleted file mode 100644 index c3837d366d..0000000000 --- a/packages/addons/browser/chromium/source/resources/language/English/strings.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - General - Actions - Chromium Configuration - Stop Kodi Player and Suspend AudioEngine - HW Acceleration Mode - Rasterization Mode - Window Mode - Default Homepage - Use Custom Audio Device - Audio Device - Hide Cursor - Chromium Actions - Install libwidevinecdm.so (Netflix Support) - Install libpepflashplayer.so (Flash Player Support) - diff --git a/packages/addons/browser/chromium/source/resources/settings.xml b/packages/addons/browser/chromium/source/resources/settings.xml deleted file mode 100644 index 75c56dbba7..0000000000 --- a/packages/addons/browser/chromium/source/resources/settings.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - - - - - - - - - - - - - - -