1 // Copyright (c) 2013 Intel Corporation. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "xwalk/runtime/renderer/xwalk_content_renderer_client.h"
7 #include "base/strings/utf_string_conversions.h"
8 #include "components/visitedlink/renderer/visitedlink_slave.h"
9 #include "content/public/renderer/render_thread.h"
10 #include "grit/xwalk_application_resources.h"
11 #include "grit/xwalk_sysapps_resources.h"
12 #include "third_party/WebKit/public/platform/WebString.h"
13 #include "third_party/WebKit/public/web/WebDocument.h"
14 #include "third_party/WebKit/public/web/WebSecurityPolicy.h"
15 #include "xwalk/application/common/constants.h"
16 #include "xwalk/application/renderer/application_native_module.h"
17 #include "xwalk/extensions/renderer/xwalk_js_module.h"
19 #if defined(OS_ANDROID)
20 #include "xwalk/runtime/renderer/android/xwalk_permission_client.h"
21 #include "xwalk/runtime/renderer/android/xwalk_render_process_observer.h"
22 #include "xwalk/runtime/renderer/android/xwalk_render_view_ext.h"
24 #include "third_party/WebKit/public/web/WebFrame.h"
27 #if defined(OS_TIZEN_MOBILE)
28 #include "xwalk/runtime/renderer/tizen/xwalk_content_renderer_client_tizen.h"
34 XWalkContentRendererClient* g_renderer_client;
37 XWalkContentRendererClient* XWalkContentRendererClient::Get() {
38 return g_renderer_client;
41 XWalkContentRendererClient::XWalkContentRendererClient() {
42 DCHECK(!g_renderer_client);
43 g_renderer_client = this;
46 XWalkContentRendererClient::~XWalkContentRendererClient() {
47 g_renderer_client = NULL;
50 void XWalkContentRendererClient::RenderThreadStarted() {
51 extension_controller_.reset(
52 new extensions::XWalkExtensionRendererController(this));
54 blink::WebString application_scheme(
55 base::ASCIIToUTF16(application::kApplicationScheme));
56 blink::WebSecurityPolicy::registerURLSchemeAsSecure(application_scheme);
57 blink::WebSecurityPolicy::registerURLSchemeAsCORSEnabled(application_scheme);
59 content::RenderThread* thread = content::RenderThread::Get();
60 xwalk_render_process_observer_.reset(new XWalkRenderProcessObserver);
61 thread->AddObserver(xwalk_render_process_observer_.get());
62 #if defined(OS_ANDROID)
63 visited_link_slave_.reset(new visitedlink::VisitedLinkSlave);
64 thread->AddObserver(visited_link_slave_.get());
68 void XWalkContentRendererClient::RenderFrameCreated(
69 content::RenderFrame* render_frame) {
70 #if defined(OS_ANDROID)
71 new XWalkPermissionClient(render_frame);
75 void XWalkContentRendererClient::RenderViewCreated(
76 content::RenderView* render_view) {
77 #if defined(OS_ANDROID)
78 XWalkRenderViewExt::RenderViewCreated(render_view);
82 void XWalkContentRendererClient::DidCreateScriptContext(
83 blink::WebFrame* frame, v8::Handle<v8::Context> context,
84 int extension_group, int world_id) {
85 extension_controller_->DidCreateScriptContext(frame, context);
86 #if !defined(OS_ANDROID)
87 xwalk_render_process_observer_->DidCreateScriptContext(
88 frame, context, extension_group, world_id);
92 void XWalkContentRendererClient::WillReleaseScriptContext(
93 blink::WebFrame* frame, v8::Handle<v8::Context> context, int world_id) {
94 extension_controller_->WillReleaseScriptContext(frame, context);
97 void XWalkContentRendererClient::DidCreateModuleSystem(
98 extensions::XWalkModuleSystem* module_system) {
99 scoped_ptr<extensions::XWalkNativeModule> app_module(
100 new application::ApplicationNativeModule());
101 module_system->RegisterNativeModule("application", app_module.Pass());
102 module_system->RegisterNativeModule("sysapps_common",
103 extensions::CreateJSModuleFromResource(IDR_XWALK_SYSAPPS_COMMON_API));
104 module_system->RegisterNativeModule("sysapps_promise",
105 extensions::CreateJSModuleFromResource(
106 IDR_XWALK_SYSAPPS_COMMON_PROMISE_API));
107 module_system->RegisterNativeModule("widget_common",
108 extensions::CreateJSModuleFromResource(
109 IDR_XWALK_APPLICATION_WIDGET_COMMON_API));
112 #if defined(OS_ANDROID)
113 unsigned long long XWalkContentRendererClient::VisitedLinkHash(
114 const char* canonical_url, size_t length) {
115 return visited_link_slave_->ComputeURLFingerprint(canonical_url, length);
118 bool XWalkContentRendererClient::IsLinkVisited(unsigned long long link_hash) {
119 return visited_link_slave_->IsVisited(link_hash);
123 bool XWalkContentRendererClient::WillSendRequest(blink::WebFrame* frame,
124 content::PageTransition transition_type,
126 const GURL& first_party_for_cookies,
128 #if defined(OS_ANDROID)
131 if (!xwalk_render_process_observer_->IsWarpMode())
133 GURL origin_url(frame->document().url());
134 if (origin_url.spec().empty() ||
135 frame->document().securityOrigin().canRequest(url)) {
136 LOG(INFO) << "[PASS] " << origin_url.spec() << " request " << url.spec();
140 LOG(INFO) << "[BLOCK] " << origin_url.spec() << " request " << url.spec();