Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / xwalk / application / browser / application_protocols.cc
index 78a252e..67d668d 100644 (file)
@@ -34,7 +34,7 @@
 #include "xwalk/application/common/application_resource.h"
 #include "xwalk/application/common/constants.h"
 #include "xwalk/application/common/manifest_handlers/csp_handler.h"
-#include "xwalk/application/common/manifest_handlers/main_document_handler.h"
+#include "xwalk/runtime/common/xwalk_system_locale.h"
 
 using content::BrowserThread;
 using content::ResourceRequestInfo;
@@ -85,58 +85,6 @@ net::HttpResponseHeaders* BuildHttpHeaders(
   return new net::HttpResponseHeaders(raw_headers);
 }
 
-class GeneratedMainDocumentJob: public net::URLRequestSimpleJob {
- public:
-  GeneratedMainDocumentJob(
-      net::URLRequest* request,
-      net::NetworkDelegate* network_delegate,
-      const base::FilePath& relative_path,
-      const scoped_refptr<const ApplicationData> application,
-      const std::string& content_security_policy)
-    : net::URLRequestSimpleJob(request, network_delegate),
-      application_(application),
-      mime_type_("text/html"),
-      relative_path_(relative_path),
-      content_security_policy_(content_security_policy) {
-  }
-
-  // Overridden from URLRequestSimpleJob:
-  virtual int GetData(std::string* mime_type,
-                      std::string* charset,
-                      std::string* data,
-                      const net::CompletionCallback& callback) const OVERRIDE {
-    *mime_type = mime_type_;
-    *charset = "utf-8";
-    *data = "<!DOCTYPE html>\n<body>\n";
-
-    MainDocumentInfo* main_info = xwalk::application::ToMainDocumentInfo(
-        application_->GetManifestData(keys::kAppMainKey));
-    const std::vector<std::string>& main_scripts = main_info->GetMainScripts();
-    for (size_t i = 0; i < main_scripts.size(); ++i) {
-      *data += "<script src=\"";
-      *data += main_scripts[i];
-      *data += "\"></script>\n";
-    }
-    return net::OK;
-  }
-
-  virtual void GetResponseInfo(net::HttpResponseInfo* info) OVERRIDE {
-    response_info_.headers = BuildHttpHeaders(content_security_policy_,
-                                              mime_type_, "GET", relative_path_,
-                                              relative_path_, true);
-    *info = response_info_;
-  }
-
- private:
-  virtual ~GeneratedMainDocumentJob() {}
-
-  scoped_refptr<const ApplicationData> application_;
-  const std::string mime_type_;
-  const base::FilePath relative_path_;
-  net::HttpResponseInfo response_info_;
-  std::string content_security_policy_;
-};
-
 void ReadResourceFilePath(
     const ApplicationResource& resource,
     base::FilePath* file_path) {
@@ -265,12 +213,33 @@ class ApplicationProtocolHandler
   DISALLOW_COPY_AND_ASSIGN(ApplicationProtocolHandler);
 };
 
+// The |locale| should be expanded to user agent locale.
+// Such as, "en-us" will be expaned as "en-us, en".
+void GetUserAgentLocales(const std::string& sys_locale,
+                         std::list<std::string>& ua_locales) {  // NOLINT
+  if (sys_locale.empty())
+    return;
+
+  std::string locale = base::StringToLowerASCII(sys_locale);
+  size_t position;
+  do {
+    ua_locales.push_back(locale);
+    position = locale.find_last_of("-");
+    locale = locale.substr(0, position);
+  } while (position != std::string::npos);
+}
+
 net::URLRequestJob*
 ApplicationProtocolHandler::MaybeCreateJob(
     net::URLRequest* request, net::NetworkDelegate* network_delegate) const {
   const std::string& application_id = request->url().host();
   scoped_refptr<ApplicationData> application =
       cache_.GetApplicationData(application_id);
+
+  if (!application)
+    return new net::URLRequestErrorJob(
+        request, network_delegate, net::ERR_FILE_NOT_FOUND);
+
   base::FilePath relative_path =
       ApplicationURLToRelativeFilePath(request->url());
   base::FilePath directory_path;
@@ -294,16 +263,13 @@ ApplicationProtocolHandler::MaybeCreateJob(
   }
 
   const std::string& path = request->url().path();
-  if (application &&
-      path.size() > 1 &&
-      path.substr(1) == kGeneratedMainDocumentFilename) {
-    return new GeneratedMainDocumentJob(request, network_delegate,
-                                        relative_path, application,
-                                        content_security_policy);
-  }
 
   std::list<std::string> locales;
-  // FIXME(Xinchao): Get the user agent locales into |locales|.
+  if (application && application->GetPackageType() == Package::WGT) {
+    GetUserAgentLocales(GetSystemLocale(), locales);
+    GetUserAgentLocales(application->GetManifest()->default_locale(), locales);
+  }
+
   return new URLRequestApplicationJob(
       request,
       network_delegate,