| Index: chrome/renderer/resources/extensions/downloads_custom_bindings.js
 | 
| diff --git a/chrome/renderer/resources/extensions/downloads_custom_bindings.js b/chrome/renderer/resources/extensions/downloads_custom_bindings.js
 | 
| new file mode 100644
 | 
| index 0000000000000000000000000000000000000000..fd17af2ed7c94269c9ae05e21bd59e21c1ff02bc
 | 
| --- /dev/null
 | 
| +++ b/chrome/renderer/resources/extensions/downloads_custom_bindings.js
 | 
| @@ -0,0 +1,48 @@
 | 
| +// Copyright (c) 2013 The Chromium Authors. All rights reserved.
 | 
| +// Use of this source code is governed by a BSD-style license that can be
 | 
| +// found in the LICENSE file.
 | 
| +
 | 
| +// Custom bindings for the downloads API.
 | 
| +
 | 
| +var chromeHidden = requireNative('chrome_hidden').GetChromeHidden();
 | 
| +
 | 
| +chromeHidden.Event.registerArgumentMassager(
 | 
| +    'downloads.onDeterminingFilename',
 | 
| +    function massage_determining_filename(args, dispatch) {
 | 
| +  var downloadItem = args[0];
 | 
| +  // Copy the id so that extensions can't change it.
 | 
| +  var downloadId = downloadItem.id;
 | 
| +  var suggestable = true;
 | 
| +  function suggestCallback(result) {
 | 
| +    if (!suggestable) {
 | 
| +      console.error('suggestCallback may not be called more than once.');
 | 
| +      return;
 | 
| +    }
 | 
| +    suggestable = false;
 | 
| +    if ((typeof(result) == 'object') &&
 | 
| +        result.filename &&
 | 
| +        (typeof(result.filename) == 'string') &&
 | 
| +        ((result.overwrite === undefined) ||
 | 
| +          (typeof(result.overwrite) == 'boolean'))) {
 | 
| +      chromeHidden.internalAPIs.downloadsInternal.determineFilename(
 | 
| +          downloadId,
 | 
| +          result.filename,
 | 
| +          result.overwrite || false);
 | 
| +    } else {
 | 
| +      chromeHidden.internalAPIs.downloadsInternal.determineFilename(
 | 
| +          downloadId);
 | 
| +    }
 | 
| +  }
 | 
| +  try {
 | 
| +    var results = dispatch([downloadItem, suggestCallback]);
 | 
| +    var async = (results &&
 | 
| +                 results.results &&
 | 
| +                 (results.results.length != 0) &&
 | 
| +                 (results.results[0] === true));
 | 
| +    if (suggestable && !async)
 | 
| +      suggestCallback();
 | 
| +  } catch (e) {
 | 
| +    suggestCallback();
 | 
| +    throw e;
 | 
| +  }
 | 
| +});
 | 
| 
 |