diff --git a/core/modules/file/file.api.php b/core/modules/file/file.api.php
index 7f20d83..19df3d1 100644
--- a/core/modules/file/file.api.php
+++ b/core/modules/file/file.api.php
@@ -45,12 +45,13 @@ function hook_file_download_access($field, $entity_type, $entity) {
  *   An array of grants gathered by hook_file_download_access(). The array is
  *   keyed by the module that defines the entity type's access control; the
  *   values are Boolean grant responses for each module.
- * @param $field
- *   The field to which the file belongs.
- * @param $entity_type
- *   The type of $entity; for example, 'node' or 'user'.
- * @param $entity
- *   The $entity to which $file is referenced.
+ * @param array $context
+ *   An associative array containing the following key-value pairs, matching the
+ *   arguments received by hook_file_download_access():
+ *   - "field": The field to which the file belongs.
+ *   - "entity_type": The type of $context['entity']; for example, 'node' or
+ *     'user'.
+ *   - "entity": The $entity to which $file is referenced.
  *
  * @return
  *   An array of grants, keyed by module name, each with a Boolean grant value.
@@ -58,7 +59,7 @@ function hook_file_download_access($field, $entity_type, $entity) {
  *   module's value in addition to other grants or to overwrite the values set
  *   by other modules.
  */
-function hook_file_download_access_alter(&$grants, $field, $entity_type, $entity) {
+function hook_file_download_access_alter(&$grants, array $context) {
   // For our example module, we always enforce the rules set by node module.
   if (isset($grants['node'])) {
     $grants = array('node' => $grants['node']);
diff --git a/core/modules/file/file.module b/core/modules/file/file.module
index 2141cae..65fff71 100644
--- a/core/modules/file/file.module
+++ b/core/modules/file/file.module
@@ -194,7 +194,12 @@ function file_file_download($uri, $field_type = 'file') {
           $grants = array_merge($grants, array($module => module_invoke($module, 'file_download_access', $field, $entity_type, $entity)));
         }
         // Allow other modules to alter the returned grants/denies.
-        drupal_alter('file_download_access', $grants, $field, $entity_type, $entity);
+        $context = array(
+          'field' => $field,
+          'entity_type' => $entity_type,
+          'entity' => $entity,
+        );
+        drupal_alter('file_download_access', $grants, $context);
 
         if (in_array(TRUE, $grants)) {
           // If TRUE is returned, access is granted and no further checks are
