Upstream version 6.34.113.0
[platform/framework/web/crosswalk.git] / src / xwalk / runtime / renderer / xwalk_content_renderer_client.cc
index e856a30..554a963 100644 (file)
@@ -5,9 +5,12 @@
 #include "xwalk/runtime/renderer/xwalk_content_renderer_client.h"
 
 #include "base/strings/utf_string_conversions.h"
+#include "components/visitedlink/renderer/visitedlink_slave.h"
 #include "content/public/renderer/render_thread.h"
+#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/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"
@@ -17,6 +20,8 @@
 #include "xwalk/runtime/renderer/android/xwalk_permission_client.h"
 #include "xwalk/runtime/renderer/android/xwalk_render_process_observer.h"
 #include "xwalk/runtime/renderer/android/xwalk_render_view_ext.h"
+#else
+#include "third_party/WebKit/public/web/WebFrame.h"
 #endif
 
 #if defined(OS_TIZEN_MOBILE)
@@ -51,10 +56,12 @@ void XWalkContentRendererClient::RenderThreadStarted() {
   blink::WebSecurityPolicy::registerURLSchemeAsSecure(application_scheme);
   blink::WebSecurityPolicy::registerURLSchemeAsCORSEnabled(application_scheme);
 
-#if defined(OS_ANDROID)
   content::RenderThread* thread = content::RenderThread::Get();
   xwalk_render_process_observer_.reset(new XWalkRenderProcessObserver);
   thread->AddObserver(xwalk_render_process_observer_.get());
+#if defined(OS_ANDROID)
+  visited_link_slave_.reset(new visitedlink::VisitedLinkSlave);
+  thread->AddObserver(visited_link_slave_.get());
 #endif
 }
 
@@ -76,6 +83,10 @@ void XWalkContentRendererClient::DidCreateScriptContext(
     blink::WebFrame* frame, v8::Handle<v8::Context> context,
     int extension_group, int world_id) {
   extension_controller_->DidCreateScriptContext(frame, context);
+#if !defined(OS_ANDROID)
+  xwalk_render_process_observer_->DidCreateScriptContext(
+      frame, context, extension_group, world_id);
+#endif
 }
 
 void XWalkContentRendererClient::WillReleaseScriptContext(
@@ -93,6 +104,42 @@ void XWalkContentRendererClient::DidCreateModuleSystem(
   module_system->RegisterNativeModule("sysapps_promise",
       extensions::CreateJSModuleFromResource(
           IDR_XWALK_SYSAPPS_COMMON_PROMISE_API));
+  module_system->RegisterNativeModule("widget_common",
+      extensions::CreateJSModuleFromResource(
+          IDR_XWALK_APPLICATION_WIDGET_COMMON_API));
+}
+
+#if defined(OS_ANDROID)
+unsigned long long XWalkContentRendererClient::VisitedLinkHash(
+    const char* canonical_url, size_t length) {
+  return visited_link_slave_->ComputeURLFingerprint(canonical_url, length);
 }
 
+bool XWalkContentRendererClient::IsLinkVisited(unsigned long long link_hash) {
+  return visited_link_slave_->IsVisited(link_hash);
+}
+#endif
+
+bool XWalkContentRendererClient::WillSendRequest(blink::WebFrame* frame,
+                     content::PageTransition transition_type,
+                     const GURL& url,
+                     const GURL& first_party_for_cookies,
+                     GURL* new_url) {
+#if defined(OS_ANDROID)
+  return false;
+#else
+  if (!xwalk_render_process_observer_->IsWarpMode())
+    return false;
+  GURL origin_url(frame->document().url());
+  if (origin_url.spec().empty() ||
+     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();
+  *new_url = GURL();
+  return true;
+#endif
+}
 }  // namespace xwalk