Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / content / browser / renderer_host / pepper / content_browser_pepper_host_factory.cc
index 39e778d..65c33b0 100644 (file)
@@ -6,6 +6,7 @@
 
 #include "content/browser/renderer_host/pepper/browser_ppapi_host_impl.h"
 #include "content/browser/renderer_host/pepper/pepper_browser_font_singleton_host.h"
+#include "content/browser/renderer_host/pepper/pepper_file_io_host.h"
 #include "content/browser/renderer_host/pepper/pepper_file_ref_host.h"
 #include "content/browser/renderer_host/pepper/pepper_file_system_browser_host.h"
 #include "content/browser/renderer_host/pepper/pepper_flash_file_message_filter.h"
@@ -17,6 +18,7 @@
 #include "content/browser/renderer_host/pepper/pepper_printing_host.h"
 #include "content/browser/renderer_host/pepper/pepper_tcp_server_socket_message_filter.h"
 #include "content/browser/renderer_host/pepper/pepper_tcp_socket_message_filter.h"
+#include "content/browser/renderer_host/pepper/pepper_truetype_font_host.h"
 #include "content/browser/renderer_host/pepper/pepper_truetype_font_list_host.h"
 #include "content/browser/renderer_host/pepper/pepper_udp_socket_message_filter.h"
 #include "ppapi/host/message_filter_host.h"
@@ -28,6 +30,7 @@
 using ppapi::host::MessageFilterHost;
 using ppapi::host::ResourceHost;
 using ppapi::host::ResourceMessageFilter;
+using ppapi::proxy::SerializedTrueTypeFontDesc;
 using ppapi::UnpackMessage;
 
 namespace content {
@@ -37,22 +40,19 @@ namespace {
 const size_t kMaxSocketsAllowed = 1024;
 
 bool CanCreateSocket() {
-  return
-      PepperTCPServerSocketMessageFilter::GetNumInstances() +
-      PepperTCPSocketMessageFilter::GetNumInstances() +
-      PepperUDPSocketMessageFilter::GetNumInstances() <
-      kMaxSocketsAllowed;
+  return PepperTCPServerSocketMessageFilter::GetNumInstances() +
+             PepperTCPSocketMessageFilter::GetNumInstances() +
+             PepperUDPSocketMessageFilter::GetNumInstances() <
+         kMaxSocketsAllowed;
 }
 
 }  // namespace
 
 ContentBrowserPepperHostFactory::ContentBrowserPepperHostFactory(
     BrowserPpapiHostImpl* host)
-    : host_(host) {
-}
+    : host_(host) {}
 
-ContentBrowserPepperHostFactory::~ContentBrowserPepperHostFactory() {
-}
+ContentBrowserPepperHostFactory::~ContentBrowserPepperHostFactory() {}
 
 scoped_ptr<ResourceHost> ContentBrowserPepperHostFactory::CreateResourceHost(
     ppapi::host::PpapiHost* host,
@@ -67,10 +67,14 @@ scoped_ptr<ResourceHost> ContentBrowserPepperHostFactory::CreateResourceHost(
 
   // Public interfaces.
   switch (message.type()) {
+    case PpapiHostMsg_FileIO_Create::ID: {
+      return scoped_ptr<ResourceHost>(
+          new PepperFileIOHost(host_, instance, params.pp_resource()));
+    }
     case PpapiHostMsg_FileSystem_Create::ID: {
       PP_FileSystemType file_system_type;
-      if (!ppapi::UnpackMessage<PpapiHostMsg_FileSystem_Create>(message,
-          &file_system_type)) {
+      if (!ppapi::UnpackMessage<PpapiHostMsg_FileSystem_Create>(
+              message, &file_system_type)) {
         NOTREACHED();
         return scoped_ptr<ResourceHost>();
       }
@@ -78,25 +82,27 @@ scoped_ptr<ResourceHost> ContentBrowserPepperHostFactory::CreateResourceHost(
           host_, instance, params.pp_resource(), file_system_type));
     }
     case PpapiHostMsg_Gamepad_Create::ID: {
-      return scoped_ptr<ResourceHost>(new PepperGamepadHost(
-          host_, instance, params.pp_resource()));
+      return scoped_ptr<ResourceHost>(
+          new PepperGamepadHost(host_, instance, params.pp_resource()));
     }
     case PpapiHostMsg_NetworkProxy_Create::ID: {
-      return scoped_ptr<ResourceHost>(new PepperNetworkProxyHost(
-          host_, instance, params.pp_resource()));
+      return scoped_ptr<ResourceHost>(
+          new PepperNetworkProxyHost(host_, instance, params.pp_resource()));
     }
     case PpapiHostMsg_HostResolver_Create::ID: {
       scoped_refptr<ResourceMessageFilter> host_resolver(
           new PepperHostResolverMessageFilter(host_, instance, false));
-      return scoped_ptr<ResourceHost>(new MessageFilterHost(
-          host_->GetPpapiHost(), instance, params.pp_resource(),
-          host_resolver));
+      return scoped_ptr<ResourceHost>(
+          new MessageFilterHost(host_->GetPpapiHost(),
+                                instance,
+                                params.pp_resource(),
+                                host_resolver));
     }
-    case PpapiHostMsg_FileRef_CreateInternal::ID: {
+    case PpapiHostMsg_FileRef_CreateForFileAPI::ID: {
       PP_Resource file_system;
       std::string internal_path;
-      if (!UnpackMessage<PpapiHostMsg_FileRef_CreateInternal>(
-          message, &file_system, &internal_path)) {
+      if (!UnpackMessage<PpapiHostMsg_FileRef_CreateForFileAPI>(
+              message, &file_system, &internal_path)) {
         NOTREACHED();
         return scoped_ptr<ResourceHost>();
       }
@@ -130,9 +136,25 @@ scoped_ptr<ResourceHost> ContentBrowserPepperHostFactory::CreateResourceHost(
       case PpapiHostMsg_Printing_Create::ID: {
         scoped_ptr<PepperPrintSettingsManager> manager(
             new PepperPrintSettingsManagerImpl());
-        return scoped_ptr<ResourceHost>(new PepperPrintingHost(
-            host_->GetPpapiHost(), instance,
-            params.pp_resource(), manager.Pass()));
+        return scoped_ptr<ResourceHost>(
+            new PepperPrintingHost(host_->GetPpapiHost(),
+                                   instance,
+                                   params.pp_resource(),
+                                   manager.Pass()));
+      }
+      case PpapiHostMsg_TrueTypeFont_Create::ID: {
+        SerializedTrueTypeFontDesc desc;
+        if (!UnpackMessage<PpapiHostMsg_TrueTypeFont_Create>(message, &desc)) {
+          NOTREACHED();
+          return scoped_ptr<ResourceHost>();
+        }
+        // Check that the family name is valid UTF-8 before passing it to the
+        // host OS.
+        if (!base::IsStringUTF8(desc.family))
+          return scoped_ptr<ResourceHost>();
+
+        return scoped_ptr<ResourceHost>(new PepperTrueTypeFontHost(
+            host_, instance, params.pp_resource(), desc));
       }
       case PpapiHostMsg_TrueTypeFontSingleton_Create::ID: {
         return scoped_ptr<ResourceHost>(new PepperTrueTypeFontListHost(
@@ -166,16 +188,18 @@ scoped_ptr<ResourceHost> ContentBrowserPepperHostFactory::CreateResourceHost(
     if (CanCreateSocket()) {
       scoped_refptr<ResourceMessageFilter> tcp_server_socket(
           new PepperTCPServerSocketMessageFilter(this, host_, instance, true));
-      return scoped_ptr<ResourceHost>(new MessageFilterHost(
-          host_->GetPpapiHost(), instance, params.pp_resource(),
-          tcp_server_socket));
+      return scoped_ptr<ResourceHost>(
+          new MessageFilterHost(host_->GetPpapiHost(),
+                                instance,
+                                params.pp_resource(),
+                                tcp_server_socket));
     } else {
       return scoped_ptr<ResourceHost>();
     }
   }
   if (message.type() == PpapiHostMsg_TCPSocket_CreatePrivate::ID) {
-    return CreateNewTCPSocket(instance, params.pp_resource(),
-                              ppapi::TCP_SOCKET_VERSION_PRIVATE);
+    return CreateNewTCPSocket(
+        instance, params.pp_resource(), ppapi::TCP_SOCKET_VERSION_PRIVATE);
   }
   if (message.type() == PpapiHostMsg_UDPSocket_CreatePrivate::ID) {
     if (CanCreateSocket()) {
@@ -198,9 +222,11 @@ scoped_ptr<ResourceHost> ContentBrowserPepperHostFactory::CreateResourceHost(
       case PpapiHostMsg_FlashFile_Create::ID: {
         scoped_refptr<ResourceMessageFilter> file_filter(
             new PepperFlashFileMessageFilter(instance, host_));
-        return scoped_ptr<ResourceHost>(new MessageFilterHost(
-            host_->GetPpapiHost(), instance, params.pp_resource(),
-            file_filter));
+        return scoped_ptr<ResourceHost>(
+            new MessageFilterHost(host_->GetPpapiHost(),
+                                  instance,
+                                  params.pp_resource(),
+                                  file_filter));
       }
     }
   }
@@ -216,10 +242,10 @@ ContentBrowserPepperHostFactory::CreateAcceptedTCPSocket(
   if (!CanCreateSocket())
     return scoped_ptr<ResourceHost>();
   scoped_refptr<ResourceMessageFilter> tcp_socket(
-      new PepperTCPSocketMessageFilter(host_, instance, version,
-                                       socket.Pass()));
-  return scoped_ptr<ResourceHost>(new MessageFilterHost(
-      host_->GetPpapiHost(), instance, 0, tcp_socket));
+      new PepperTCPSocketMessageFilter(
+          host_, instance, version, socket.Pass()));
+  return scoped_ptr<ResourceHost>(
+      new MessageFilterHost(host_->GetPpapiHost(), instance, 0, tcp_socket));
 }
 
 scoped_ptr<ppapi::host::ResourceHost>
@@ -239,8 +265,8 @@ ContentBrowserPepperHostFactory::CreateNewTCPSocket(
       host_->GetPpapiHost(), instance, resource, tcp_socket));
 }
 
-const ppapi::PpapiPermissions&
-ContentBrowserPepperHostFactory::GetPermissions() const {
+const ppapi::PpapiPermissions& ContentBrowserPepperHostFactory::GetPermissions()
+    const {
   return host_->GetPpapiHost()->permissions();
 }