diff --git a/atom/browser/api/save_page_handler.cc b/atom/browser/api/save_page_handler.cc index 42b93befddf6..1e5bc094cf63 100644 --- a/atom/browser/api/save_page_handler.cc +++ b/atom/browser/api/save_page_handler.cc @@ -36,8 +36,13 @@ bool SavePageHandler::Handle(const base::FilePath& full_path, auto download_manager = content::BrowserContext::GetDownloadManager( web_contents_->GetBrowserContext()); download_manager->AddObserver(this); + // Chromium will create a 'foo_files' directory under the directory of saving + // page 'foo.html' for holding other resource files of 'foo.html'. + base::FilePath saved_main_directory_path = full_path.DirName().Append( + full_path.RemoveExtension().BaseName().value() + + FILE_PATH_LITERAL("_files")); bool result = web_contents_->SavePage(full_path, - full_path.DirName(), + saved_main_directory_path, save_type); download_manager->RemoveObserver(this); // If initialization fails which means fail to create |DownloadItem|, we need diff --git a/spec/api-browser-window-spec.coffee b/spec/api-browser-window-spec.coffee index 0f9b376784fc..1218d27b7fd7 100644 --- a/spec/api-browser-window-spec.coffee +++ b/spec/api-browser-window-spec.coffee @@ -303,13 +303,22 @@ describe 'browser-window module', -> done() describe 'save page', -> - savePagePath = path.join fixtures, 'save_page.html' + savePageDir = path.join fixtures, 'save_page' + savePageHtmlPath = path.join savePageDir, 'save_page.html' + savePageJsPath = path.join savePageDir, 'save_page_files', 'test.js' + savePageCssPath = path.join savePageDir, 'save_page_files', 'test.css' it 'should save page', (done) -> w.webContents.on 'did-finish-load', -> - w.webContents.savePage savePagePath, 'HTMLComplete', (error) -> + w.webContents.savePage savePageHtmlPath, 'HTMLComplete', (error) -> assert.equal error, null - assert fs.existsSync savePagePath - fs.unlinkSync savePagePath + assert fs.existsSync savePageHtmlPath + assert fs.existsSync savePageJsPath + assert fs.existsSync savePageCssPath + fs.unlinkSync savePageCssPath + fs.unlinkSync savePageJsPath + fs.unlinkSync savePageHtmlPath + fs.rmdirSync path.join savePageDir, 'save_page_files' + fs.rmdirSync savePageDir done() - w.loadUrl "file://#{fixtures}/api/blank.html" + w.loadUrl "file://#{fixtures}/pages/save_page/index.html" diff --git a/spec/fixtures/pages/save_page/index.html b/spec/fixtures/pages/save_page/index.html new file mode 100644 index 000000000000..829233bb86fb --- /dev/null +++ b/spec/fixtures/pages/save_page/index.html @@ -0,0 +1,6 @@ + + + + + + diff --git a/spec/fixtures/pages/save_page/test.css b/spec/fixtures/pages/save_page/test.css new file mode 100644 index 000000000000..f7df9d4fdadb --- /dev/null +++ b/spec/fixtures/pages/save_page/test.css @@ -0,0 +1 @@ +h1 { } diff --git a/spec/fixtures/pages/save_page/test.js b/spec/fixtures/pages/save_page/test.js new file mode 100644 index 000000000000..3d79457383f5 --- /dev/null +++ b/spec/fixtures/pages/save_page/test.js @@ -0,0 +1 @@ +console.log('save_page');