Upstream version 6.35.131.0
[platform/framework/web/crosswalk.git] / src / xwalk / runtime / renderer / xwalk_content_renderer_client.cc
index b084d7e..0f28aa3 100644 (file)
 #include "grit/xwalk_application_resources.h"
 #include "grit/xwalk_sysapps_resources.h"
 #include "third_party/WebKit/public/platform/WebString.h"
+#include "third_party/WebKit/public/platform/WebURLRequest.h"
 #include "third_party/WebKit/public/web/WebDocument.h"
 #include "third_party/WebKit/public/web/WebSecurityPolicy.h"
 #include "xwalk/application/common/constants.h"
 #include "xwalk/application/renderer/application_native_module.h"
 #include "xwalk/extensions/renderer/xwalk_js_module.h"
+#include "xwalk/runtime/common/xwalk_localized_error.h"
 
 #if defined(OS_ANDROID)
 #include "xwalk/runtime/renderer/android/xwalk_permission_client.h"
 #include "xwalk/runtime/renderer/tizen/xwalk_content_renderer_client_tizen.h"
 #endif
 
+#if defined(OS_TIZEN)
+#include "xwalk/runtime/renderer/tizen/xwalk_render_view_ext_tizen.h"
+#endif
+
 namespace xwalk {
 
 namespace {
@@ -111,6 +117,8 @@ void XWalkContentRendererClient::RenderViewCreated(
     content::RenderView* render_view) {
 #if defined(OS_ANDROID)
   XWalkRenderViewExt::RenderViewCreated(render_view);
+#elif defined(OS_TIZEN)
+  XWalkRenderViewExtTizen::RenderViewCreated(render_view);
 #endif
 }
 
@@ -158,22 +166,42 @@ bool XWalkContentRendererClient::WillSendRequest(blink::WebFrame* frame,
 #if defined(OS_ANDROID)
   return false;
 #else
-  if (!xwalk_render_process_observer_->IsWarpMode())
+  if (!xwalk_render_process_observer_->IsWarpMode()
+#if defined(OS_TIZEN)
+      && !xwalk_render_process_observer_->IsCSPMode()
+#endif
+      )
     return false;
 
   GURL origin_url(frame->document().url());
   GURL app_url(xwalk_render_process_observer_->app_url());
-  if ((url.scheme() == app_url.scheme() &&
-       url.host() == app_url.host()) ||
+#if defined(OS_TIZEN)
+  // if under CSP mode.
+  if (xwalk_render_process_observer_->IsCSPMode()) {
+    if (url.GetOrigin() != app_url.GetOrigin() &&
+        origin_url != first_party_for_cookies &&
+        first_party_for_cookies.GetOrigin() != app_url.GetOrigin() &&
+        !frame->document().securityOrigin().canRequest(url)) {
+      LOG(INFO) << "[BLOCK] allow-navigation: " << url.spec();
+      content::RenderThread::Get()->Send(new ViewMsg_OpenLinkExternal(url));
+      *new_url = GURL();
+      return true;
+    }
+    return false;
+  }
+#endif
+  // if under WARP mode.
+  if (url.GetOrigin() == app_url.GetOrigin() ||
       frame->document().securityOrigin().canRequest(url)) {
     LOG(INFO) << "[PASS] " << origin_url.spec() << " request " << url.spec();
     return false;
   }
 
   LOG(INFO) << "[BLOCK] " << origin_url.spec() << " request " << url.spec();
-
 #if defined(OS_TIZEN)
-  if (origin_url.spec().empty())
+  if (url.GetOrigin() != app_url.GetOrigin() &&
+      origin_url != first_party_for_cookies &&
+      first_party_for_cookies.GetOrigin() != app_url.GetOrigin())
     content::RenderThread::Get()->Send(new ViewMsg_OpenLinkExternal(url));
 #endif
 
@@ -181,4 +209,21 @@ bool XWalkContentRendererClient::WillSendRequest(blink::WebFrame* frame,
   return true;
 #endif
 }
+
+void XWalkContentRendererClient::GetNavigationErrorStrings(
+    content::RenderView* render_view,
+    blink::WebFrame* frame,
+    const blink::WebURLRequest& failed_request,
+    const blink::WebURLError& error,
+    std::string* error_html,
+    base::string16* error_description) {
+  bool is_post = EqualsASCII(failed_request.httpMethod(), "POST");
+
+  // TODO(guangzhen): Check whether error_html is needed in xwalk runtime.
+
+  if (error_description) {
+    *error_description = LocalizedError::GetErrorDetails(error, is_post);
+  }
+}
+
 }  // namespace xwalk