Merge "Add support for CMYK jpeg images." into jb-mr2-dev
diff --git a/Android.mk b/Android.mk
index a6cfb4a..68fd312 100644
--- a/Android.mk
+++ b/Android.mk
@@ -451,6 +451,7 @@
 	emoji/EmojiFont.cpp
 
 LOCAL_SHARED_LIBRARIES := \
+	liblog \
 	libcutils \
 	libemoji \
 	libjpeg \
diff --git a/legacy/Android.mk b/legacy/Android.mk
index 9bb40f1..214bd89 100644
--- a/legacy/Android.mk
+++ b/legacy/Android.mk
@@ -271,6 +271,7 @@
 
 LOCAL_SHARED_LIBRARIES := \
 	libcutils \
+	liblog \
 	libemoji \
 	libjpeg \
 	libutils \
@@ -310,4 +311,4 @@
 
 LOCAL_MODULE:= libskia_legacy
 
-include $(BUILD_SHARED_LIBRARY)
\ No newline at end of file
+include $(BUILD_SHARED_LIBRARY)
diff --git a/src/core/SkPaint.cpp b/src/core/SkPaint.cpp
index d2d1b7f..57930eb 100644
--- a/src/core/SkPaint.cpp
+++ b/src/core/SkPaint.cpp
@@ -934,12 +934,12 @@
 public:
     SkAutoRestorePaintTextSizeAndFrame(const SkPaint* paint)
             : fPaint((SkPaint*)paint) {
-        fTextSize = paint->getTextSize();
-        fStyle = paint->getStyle();
-        fPaint->setStyle(SkPaint::kFill_Style);
 #ifdef SK_BUILD_FOR_ANDROID
         fGenerationID = fPaint->getGenerationID();
 #endif
+        fTextSize = paint->getTextSize();
+        fStyle = paint->getStyle();
+        fPaint->setStyle(SkPaint::kFill_Style);
     }
 
     ~SkAutoRestorePaintTextSizeAndFrame() {
diff --git a/src/images/SkImageDecoder_libwebp.cpp b/src/images/SkImageDecoder_libwebp.cpp
index 656ec3d..a42098c 100644
--- a/src/images/SkImageDecoder_libwebp.cpp
+++ b/src/images/SkImageDecoder_libwebp.cpp
@@ -183,33 +183,27 @@
         return false;
     }
 
-    uint32_t bytes_remaining = contentSize;
-    while (bytes_remaining > 0) {
-        const uint32_t bytes_to_read =
-            (bytes_remaining < WEBP_IDECODE_BUFFER_SZ) ?
-                bytes_remaining : WEBP_IDECODE_BUFFER_SZ;
-
+    bool success = true;
+    VP8StatusCode status = VP8_STATUS_SUSPENDED;
+    do {
+        const uint32_t bytes_to_read = WEBP_IDECODE_BUFFER_SZ;
         const size_t bytes_read = stream->read(input, bytes_to_read);
         if (bytes_read == 0) {
+            success = false;
             break;
         }
 
-        VP8StatusCode status = WebPIAppend(idec, input, bytes_read);
-        if (status == VP8_STATUS_OK || status == VP8_STATUS_SUSPENDED) {
-            bytes_remaining -= bytes_read;
-        } else {
+        status = WebPIAppend(idec, input, bytes_read);
+        if (VP8_STATUS_OK != status && VP8_STATUS_SUSPENDED != status) {
+            success = false;
             break;
         }
-    }
+    } while (VP8_STATUS_OK != status);
     srcStorage.free();
     WebPIDelete(idec);
     WebPFreeDecBuffer(&config.output);
 
-    if (bytes_remaining > 0) {
-        return false;
-    } else {
-        return true;
-    }
+    return success;
 }
 
 static bool webp_get_config_resize(WebPDecoderConfig& config,
diff --git a/src/ports/SkFontHost_android.cpp b/src/ports/SkFontHost_android.cpp
index 6dd9cab..aeb819a 100644
--- a/src/ports/SkFontHost_android.cpp
+++ b/src/ports/SkFontHost_android.cpp
@@ -1122,33 +1122,43 @@
  * HB_SCRIPT_INHERITED
  */
 
+/* Harfbuzz (old) is missing a number of scripts in its table. For these,
+ * we include a value which can never happen. We won't get complex script
+ * shaping in these cases, but the library wouldn't know how to shape
+ * them anyway. */
+#define HB_Script_Unknown HB_ScriptCount
+
 static HB_UnicodeMapping HB_UnicodeMappingArray[] = {
-    {HB_Script_Armenian, HB_SCRIPT_ARMENIAN,      0x0531},
-    {HB_Script_Hebrew, HB_SCRIPT_HEBREW,        0x0591},
-    {HB_Script_Arabic, HB_SCRIPT_ARABIC,        0x0600},
-    {HB_Script_Syriac, HB_SCRIPT_SYRIAC,        0x0710},
-    {HB_Script_Thaana, HB_SCRIPT_THAANA,        0x0780},
-    {HB_Script_Nko, HB_SCRIPT_NKO,           0x07C0},
-    {HB_Script_Devanagari, HB_SCRIPT_DEVANAGARI,    0x0901},
-    {HB_Script_Bengali, HB_SCRIPT_BENGALI,       0x0981},
-    {HB_Script_Gurmukhi, HB_SCRIPT_GURMUKHI,      0x0A10},
-    {HB_Script_Gujarati, HB_SCRIPT_GUJARATI,      0x0A90},
-    {HB_Script_Oriya, HB_SCRIPT_ORIYA,         0x0B10},
-    {HB_Script_Tamil, HB_SCRIPT_TAMIL,         0x0B82},
-    {HB_Script_Telugu, HB_SCRIPT_TELUGU,        0x0C10},
-    {HB_Script_Kannada, HB_SCRIPT_KANNADA,       0x0C90},
-    {HB_Script_Malayalam, HB_SCRIPT_MALAYALAM,     0x0D10},
-    {HB_Script_Sinhala, HB_SCRIPT_SINHALA,       0x0D90},
-    {HB_Script_Thai, HB_SCRIPT_THAI,          0x0E01},
-    {HB_Script_Lao, HB_SCRIPT_LAO,           0x0E81},
-    {HB_Script_Tibetan, HB_SCRIPT_TIBETAN,       0x0F00},
-    {HB_Script_Myanmar, HB_SCRIPT_MYANMAR,       0x1000},
-    {HB_Script_Georgian, HB_SCRIPT_GEORGIAN,      0x10A0},
-    // we don't currently support HB_Script_Ethiopic, it is a placeholder for an upstream merge
-    //{HB_Script_Ethiopic, HB_SCRIPT_ETHIOPIC,    0x1200},
-    {HB_Script_Ogham, HB_SCRIPT_OGHAM,         0x1680},
-    {HB_Script_Runic, HB_SCRIPT_RUNIC,         0x16A0},
-    {HB_Script_Khmer, HB_SCRIPT_KHMER,         0x1780},
+    {HB_Script_Armenian,   HB_SCRIPT_ARMENIAN,    0x0531},
+    {HB_Script_Hebrew,     HB_SCRIPT_HEBREW,      0x0591},
+    {HB_Script_Arabic,     HB_SCRIPT_ARABIC,      0x0600},
+    {HB_Script_Syriac,     HB_SCRIPT_SYRIAC,      0x0710},
+    {HB_Script_Thaana,     HB_SCRIPT_THAANA,      0x0780},
+    {HB_Script_Nko,        HB_SCRIPT_NKO,         0x07C0},
+    {HB_Script_Devanagari, HB_SCRIPT_DEVANAGARI,  0x0901},
+    {HB_Script_Bengali,    HB_SCRIPT_BENGALI,     0x0981},
+    {HB_Script_Gurmukhi,   HB_SCRIPT_GURMUKHI,    0x0A10},
+    {HB_Script_Gujarati,   HB_SCRIPT_GUJARATI,    0x0A90},
+    {HB_Script_Oriya,      HB_SCRIPT_ORIYA,       0x0B10},
+    {HB_Script_Tamil,      HB_SCRIPT_TAMIL,       0x0B82},
+    {HB_Script_Telugu,     HB_SCRIPT_TELUGU,      0x0C10},
+    {HB_Script_Kannada,    HB_SCRIPT_KANNADA,     0x0C90},
+    {HB_Script_Malayalam,  HB_SCRIPT_MALAYALAM,   0x0D10},
+    {HB_Script_Sinhala,    HB_SCRIPT_SINHALA,     0x0D90},
+    {HB_Script_Thai,       HB_SCRIPT_THAI,        0x0E01},
+    {HB_Script_Lao,        HB_SCRIPT_LAO,         0x0E81},
+    {HB_Script_Tibetan,    HB_SCRIPT_TIBETAN,     0x0F00},
+    {HB_Script_Myanmar,    HB_SCRIPT_MYANMAR,     0x1000},
+    {HB_Script_Georgian,   HB_SCRIPT_GEORGIAN,    0x10A0},
+    {HB_Script_Unknown,    HB_SCRIPT_ETHIOPIC,    0x1200},
+    {HB_Script_Unknown,    HB_SCRIPT_CHEROKEE,    0x13A0},
+    {HB_Script_Ogham,      HB_SCRIPT_OGHAM,       0x1680},
+    {HB_Script_Runic,      HB_SCRIPT_RUNIC,       0x16A0},
+    {HB_Script_Khmer,      HB_SCRIPT_KHMER,       0x1780},
+    {HB_Script_Unknown,    HB_SCRIPT_TAI_LE,      0x1950},
+    {HB_Script_Unknown,    HB_SCRIPT_NEW_TAI_LUE, 0x1980},
+    {HB_Script_Unknown,    HB_SCRIPT_TAI_THAM,    0x1A20},
+    {HB_Script_Unknown,    HB_SCRIPT_CHAM,        0xAA00},
 };
 
 static hb_script_t getHBScriptFromHBScriptOld(HB_Script script_old) {