diff --git a/chrome/renderer/pepper/pepper_flash_font_file_host.cc b/chrome/renderer/pepper/pepper_flash_font_file_host.cc
index 69cd7e0..aed27bf 100644
--- a/chrome/renderer/pepper/pepper_flash_font_file_host.cc
+++ b/chrome/renderer/pepper/pepper_flash_font_file_host.cc
@@ -4,6 +4,7 @@
 
 #include "chrome/renderer/pepper/pepper_flash_font_file_host.h"
 
+#include "base/sys_byteorder.h"
 #include "build/build_config.h"
 #include "content/public/renderer/renderer_ppapi_host.h"
 #include "ppapi/c/pp_errors.h"
@@ -15,6 +16,8 @@
 
 #if defined(OS_LINUX) || defined(OS_OPENBSD)
 #include "content/public/common/child_process_sandbox_support_linux.h"
+#elif defined(OS_WIN)
+#include "third_party/skia/include/ports/SkFontMgr.h"
 #endif
 
 PepperFlashFontFileHost::PepperFlashFontFileHost(
@@ -31,6 +34,16 @@
       description.italic,
       charset,
       PP_BROWSERFONT_TRUSTED_FAMILY_DEFAULT));
+#elif defined(OS_WIN)
+  int weight = description.weight;
+  if (weight == FW_DONTCARE)
+    weight = SkFontStyle::kNormal_Weight;
+  SkFontStyle style(weight, SkFontStyle::kNormal_Width,
+                    description.italic ? SkFontStyle::kItalic_Slant
+                                       : SkFontStyle::kUpright_Slant);
+  skia::RefPtr<SkFontMgr> font_mgr = skia::AdoptRef(SkFontMgr::RefDefault());
+  typeface_ = skia::AdoptRef(
+      font_mgr->matchFamilyStyle(description.face.c_str(), style));
 #endif  // defined(OS_LINUX) || defined(OS_OPENBSD)
 }
 
@@ -46,29 +59,48 @@
   return PP_ERROR_FAILED;
 }
 
+bool PepperFlashFontFileHost::GetFontData(uint32_t table,
+                                          void* buffer,
+                                          size_t* length) {
+  bool result = false;
+#if defined(OS_LINUX) || defined(OS_OPENBSD)
+  int fd = fd_.get();
+  if (fd != -1)
+    result = content::GetFontTable(fd, table, 0 /* offset */,
+                 reinterpret_cast<uint8_t*>(buffer), length);
+#elif defined(OS_WIN)
+  if (typeface_) {
+    table = base::ByteSwap(table);
+    if (buffer == NULL) {
+      *length = typeface_->getTableSize(table);
+      if (*length > 0)
+        result = true;
+    } else {
+      size_t new_length = typeface_->getTableData(table, 0, *length, buffer);
+      if (new_length == *length)
+        result = true;
+    }
+  }
+#endif
+  return result;
+}
+
 int32_t PepperFlashFontFileHost::OnGetFontTable(
     ppapi::host::HostMessageContext* context,
     uint32_t table) {
   std::string contents;
   int32_t result = PP_ERROR_FAILED;
-#if defined(OS_LINUX) || defined(OS_OPENBSD)
-  int fd = fd_.get();
-  if (fd != -1) {
-    size_t length = 0;
-    if (content::GetFontTable(fd, table, 0 /* offset */, NULL, &length)) {
-      contents.resize(length);
-      uint8_t* contents_ptr =
-          reinterpret_cast<uint8_t*>(const_cast<char*>(contents.c_str()));
-      if (content::GetFontTable(
-              fd, table, 0 /* offset */, contents_ptr, &length)) {
-        result = PP_OK;
-      } else {
-        contents.clear();
-      }
+  size_t length = 0;
+  if (GetFontData(table, NULL, &length)) {
+    contents.resize(length);
+    uint8_t* contents_ptr =
+        reinterpret_cast<uint8_t*>(const_cast<char*>(contents.c_str()));
+    if (GetFontData(table, contents_ptr, &length)) {
+      result = PP_OK;
+    } else {
+      contents.clear();
     }
   }
-#endif  // defined(OS_LINUX) || defined(OS_OPENBSD)
-
   context->reply_msg = PpapiPluginMsg_FlashFontFile_GetFontTableReply(contents);
   return result;
 }
diff --git a/chrome/renderer/pepper/pepper_flash_font_file_host.h b/chrome/renderer/pepper/pepper_flash_font_file_host.h
index 02bb30f..3c29a22 100644
--- a/chrome/renderer/pepper/pepper_flash_font_file_host.h
+++ b/chrome/renderer/pepper/pepper_flash_font_file_host.h
@@ -12,6 +12,9 @@
 
 #if defined(OS_LINUX) || defined(OS_OPENBSD)
 #include "base/files/scoped_file.h"
+#elif defined(OS_WIN)
+#include "skia/ext/refptr.h"
+#include "third_party/skia/include/core/SkTypeface.h"
 #endif
 
 namespace content {
@@ -41,9 +44,12 @@
  private:
   int32_t OnGetFontTable(ppapi::host::HostMessageContext* context,
                          uint32_t table);
+  bool GetFontData(uint32_t table, void* buffer, size_t* length);
 
 #if defined(OS_LINUX) || defined(OS_OPENBSD)
   base::ScopedFD fd_;
+#elif defined(OS_WIN)
+  skia::RefPtr<SkTypeface> typeface_;
 #endif
 
   DISALLOW_COPY_AND_ASSIGN(PepperFlashFontFileHost);
diff --git a/ppapi/api/private/ppb_flash_font_file.idl b/ppapi/api/private/ppb_flash_font_file.idl
index b7c39b4..b921d18 100644
--- a/ppapi/api/private/ppb_flash_font_file.idl
+++ b/ppapi/api/private/ppb_flash_font_file.idl
@@ -7,8 +7,11 @@
  * This file contains the <code>PPB_Flash_FontFile</code> interface.
  */
 
+[generate_thunk]
+
 label Chrome {
-  M24 = 0.1
+  M24 = 0.1,
+  M48 = 0.2
 };
 
 interface PPB_Flash_FontFile {
@@ -36,5 +39,12 @@
       [in] uint32_t table,
       [out] mem_t output,
       [out] uint32_t output_length);
+
+  /**
+   * Returns whether <code>PPB_Flash_FontFile</code> is supported on Windows.
+   */
+  [version=0.2]
+  PP_Bool IsSupportedForWindows();
+
 };
 
diff --git a/ppapi/c/private/ppb_flash_font_file.h b/ppapi/c/private/ppb_flash_font_file.h
index f50818e..a1cc7865 100644
--- a/ppapi/c/private/ppb_flash_font_file.h
+++ b/ppapi/c/private/ppb_flash_font_file.h
@@ -3,7 +3,7 @@
  * found in the LICENSE file.
  */
 
-/* From private/ppb_flash_font_file.idl modified Thu Dec 13 10:56:15 2012. */
+/* From private/ppb_flash_font_file.idl modified Fri Oct 23 10:34:57 2015. */
 
 #ifndef PPAPI_C_PRIVATE_PPB_FLASH_FONT_FILE_H_
 #define PPAPI_C_PRIVATE_PPB_FLASH_FONT_FILE_H_
@@ -18,7 +18,8 @@
 #include "ppapi/c/trusted/ppb_browser_font_trusted.h"
 
 #define PPB_FLASH_FONTFILE_INTERFACE_0_1 "PPB_Flash_FontFile;0.1"
-#define PPB_FLASH_FONTFILE_INTERFACE PPB_FLASH_FONTFILE_INTERFACE_0_1
+#define PPB_FLASH_FONTFILE_INTERFACE_0_2 "PPB_Flash_FontFile;0.2"
+#define PPB_FLASH_FONTFILE_INTERFACE PPB_FLASH_FONTFILE_INTERFACE_0_2
 
 /**
  * @file
@@ -30,7 +31,7 @@
  * @addtogroup Interfaces
  * @{
  */
-struct PPB_Flash_FontFile_0_1 {
+struct PPB_Flash_FontFile_0_2 {
   /* Returns a resource identifying a font file corresponding to the given font
    * request after applying the browser-specific fallback.
    */
@@ -52,9 +53,25 @@
                           uint32_t table,
                           void* output,
                           uint32_t* output_length);
+  /**
+   * Returns whether <code>PPB_Flash_FontFile</code> is supported on Windows.
+   */
+  PP_Bool (*IsSupportedForWindows)(void);
 };
 
-typedef struct PPB_Flash_FontFile_0_1 PPB_Flash_FontFile;
+typedef struct PPB_Flash_FontFile_0_2 PPB_Flash_FontFile;
+
+struct PPB_Flash_FontFile_0_1 {
+  PP_Resource (*Create)(
+      PP_Instance instance,
+      const struct PP_BrowserFont_Trusted_Description* description,
+      PP_PrivateFontCharset charset);
+  PP_Bool (*IsFlashFontFile)(PP_Resource resource);
+  PP_Bool (*GetFontTable)(PP_Resource font_file,
+                          uint32_t table,
+                          void* output,
+                          uint32_t* output_length);
+};
 /**
  * @}
  */
diff --git a/ppapi/cpp/private/flash_font_file.cc b/ppapi/cpp/private/flash_font_file.cc
index 573d9dca..30a5f66 100644
--- a/ppapi/cpp/private/flash_font_file.cc
+++ b/ppapi/cpp/private/flash_font_file.cc
@@ -17,6 +17,10 @@
   return PPB_FLASH_FONTFILE_INTERFACE_0_1;
 }
 
+template <> const char* interface_name<PPB_Flash_FontFile_0_2>() {
+  return PPB_FLASH_FONTFILE_INTERFACE_0_2;
+}
+
 }  // namespace
 
 namespace flash {
@@ -27,7 +31,11 @@
 FontFile::FontFile(const InstanceHandle& instance,
                    const PP_BrowserFont_Trusted_Description* description,
                    PP_PrivateFontCharset charset) {
-  if (has_interface<PPB_Flash_FontFile_0_1>()) {
+  if (has_interface<PPB_Flash_FontFile_0_2>()) {
+    PassRefFromConstructor(get_interface<PPB_Flash_FontFile_0_2>()->Create(
+        instance.pp_instance(), description, charset));
+  }
+  else if (has_interface<PPB_Flash_FontFile_0_1>()) {
     PassRefFromConstructor(get_interface<PPB_Flash_FontFile_0_1>()->Create(
         instance.pp_instance(), description, charset));
   }
@@ -38,13 +46,24 @@
 
 // static
 bool FontFile::IsAvailable() {
-  return has_interface<PPB_Flash_FontFile_0_1>();
+  return (has_interface<PPB_Flash_FontFile_0_2>() ||
+          has_interface<PPB_Flash_FontFile_0_1>());
+}
+
+bool FontFile::IsSupportedForWindows() {
+  if (has_interface<PPB_Flash_FontFile_0_2>())
+    return !!get_interface<PPB_Flash_FontFile_0_2>()->IsSupportedForWindows();
+  return false;
 }
 
 bool FontFile::GetFontTable(uint32_t table,
                             void* output,
                             uint32_t* output_length) {
-  if (has_interface<PPB_Flash_FontFile_0_1>()) {
+  if (has_interface<PPB_Flash_FontFile_0_2>()) {
+    return !!get_interface<PPB_Flash_FontFile_0_2>()->
+        GetFontTable(pp_resource(), table, output, output_length);
+  }
+  else if (has_interface<PPB_Flash_FontFile_0_1>()) {
     return !!get_interface<PPB_Flash_FontFile_0_1>()->
         GetFontTable(pp_resource(), table, output, output_length);
   }
diff --git a/ppapi/cpp/private/flash_font_file.h b/ppapi/cpp/private/flash_font_file.h
index 053fca2..ea1671c1 100644
--- a/ppapi/cpp/private/flash_font_file.h
+++ b/ppapi/cpp/private/flash_font_file.h
@@ -28,6 +28,9 @@
   // Returns true if the required interface is available.
   static bool IsAvailable();
 
+  // Returns true if this interface is supported for Windows.
+  bool IsSupportedForWindows();
+
   bool GetFontTable(uint32_t table, void* output, uint32_t* output_length);
 };
 
diff --git a/ppapi/thunk/interfaces_ppb_private_flash.h b/ppapi/thunk/interfaces_ppb_private_flash.h
index 8957526..b334742 100644
--- a/ppapi/thunk/interfaces_ppb_private_flash.h
+++ b/ppapi/thunk/interfaces_ppb_private_flash.h
@@ -37,6 +37,8 @@
 
 PROXIED_IFACE(PPB_FLASH_FONTFILE_INTERFACE_0_1,
               PPB_Flash_FontFile_0_1)
+PROXIED_IFACE(PPB_FLASH_FONTFILE_INTERFACE_0_2,
+              PPB_Flash_FontFile_0_2)
 
 PROXIED_IFACE(PPB_FLASH_MENU_INTERFACE_0_2,
               PPB_Flash_Menu_0_2)
diff --git a/ppapi/thunk/ppb_flash_font_file_thunk.cc b/ppapi/thunk/ppb_flash_font_file_thunk.cc
index 3a07365..aaa81fa 100644
--- a/ppapi/thunk/ppb_flash_font_file_thunk.cc
+++ b/ppapi/thunk/ppb_flash_font_file_thunk.cc
@@ -2,11 +2,14 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+// From private/ppb_flash_font_file.idl modified Thu Oct 22 22:02:40 2015.
+
+#include "ppapi/c/pp_errors.h"
 #include "ppapi/c/private/ppb_flash_font_file.h"
+#include "ppapi/shared_impl/tracked_callback.h"
 #include "ppapi/thunk/enter.h"
+#include "ppapi/thunk/ppapi_thunk_export.h"
 #include "ppapi/thunk/ppb_flash_font_file_api.h"
-#include "ppapi/thunk/resource_creation_api.h"
-#include "ppapi/thunk/thunk.h"
 
 namespace ppapi {
 namespace thunk {
@@ -14,8 +17,9 @@
 namespace {
 
 PP_Resource Create(PP_Instance instance,
-                   const PP_BrowserFont_Trusted_Description* description,
+                   const struct PP_BrowserFont_Trusted_Description* description,
                    PP_PrivateFontCharset charset) {
+  VLOG(4) << "PPB_Flash_FontFile::Create()";
   EnterResourceCreation enter(instance);
   if (enter.failed())
     return 0;
@@ -23,6 +27,7 @@
 }
 
 PP_Bool IsFlashFontFile(PP_Resource resource) {
+  VLOG(4) << "PPB_Flash_FontFile::IsFlashFontFile()";
   EnterResource<PPB_Flash_FontFile_API> enter(resource, false);
   return PP_FromBool(enter.succeeded());
 }
@@ -31,22 +36,34 @@
                      uint32_t table,
                      void* output,
                      uint32_t* output_length) {
+  VLOG(4) << "PPB_Flash_FontFile::GetFontTable()";
   EnterResource<PPB_Flash_FontFile_API> enter(font_file, true);
   if (enter.failed())
     return PP_FALSE;
   return enter.object()->GetFontTable(table, output, output_length);
 }
 
-const PPB_Flash_FontFile g_ppb_flash_fontfile_thunk = {
-  &Create,
-  &IsFlashFontFile,
-  &GetFontTable
-};
+PP_Bool IsSupportedForWindows(void) {
+  VLOG(4) << "PPB_Flash_FontFile::IsSupportedForWindows()";
+  return PP_TRUE;
+}
+
+const PPB_Flash_FontFile_0_1 g_ppb_flash_fontfile_thunk_0_1 = {
+    &Create, &IsFlashFontFile, &GetFontTable};
+
+const PPB_Flash_FontFile_0_2 g_ppb_flash_fontfile_thunk_0_2 = {
+    &Create, &IsFlashFontFile, &GetFontTable, &IsSupportedForWindows};
 
 }  // namespace
 
-const PPB_Flash_FontFile_0_1* GetPPB_Flash_FontFile_0_1_Thunk() {
-  return &g_ppb_flash_fontfile_thunk;
+PPAPI_THUNK_EXPORT const PPB_Flash_FontFile_0_1*
+GetPPB_Flash_FontFile_0_1_Thunk() {
+  return &g_ppb_flash_fontfile_thunk_0_1;
+}
+
+PPAPI_THUNK_EXPORT const PPB_Flash_FontFile_0_2*
+GetPPB_Flash_FontFile_0_2_Thunk() {
+  return &g_ppb_flash_fontfile_thunk_0_2;
 }
 
 }  // namespace thunk
