Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / extensions / shell / common / shell_content_client.cc
index 5f0df03..ff51a83 100644 (file)
@@ -8,10 +8,35 @@
 #include "base/strings/utf_string_conversions.h"
 #include "content/public/common/user_agent.h"
 #include "extensions/common/constants.h"
+#include "extensions/shell/common/version.h"  // Generated file.
 #include "ui/base/l10n/l10n_util.h"
 #include "ui/base/resource/resource_bundle.h"
 
+#if !defined(DISABLE_NACL)
+#include "base/base_paths.h"
+#include "base/files/file_path.h"
+#include "base/path_service.h"
+#include "components/nacl/common/nacl_constants.h"
+#include "content/public/common/pepper_plugin_info.h"
+#include "ppapi/native_client/src/trusted/plugin/ppapi_entrypoints.h"
+#include "ppapi/shared_impl/ppapi_permissions.h"
+#endif
+
 namespace extensions {
+namespace {
+
+#if !defined(DISABLE_NACL)
+bool GetNaClPluginPath(base::FilePath* path) {
+  // On Posix, plugins live in the module directory.
+  base::FilePath module;
+  if (!PathService::Get(base::DIR_MODULE, &module))
+    return false;
+  *path = module.Append(nacl::kInternalNaClPluginFileName);
+  return true;
+}
+#endif  // !defined(DISABLE_NACL)
+
+}  // namespace
 
 ShellContentClient::ShellContentClient() {
 }
@@ -19,6 +44,36 @@ ShellContentClient::ShellContentClient() {
 ShellContentClient::~ShellContentClient() {
 }
 
+void ShellContentClient::AddPepperPlugins(
+    std::vector<content::PepperPluginInfo>* plugins) {
+#if !defined(DISABLE_NACL)
+  base::FilePath path;
+  if (!GetNaClPluginPath(&path))
+    return;
+
+  content::PepperPluginInfo nacl;
+  // The nacl plugin is now built into the binary.
+  nacl.is_internal = true;
+  nacl.path = path;
+  nacl.name = nacl::kNaClPluginName;
+  content::WebPluginMimeType nacl_mime_type(nacl::kNaClPluginMimeType,
+                                            nacl::kNaClPluginExtension,
+                                            nacl::kNaClPluginDescription);
+  nacl.mime_types.push_back(nacl_mime_type);
+  content::WebPluginMimeType pnacl_mime_type(nacl::kPnaclPluginMimeType,
+                                             nacl::kPnaclPluginExtension,
+                                             nacl::kPnaclPluginDescription);
+  nacl.mime_types.push_back(pnacl_mime_type);
+  nacl.internal_entry_points.get_interface = nacl_plugin::PPP_GetInterface;
+  nacl.internal_entry_points.initialize_module =
+      nacl_plugin::PPP_InitializeModule;
+  nacl.internal_entry_points.shutdown_module =
+      nacl_plugin::PPP_ShutdownModule;
+  nacl.permissions = ppapi::PERMISSION_PRIVATE | ppapi::PERMISSION_DEV;
+  plugins->push_back(nacl);
+#endif  // !defined(DISABLE_NACL)
+}
+
 void ShellContentClient::AddAdditionalSchemes(
     std::vector<std::string>* standard_schemes,
     std::vector<std::string>* savable_schemes) {
@@ -29,9 +84,9 @@ void ShellContentClient::AddAdditionalSchemes(
 }
 
 std::string ShellContentClient::GetUserAgent() const {
-  // TODO(derat): Figure out what this should be for app_shell and determine
-  // whether we need to include a version number to placate browser sniffing.
-  return content::BuildUserAgentFromProduct("Chrome");
+  // Must contain a user agent string for version sniffing. For example,
+  // pluginless WebRTC Hangouts checks the Chrome version number.
+  return content::BuildUserAgentFromProduct("Chrome/" PRODUCT_VERSION);
 }
 
 base::string16 ShellContentClient::GetLocalizedString(int message_id) const {