Skip to content

Commit 27e88eb

Browse files
willbur1984rogerwang
authored andcommitted
[Mac] add implementation for shell_download_manager_delegate
Fix nwjs#373
1 parent 0f4f4b2 commit 27e88eb

File tree

2 files changed

+66
-0
lines changed

2 files changed

+66
-0
lines changed

AUTHORS

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,3 +16,4 @@ Ivo Georgiev <ivo@linvo.org>
1616
Krill Izotov <enykeev@gmail.com>
1717
Zhang Chaobin <zhchbin@gmail.com>
1818
Michael Morrison <mmorrison@wootalyzer.com>
19+
William Towe <willbur1984@gmail.com>
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
// Copyright (c) 2012 Intel Corp
2+
// Copyright (c) 2012 The Chromium Authors
3+
//
4+
// Permission is hereby granted, free of charge, to any person obtaining a copy
5+
// of this software and associated documentation files (the "Software"), to deal
6+
// in the Software without restriction, including without limitation the rights
7+
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell co
8+
// pies of the Software, and to permit persons to whom the Software is furnished
9+
// to do so, subject to the following conditions:
10+
//
11+
// The above copyright notice and this permission notice shall be included in al
12+
// l copies or substantial portions of the Software.
13+
//
14+
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IM
15+
// PLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNES
16+
// S FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS
17+
// OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WH
18+
// ETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
19+
// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
20+
21+
#include "content/nw/src/browser/shell_download_manager_delegate.h"
22+
23+
#include <AppKit/NSSavePanel.h>
24+
#include <Foundation/NSURL.h>
25+
26+
#include "base/bind.h"
27+
#include "base/file_util.h"
28+
#include "base/logging.h"
29+
#include "base/string_util.h"
30+
#include "base/utf_string_conversions.h"
31+
#include "content/public/browser/browser_context.h"
32+
#include "content/public/browser/browser_thread.h"
33+
#include "content/public/browser/download_manager.h"
34+
#include "content/public/browser/web_contents.h"
35+
#include "content/public/browser/web_contents_view.h"
36+
#include "net/base/net_util.h"
37+
38+
namespace content {
39+
40+
void ShellDownloadManagerDelegate::ChooseDownloadPath(
41+
int32 download_id,
42+
const DownloadTargetCallback& callback,
43+
const FilePath& suggested_path) {
44+
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
45+
DownloadItem* item = download_manager_->GetDownload(download_id);
46+
if (!item || (item->GetState() != DownloadItem::IN_PROGRESS))
47+
return;
48+
49+
FilePath result;
50+
std::string base_name = FilePath(suggested_path).BaseName().value();
51+
52+
NSSavePanel *savePanel = [NSSavePanel savePanel];
53+
54+
[savePanel setNameFieldStringValue:[NSString stringWithUTF8String:base_name.c_str()]];
55+
56+
if ([savePanel runModal] == NSFileHandlingPanelOKButton) {
57+
char *filename = (char *)[[[savePanel URL] path] UTF8String];
58+
59+
result = FilePath(filename);
60+
}
61+
62+
callback.Run(result, DownloadItem::TARGET_DISPOSITION_PROMPT,
63+
DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS, result);
64+
}
65+
} // namespace content

0 commit comments

Comments
 (0)