chromium: Allow env vars for passing plugin paths.
Introduces environment variables to set plugin base paths. The schema for these is like NIX_CHROMIUM_PLUGIN_PATH_<N>. Where <N> is the path type we want to change, the supported (full) variable names are: * NIX_CHROMIUM_PLUGIN_PATH_ALL * NIX_CHROMIUM_PLUGIN_PATH_PEPPERFLASH * NIX_CHROMIUM_PLUGIN_PATH_FILEFLASH * NIX_CHROMIUM_PLUGIN_PATH_PDF * NIX_CHROMIUM_PLUGIN_PATH_FILE_EFFECTS * NIX_CHROMIUM_PLUGIN_PATH_NACL * NIX_CHROMIUM_PLUGIN_PATH_PNACL * NIX_CHROMIUM_PLUGIN_PATH_WIDEVINE Whereas NIX_CHROMIUM_PLUGIN_PATH_ALL is the plugin base path for every path which is not set explicitly, so by setting ..._ALL and not setting ..._WIDEVINE, the widevine plugin will be searched in the directory specified using ..._ALL. Right now, the only plugin where this is used is widevine, and it still doesn't properly work yet. Signed-off-by: aszlig <aszlig@redmoonstudios.org>
This commit is contained in:
parent
2495e819aa
commit
1b84fbf0ca
@ -74,6 +74,7 @@ in stdenv.mkDerivation {
|
|||||||
ln -s "${chromium.browser}/share" "$out/share"
|
ln -s "${chromium.browser}/share" "$out/share"
|
||||||
makeWrapper "${browserBinary}" "$out/bin/chromium" \
|
makeWrapper "${browserBinary}" "$out/bin/chromium" \
|
||||||
--set CHROMIUM_SANDBOX_BINARY_PATH "${sandboxBinary}" \
|
--set CHROMIUM_SANDBOX_BINARY_PATH "${sandboxBinary}" \
|
||||||
|
--run "export ${chromium.plugins.envVarsEnabled}" \
|
||||||
--add-flags "${chromium.plugins.flagsEnabled}"
|
--add-flags "${chromium.plugins.flagsEnabled}"
|
||||||
|
|
||||||
ln -s "$out/bin/chromium" "$out/bin/chromium-browser"
|
ln -s "$out/bin/chromium" "$out/bin/chromium-browser"
|
||||||
|
@ -88,13 +88,19 @@ let
|
|||||||
mkdir -p "$widevine/nix-support"
|
mkdir -p "$widevine/nix-support"
|
||||||
echo "--register-pepper-plugins='${wvModule}${wvInfo}'" \
|
echo "--register-pepper-plugins='${wvModule}${wvInfo}'" \
|
||||||
> "$widevine/nix-support/chromium-flags"
|
> "$widevine/nix-support/chromium-flags"
|
||||||
|
echo "NIX_CHROMIUM_PLUGIN_PATH_WIDEVINE=$widevine/lib" \
|
||||||
|
> "$widevine/nix-support/chromium-env-vars"
|
||||||
'';
|
'';
|
||||||
|
|
||||||
passthru.flagsEnabled = let
|
passthru = let
|
||||||
enabledPlugins = optional enablePepperFlash plugins.flash
|
enabledPlugins = optional enablePepperFlash plugins.flash
|
||||||
++ optional enablePepperPDF plugins.pdf
|
++ optional enablePepperPDF plugins.pdf
|
||||||
++ optional enableWideVine plugins.widevine;
|
++ optional enableWideVine plugins.widevine;
|
||||||
getFlags = plugin: "$(< ${plugin}/nix-support/chromium-flags)";
|
getFlags = plugin: "$(< ${plugin}/nix-support/chromium-flags)";
|
||||||
in concatStringsSep " " (map getFlags enabledPlugins);
|
getEnvVars = plugin: "$(< ${plugin}/nix-support/chromium-env-vars)";
|
||||||
|
in {
|
||||||
|
flagsEnabled = concatStringsSep " " (map getFlags enabledPlugins);
|
||||||
|
envVarsEnabled = concatStringsSep " " (map getEnvVars enabledPlugins);
|
||||||
|
};
|
||||||
};
|
};
|
||||||
in plugins
|
in plugins
|
||||||
|
@ -22,7 +22,7 @@ stdenv.mkDerivation {
|
|||||||
|
|
||||||
prePatch = "patchShebangs .";
|
prePatch = "patchShebangs .";
|
||||||
|
|
||||||
patches = [ ./sandbox_userns_36.patch ];
|
patches = [ ./sandbox_userns_36.patch ./nix_plugin_paths.patch ];
|
||||||
|
|
||||||
postPatch = ''
|
postPatch = ''
|
||||||
sed -i -r \
|
sed -i -r \
|
||||||
|
@ -0,0 +1,99 @@
|
|||||||
|
diff --git a/chrome/common/chrome_paths.cc b/chrome/common/chrome_paths.cc
|
||||||
|
index 8a205a6..d5c24e1 100644
|
||||||
|
--- a/chrome/common/chrome_paths.cc
|
||||||
|
+++ b/chrome/common/chrome_paths.cc
|
||||||
|
@@ -97,21 +97,14 @@ static base::LazyInstance<base::FilePath>
|
||||||
|
g_invalid_specified_user_data_dir = LAZY_INSTANCE_INITIALIZER;
|
||||||
|
|
||||||
|
// Gets the path for internal plugins.
|
||||||
|
-bool GetInternalPluginsDirectory(base::FilePath* result) {
|
||||||
|
-#if defined(OS_MACOSX) && !defined(OS_IOS)
|
||||||
|
- // If called from Chrome, get internal plugins from a subdirectory of the
|
||||||
|
- // framework.
|
||||||
|
- if (base::mac::AmIBundled()) {
|
||||||
|
- *result = chrome::GetFrameworkBundlePath();
|
||||||
|
- DCHECK(!result->empty());
|
||||||
|
- *result = result->Append("Internet Plug-Ins");
|
||||||
|
- return true;
|
||||||
|
- }
|
||||||
|
- // In tests, just look in the module directory (below).
|
||||||
|
-#endif
|
||||||
|
-
|
||||||
|
- // The rest of the world expects plugins in the module directory.
|
||||||
|
- return PathService::Get(base::DIR_MODULE, result);
|
||||||
|
+bool GetInternalPluginsDirectory(base::FilePath* result,
|
||||||
|
+ const std::string& ident) {
|
||||||
|
+ std::string full_env = std::string("NIX_CHROMIUM_PLUGIN_PATH_") + ident;
|
||||||
|
+ const char* value = getenv(full_env.c_str());
|
||||||
|
+ if (value == NULL)
|
||||||
|
+ return PathService::Get(base::DIR_MODULE, result);
|
||||||
|
+ else
|
||||||
|
+ *result = base::FilePath(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace
|
||||||
|
@@ -248,11 +241,11 @@ bool PathProvider(int key, base::FilePath* result) {
|
||||||
|
create_dir = true;
|
||||||
|
break;
|
||||||
|
case chrome::DIR_INTERNAL_PLUGINS:
|
||||||
|
- if (!GetInternalPluginsDirectory(&cur))
|
||||||
|
+ if (!GetInternalPluginsDirectory(&cur, "ALL"))
|
||||||
|
return false;
|
||||||
|
break;
|
||||||
|
case chrome::DIR_PEPPER_FLASH_PLUGIN:
|
||||||
|
- if (!GetInternalPluginsDirectory(&cur))
|
||||||
|
+ if (!GetInternalPluginsDirectory(&cur, "PEPPERFLASH"))
|
||||||
|
return false;
|
||||||
|
cur = cur.Append(kPepperFlashBaseDirectory);
|
||||||
|
break;
|
||||||
|
@@ -285,7 +278,7 @@ bool PathProvider(int key, base::FilePath* result) {
|
||||||
|
cur = cur.Append(FILE_PATH_LITERAL("script.log"));
|
||||||
|
break;
|
||||||
|
case chrome::FILE_FLASH_PLUGIN:
|
||||||
|
- if (!GetInternalPluginsDirectory(&cur))
|
||||||
|
+ if (!GetInternalPluginsDirectory(&cur, "FILEFLASH"))
|
||||||
|
return false;
|
||||||
|
cur = cur.Append(kInternalFlashPluginFileName);
|
||||||
|
break;
|
||||||
|
@@ -295,12 +288,12 @@ bool PathProvider(int key, base::FilePath* result) {
|
||||||
|
cur = cur.Append(chrome::kPepperFlashPluginFilename);
|
||||||
|
break;
|
||||||
|
case chrome::FILE_PDF_PLUGIN:
|
||||||
|
- if (!GetInternalPluginsDirectory(&cur))
|
||||||
|
+ if (!GetInternalPluginsDirectory(&cur, "PDF"))
|
||||||
|
return false;
|
||||||
|
cur = cur.Append(kInternalPDFPluginFileName);
|
||||||
|
break;
|
||||||
|
case chrome::FILE_EFFECTS_PLUGIN:
|
||||||
|
- if (!GetInternalPluginsDirectory(&cur))
|
||||||
|
+ if (!GetInternalPluginsDirectory(&cur, "FILE_EFFECTS"))
|
||||||
|
return false;
|
||||||
|
cur = cur.Append(kEffectsPluginFileName);
|
||||||
|
break;
|
||||||
|
@@ -308,7 +301,7 @@ bool PathProvider(int key, base::FilePath* result) {
|
||||||
|
// We currently need a path here to look up whether the plugin is disabled
|
||||||
|
// and what its permissions are.
|
||||||
|
case chrome::FILE_NACL_PLUGIN:
|
||||||
|
- if (!GetInternalPluginsDirectory(&cur))
|
||||||
|
+ if (!GetInternalPluginsDirectory(&cur, "NACL"))
|
||||||
|
return false;
|
||||||
|
cur = cur.Append(kInternalNaClPluginFileName);
|
||||||
|
break;
|
||||||
|
@@ -343,7 +336,7 @@ bool PathProvider(int key, base::FilePath* result) {
|
||||||
|
cur = cur.DirName();
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
- if (!GetInternalPluginsDirectory(&cur))
|
||||||
|
+ if (!GetInternalPluginsDirectory(&cur, "PNACL"))
|
||||||
|
return false;
|
||||||
|
#endif
|
||||||
|
cur = cur.Append(FILE_PATH_LITERAL("pnacl"));
|
||||||
|
@@ -372,7 +365,7 @@ bool PathProvider(int key, base::FilePath* result) {
|
||||||
|
// In the component case, this is the source adapter. Otherwise, it is the
|
||||||
|
// actual Pepper module that gets loaded.
|
||||||
|
case chrome::FILE_WIDEVINE_CDM_ADAPTER:
|
||||||
|
- if (!GetInternalPluginsDirectory(&cur))
|
||||||
|
+ if (!GetInternalPluginsDirectory(&cur, "WIDEVINE"))
|
||||||
|
return false;
|
||||||
|
cur = cur.AppendASCII(kWidevineCdmAdapterFileName);
|
||||||
|
break;
|
Loading…
Reference in New Issue
Block a user