Merge pull request #6278 from electron/ico-native-image-crash

Fix nativeImage.createFromPath for non-existent .ico
This commit is contained in:
Kevin Sawicki 2016-06-28 12:41:48 -07:00 committed by GitHub
commit 49bec9165c
3 changed files with 16 additions and 1 deletions

View file

@ -160,10 +160,14 @@ base::win::ScopedHICON ReadICOFromPath(int size, const base::FilePath& path) {
LR_LOADFROMFILE)));
}
void ReadImageSkiaFromICO(gfx::ImageSkia* image, HICON icon) {
bool ReadImageSkiaFromICO(gfx::ImageSkia* image, HICON icon) {
// Convert the icon from the Windows specific HICON to gfx::ImageSkia.
std::unique_ptr<SkBitmap> bitmap(IconUtil::CreateSkBitmapFromHICON(icon));
if (!bitmap)
return false;
image->AddRepresentation(gfx::ImageSkiaRep(*bitmap, 1.0f));
return true;
}
#endif

View file

@ -9,6 +9,7 @@ describe('nativeImage module', () => {
it('returns an empty image for invalid paths', () => {
assert(nativeImage.createFromPath('').isEmpty())
assert(nativeImage.createFromPath('does-not-exist.png').isEmpty())
assert(nativeImage.createFromPath('does-not-exist.ico').isEmpty())
})
it('loads images from paths relative to the current working directory', () => {
@ -47,5 +48,15 @@ describe('nativeImage module', () => {
// If all bytes are null, that's Bad
assert.equal(nsimage.reduce((acc, x) => acc || (x !== 0), false), true)
})
it('loads images from .ico files on Windows', () => {
if (process.platform !== 'win32') return
const imagePath = path.join(__dirname, 'fixtures', 'assets', 'icon.ico')
const image = nativeImage.createFromPath(imagePath)
assert(!image.isEmpty())
assert.equal(image.getSize().height, 256)
assert.equal(image.getSize().width, 256)
})
})
})

BIN
spec/fixtures/assets/icon.ico vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB