--- modules/file/file.field.inc
+++ modules/file/file.field.inc
@@ -568,14 +567,17 @@ function file_field_widget_upload_validators($field, $instance) {
  *   A field array.
  * @param $instance
  *   A field instance array.
+ * @param $data
+ *   An array of token objects to pass to token_replace().
  * @return
  *   A file directory URI with tokens replaced.
+ *
+ * @see token_replace()
  */
-function file_field_widget_uri($field, $instance, $account = NULL) {
+function file_field_widget_uri($field, $instance, $data = array()) {
   $destination = trim($instance['settings']['file_directory'], '/');
 
   // Replace tokens.
-  $data = array('user' => isset($account) ? $account : $GLOBALS['user']);
   $destination = token_replace($destination, $data);
 
   return $field['settings']['uri_scheme'] . '://' . $destination;
--- modules/file/tests/file.test
+++ modules/file/tests/file.test
@@ -933,7 +933,7 @@ class FileFieldPathTestCase extends FileFieldTestCase {
 
     // Check the path when used with tokens.
     // Change the path to contain multiple token directories.
-    $field = $this->updateFileField($field_name, $type_name, array('file_directory' => '[user:uid]/[user:name]'));
+    $field = $this->updateFileField($field_name, $type_name, array('file_directory' => '[current-user:uid]/[current-user:name]'));
 
     // Upload a new file into the token subdirectories.
     $nid = $this->uploadNodeFile($test_file, $field_name, $type_name);
@@ -941,6 +941,8 @@ class FileFieldPathTestCase extends FileFieldTestCase {
     // Check that the file was uploaded into the subdirectory.
     $node = node_load($nid, NULL, TRUE);
     $node_file = (object) $node->{$field_name}[LANGUAGE_NONE][0];
+    // Do token replacement using the same user which uploaded the file, not
+    // the user running the test case.
     $data = array('user' => $this->admin_user);
     $subdirectory = token_replace('[user:uid]/[user:name]', $data);
     $this->assertPathMatch('public://' . $subdirectory . '/' . $test_file->filename, $node_file->uri, t('The file %file was uploaded to the correct path with token replacements.', array('%file' => $node_file->uri)));

