#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"
#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)
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
}
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(
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