Chromium Code Reviews| 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..b40050629068eba371c154580d9ca6cfafda1053 |
| --- /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 ext_async = (results && |
|
Matt Perry
2013/02/27 22:33:47
nit: extAsync
benjhayden
2013/03/01 20:42:21
Done.
|
| + results.results && |
| + (results.results.length != 0) && |
| + (results.results[0] === true)); |
| + if (suggestable && !ext_async) |
| + suggestCallback(); |
| + } catch (e) { |
| + suggestCallback(); |
| + throw e; |
| + } |
| +}); |