| Index: src/codec/SkIcoCodec.cpp
 | 
| diff --git a/src/codec/SkIcoCodec.cpp b/src/codec/SkIcoCodec.cpp
 | 
| index a80b9df3cf8f01ee535a63fdb0e7aeb2f9fc02bf..0e81b72407218778b9d469e72b95941149b83309 100644
 | 
| --- a/src/codec/SkIcoCodec.cpp
 | 
| +++ b/src/codec/SkIcoCodec.cpp
 | 
| @@ -15,7 +15,6 @@
 | 
|  #include "SkTDArray.h"
 | 
|  #include "SkTSort.h"
 | 
|  
 | 
| -#ifdef SK_HAS_PNG_LIBRARY
 | 
|  /*
 | 
|   * Checks the start of the stream to see if the image is an Ico or Cur
 | 
|   */
 | 
| @@ -187,7 +186,6 @@
 | 
|      : INHERITED(width, height, info, nullptr)
 | 
|      , fEmbeddedCodecs(codecs)
 | 
|      , fCurrScanlineCodec(nullptr)
 | 
| -    , fCurrIncrementalCodec(nullptr)
 | 
|  {}
 | 
|  
 | 
|  /*
 | 
| @@ -291,7 +289,6 @@
 | 
|          result = embeddedCodec->startScanlineDecode(dstInfo, &options, colorTable, colorCount);
 | 
|          if (kSuccess == result) {
 | 
|              fCurrScanlineCodec = embeddedCodec;
 | 
| -            fCurrIncrementalCodec = nullptr;
 | 
|              return result;
 | 
|          }
 | 
|  
 | 
| @@ -312,83 +309,13 @@
 | 
|      return fCurrScanlineCodec->skipScanlines(count);
 | 
|  }
 | 
|  
 | 
| -SkCodec::Result SkIcoCodec::onStartIncrementalDecode(const SkImageInfo& dstInfo,
 | 
| -        void* pixels, size_t rowBytes, const SkCodec::Options& options,
 | 
| -        SkPMColor* colorTable, int* colorCount) {
 | 
| -    int index = 0;
 | 
| -    while (true) {
 | 
| -        index = this->chooseCodec(dstInfo.dimensions(), index);
 | 
| -        if (index < 0) {
 | 
| -            break;
 | 
| -        }
 | 
| -
 | 
| -        SkCodec* embeddedCodec = fEmbeddedCodecs->operator[](index);
 | 
| -        switch (embeddedCodec->startIncrementalDecode(dstInfo,
 | 
| -                pixels, rowBytes, &options, colorTable, colorCount)) {
 | 
| -            case kSuccess:
 | 
| -                fCurrIncrementalCodec = embeddedCodec;
 | 
| -                fCurrScanlineCodec = nullptr;
 | 
| -                return kSuccess;
 | 
| -            case kUnimplemented:
 | 
| -                // FIXME: embeddedCodec is a BMP. If scanline decoding would work,
 | 
| -                // return kUnimplemented so that SkSampledCodec will fall through
 | 
| -                // to use the scanline decoder.
 | 
| -                // Note that calling startScanlineDecode will require an extra
 | 
| -                // rewind. The embedded codec has an SkMemoryStream, which is
 | 
| -                // cheap to rewind, though it will do extra work re-reading the
 | 
| -                // header.
 | 
| -                // Also note that we pass nullptr for Options. This is because
 | 
| -                // Options that are valid for incremental decoding may not be
 | 
| -                // valid for scanline decoding.
 | 
| -                // Once BMP supports incremental decoding this workaround can go
 | 
| -                // away.
 | 
| -                if (embeddedCodec->startScanlineDecode(dstInfo, nullptr,
 | 
| -                        colorTable, colorCount) == kSuccess) {
 | 
| -                    return kUnimplemented;
 | 
| -                }
 | 
| -                // Move on to the next embedded codec.
 | 
| -                break;
 | 
| -            default:
 | 
| -                break;
 | 
| -        }
 | 
| -
 | 
| -        index++;
 | 
| -    }
 | 
| -
 | 
| -    SkCodecPrintf("Error: No matching candidate image in ico.\n");
 | 
| -    return kInvalidScale;
 | 
| -}
 | 
| -
 | 
| -SkCodec::Result SkIcoCodec::onIncrementalDecode(int* rowsDecoded) {
 | 
| -    SkASSERT(fCurrIncrementalCodec);
 | 
| -    return fCurrIncrementalCodec->incrementalDecode(rowsDecoded);
 | 
| -}
 | 
| -
 | 
|  SkCodec::SkScanlineOrder SkIcoCodec::onGetScanlineOrder() const {
 | 
|      // FIXME: This function will possibly return the wrong value if it is called
 | 
| -    //        before startScanlineDecode()/startIncrementalDecode().
 | 
| -    if (fCurrScanlineCodec) {
 | 
| -        SkASSERT(!fCurrIncrementalCodec);
 | 
| -        return fCurrScanlineCodec->getScanlineOrder();
 | 
| -    }
 | 
| -
 | 
| -    if (fCurrIncrementalCodec) {
 | 
| -        return fCurrIncrementalCodec->getScanlineOrder();
 | 
| -    }
 | 
| -
 | 
| -    return INHERITED::onGetScanlineOrder();
 | 
| +    //        before startScanlineDecode().
 | 
| +    return fCurrScanlineCodec ? fCurrScanlineCodec->getScanlineOrder() :
 | 
| +            INHERITED::onGetScanlineOrder();
 | 
|  }
 | 
|  
 | 
|  SkSampler* SkIcoCodec::getSampler(bool createIfNecessary) {
 | 
| -    if (fCurrScanlineCodec) {
 | 
| -        SkASSERT(!fCurrIncrementalCodec);
 | 
| -        return fCurrScanlineCodec->getSampler(createIfNecessary);
 | 
| -    }
 | 
| -
 | 
| -    if (fCurrIncrementalCodec) {
 | 
| -        return fCurrIncrementalCodec->getSampler(createIfNecessary);
 | 
| -    }
 | 
| -
 | 
| -    return nullptr;
 | 
| -}
 | 
| -#endif // SK_HAS_PNG_LIBRARY
 | 
| +    return fCurrScanlineCodec ? fCurrScanlineCodec->getSampler(createIfNecessary) : nullptr;
 | 
| +}
 | 
| 
 |