chromium: Add WideVine content decryption plugin.

Seems to be needed in order to view Netflix content, but this only pulls
in the proprietary plugin and doesn't yet compile Chromium with support
for it, so this is only in preparation for the bright and shiny future
(where we all have rootkits implanted in our body).

Of course, this plugin is disabled by default as well as all the other
proprietary plugins.

For the plugin derivation, we now do the checkPhase _after_ the
installPhase, to make sure we also detect RPATHs pointing to the plugin
directory itself, because the shared object files only exist after the
installPhase.

Signed-off-by: aszlig <aszlig@redmoonstudios.org>
This commit is contained in:
aszlig 2014-09-30 06:00:47 +02:00
parent b159458c34
commit d3a7c50364
No known key found for this signature in database
GPG Key ID: D0EBD0EC8C2DC961
2 changed files with 29 additions and 6 deletions

View File

@ -10,6 +10,7 @@
, proprietaryCodecs ? true , proprietaryCodecs ? true
, enablePepperFlash ? false , enablePepperFlash ? false
, enablePepperPDF ? false , enablePepperPDF ? false
, enableWideVine ? false
, cupsSupport ? false , cupsSupport ? false
, pulseSupport ? false , pulseSupport ? false
, hiDPISupport ? false , hiDPISupport ? false
@ -35,7 +36,7 @@ let
sandbox = callPackage ./sandbox.nix { }; sandbox = callPackage ./sandbox.nix { };
plugins = callPackage ./plugins.nix { plugins = callPackage ./plugins.nix {
inherit enablePepperFlash enablePepperPDF; inherit enablePepperFlash enablePepperPDF enableWideVine;
}; };
}; };

View File

@ -1,6 +1,7 @@
{ stdenv { stdenv
, enablePepperFlash ? false , enablePepperFlash ? false
, enablePepperPDF ? false , enablePepperPDF ? false
, enableWideVine ? false
, source , source
}: }:
@ -14,8 +15,8 @@ let
# XXX: Only temporary and has to be version-specific # XXX: Only temporary and has to be version-specific
src = source.plugins; src = source.plugins;
phases = [ "unpackPhase" "patchPhase" "checkPhase" "installPhase" ]; phases = [ "unpackPhase" "patchPhase" "installPhase" "checkPhase" ];
outputs = [ "pdf" "flash" ]; outputs = [ "pdf" "flash" "widevine" ];
unpackCmd = let unpackCmd = let
chan = if source.channel == "dev" then "chrome-unstable" chan = if source.channel == "dev" then "chrome-unstable"
@ -25,7 +26,9 @@ let
mkdir -p plugins mkdir -p plugins
ar p "$src" data.tar.lzma | tar xJ -C plugins --strip-components=4 \ ar p "$src" data.tar.lzma | tar xJ -C plugins --strip-components=4 \
./opt/google/${chan}/PepperFlash \ ./opt/google/${chan}/PepperFlash \
./opt/google/${chan}/libpdf.so ./opt/google/${chan}/libpdf.so \
./opt/google/${chan}/libwidevinecdm.so \
./opt/google/${chan}/libwidevinecdmadapter.so
''; '';
doCheck = true; doCheck = true;
@ -37,10 +40,14 @@ let
rpaths = [ stdenv.gcc.gcc ]; rpaths = [ stdenv.gcc.gcc ];
mkrpath = p: "${makeSearchPath "lib64" p}:${makeSearchPath "lib" p}"; mkrpath = p: "${makeSearchPath "lib64" p}:${makeSearchPath "lib" p}";
in '' in ''
for sofile in PepperFlash/libpepflashplayer.so libpdf.so; do for sofile in PepperFlash/libpepflashplayer.so libpdf.so \
libwidevinecdm.so libwidevinecdmadapter.so; do
chmod +x "$sofile" chmod +x "$sofile"
patchelf --set-rpath "${mkrpath rpaths}" "$sofile" patchelf --set-rpath "${mkrpath rpaths}" "$sofile"
done done
patchelf --set-rpath "$widevine/lib:${mkrpath rpaths}" \
libwidevinecdmadapter.so
''; '';
installPhase = let installPhase = let
@ -51,6 +58,12 @@ let
"application/x-google-chrome-print-preview-pdf" "application/x-google-chrome-print-preview-pdf"
]; ];
pdfInfo = "#${pdfName}#${pdfDescription};${pdfMimeTypes}"; pdfInfo = "#${pdfName}#${pdfDescription};${pdfMimeTypes}";
wvName = "Widevine Content Decryption Module";
wvDescription = "Playback of encrypted HTML audio/video content";
wvMimeTypes = "application/x-ppapi-widevine-cdm";
wvModule = "$widevine/lib/libwidevinecdmadapter.so";
wvInfo = "#${wvName}#${wvDescription}:${wvMimeTypes}";
in '' in ''
install -vD libpdf.so "$pdf/lib/libpdf.so" install -vD libpdf.so "$pdf/lib/libpdf.so"
mkdir -p "$pdf/nix-support" mkdir -p "$pdf/nix-support"
@ -67,11 +80,20 @@ let
echo "--ppapi-flash-path='$flash/lib/libpepflashplayer.so'" \ echo "--ppapi-flash-path='$flash/lib/libpepflashplayer.so'" \
"--ppapi-flash-version=$flashVersion" \ "--ppapi-flash-version=$flashVersion" \
> "$flash/nix-support/chromium-flags" > "$flash/nix-support/chromium-flags"
install -vD libwidevinecdm.so \
"$widevine/lib/libwidevinecdm.so"
install -vD libwidevinecdmadapter.so \
"$widevine/lib/libwidevinecdmadapter.so"
mkdir -p "$widevine/nix-support"
echo "--register-pepper-plugins='${wvModule}${wvInfo}'" \
> "$widevine/nix-support/chromium-flags"
''; '';
passthru.flagsEnabled = let passthru.flagsEnabled = let
enabledPlugins = optional enablePepperFlash plugins.flash enabledPlugins = optional enablePepperFlash plugins.flash
++ optional enablePepperPDF plugins.pdf; ++ optional enablePepperPDF plugins.pdf
++ optional enableWideVine plugins.widevine;
getFlags = plugin: "$(< ${plugin}/nix-support/chromium-flags)"; getFlags = plugin: "$(< ${plugin}/nix-support/chromium-flags)";
in concatStringsSep " " (map getFlags enabledPlugins); in concatStringsSep " " (map getFlags enabledPlugins);
}; };