summary refs log tree commit diff
path: root/pkgs/applications/networking/browsers/chromium/source
diff options
context:
space:
mode:
authoraszlig <aszlig@redmoonstudios.org>2014-11-20 16:46:09 +0100
committeraszlig <aszlig@redmoonstudios.org>2014-11-22 04:26:17 +0100
commit1b84fbf0cacaa3999979602919c3ee8df7ae9c6d (patch)
tree7bd245ed30bb3ac4a7aa30a76918a88dca7540ad /pkgs/applications/networking/browsers/chromium/source
parent2495e819aa7ccbd59adb5bcaac898b18d0532684 (diff)
downloadnixpkgs-1b84fbf0cacaa3999979602919c3ee8df7ae9c6d.tar
nixpkgs-1b84fbf0cacaa3999979602919c3ee8df7ae9c6d.tar.gz
nixpkgs-1b84fbf0cacaa3999979602919c3ee8df7ae9c6d.tar.bz2
nixpkgs-1b84fbf0cacaa3999979602919c3ee8df7ae9c6d.tar.lz
nixpkgs-1b84fbf0cacaa3999979602919c3ee8df7ae9c6d.tar.xz
nixpkgs-1b84fbf0cacaa3999979602919c3ee8df7ae9c6d.tar.zst
nixpkgs-1b84fbf0cacaa3999979602919c3ee8df7ae9c6d.zip
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>
Diffstat (limited to 'pkgs/applications/networking/browsers/chromium/source')
-rw-r--r--pkgs/applications/networking/browsers/chromium/source/default.nix2
-rw-r--r--pkgs/applications/networking/browsers/chromium/source/nix_plugin_paths.patch99
2 files changed, 100 insertions, 1 deletions
diff --git a/pkgs/applications/networking/browsers/chromium/source/default.nix b/pkgs/applications/networking/browsers/chromium/source/default.nix
index ef442004d7e..adac4baa29c 100644
--- a/pkgs/applications/networking/browsers/chromium/source/default.nix
+++ b/pkgs/applications/networking/browsers/chromium/source/default.nix
@@ -22,7 +22,7 @@ stdenv.mkDerivation {
 
   prePatch = "patchShebangs .";
 
-  patches = [ ./sandbox_userns_36.patch ];
+  patches = [ ./sandbox_userns_36.patch ./nix_plugin_paths.patch ];
 
   postPatch = ''
     sed -i -r \
diff --git a/pkgs/applications/networking/browsers/chromium/source/nix_plugin_paths.patch b/pkgs/applications/networking/browsers/chromium/source/nix_plugin_paths.patch
new file mode 100644
index 00000000000..0220d042941
--- /dev/null
+++ b/pkgs/applications/networking/browsers/chromium/source/nix_plugin_paths.patch
@@ -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;