X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2Fxwalk%2Fruntime%2Frenderer%2Fandroid%2Fxwalk_render_process_observer.cc;h=7f1bd2cbe24872b8aca58a4645a4fe9c4c08b0cf;hb=40cf3eb6f8987f5a8d1c627f8ef6ff9bd571c97d;hp=45e6c56e1a4a129af092d9c40f1524f9ca87ced4;hpb=42dcc1327bbd3f24706b73963db769f667a58196;p=platform%2Fframework%2Fweb%2Fcrosswalk.git diff --git a/src/xwalk/runtime/renderer/android/xwalk_render_process_observer.cc b/src/xwalk/runtime/renderer/android/xwalk_render_process_observer.cc index 45e6c56..7f1bd2c 100644 --- a/src/xwalk/runtime/renderer/android/xwalk_render_process_observer.cc +++ b/src/xwalk/runtime/renderer/android/xwalk_render_process_observer.cc @@ -4,9 +4,15 @@ #include "xwalk/runtime/renderer/android/xwalk_render_process_observer.h" +#include "base/json/json_reader.h" +#include "base/values.h" +#include "content/public/common/url_constants.h" +#include "extensions/common/url_pattern.h" #include "ipc/ipc_message_macros.h" #include "third_party/WebKit/public/web/WebCache.h" #include "third_party/WebKit/public/web/WebNetworkStateNotifier.h" +#include "third_party/WebKit/public/web/WebSecurityPolicy.h" +#include "xwalk/runtime/browser/android/net/url_constants.h" #include "xwalk/runtime/common/android/xwalk_render_view_messages.h" namespace xwalk { @@ -24,6 +30,8 @@ bool XWalkRenderProcessObserver::OnControlMessageReceived( IPC_BEGIN_MESSAGE_MAP(XWalkRenderProcessObserver, message) IPC_MESSAGE_HANDLER(XWalkViewMsg_SetJsOnlineProperty, OnSetJsOnlineProperty) IPC_MESSAGE_HANDLER(XWalkViewMsg_ClearCache, OnClearCache); + IPC_MESSAGE_HANDLER(XWalkViewMsg_SetOriginAccessWhitelist, + OnSetOriginAccessWhitelist) IPC_MESSAGE_UNHANDLED(handled = false) IPC_END_MESSAGE_MAP() return handled; @@ -43,4 +51,49 @@ void XWalkRenderProcessObserver::OnClearCache() { blink::WebCache::clear(); } +void XWalkRenderProcessObserver::OnSetOriginAccessWhitelist( + std::string base_url, + std::string match_patterns) { + blink::WebSecurityPolicy::resetOriginAccessWhitelists(); + + DCHECK(!base_url.empty()); + if (base_url.empty() || match_patterns.empty()) + return; + + base::Value* patterns = base::JSONReader::Read(match_patterns); + if (!patterns) + return; + + base::ListValue* match_pattern_list = NULL; + if (!patterns->GetAsList(&match_pattern_list)) + return; + + const char* schemes[] = { + content::kHttpScheme, + content::kHttpsScheme, + content::kFileScheme, + xwalk::kAppScheme, + }; + size_t size = match_pattern_list->GetSize(); + for (size_t i = 0; i < size; i ++) { + std::string match_pattern; + if (!match_pattern_list->GetString(i, &match_pattern)) + continue; + + URLPattern allowedUrl(URLPattern::SCHEME_ALL); + if (allowedUrl.Parse(match_pattern) != URLPattern::PARSE_SUCCESS) + continue; + + for (size_t j = 0; j < arraysize(schemes); ++j) { + if (allowedUrl.MatchesScheme(schemes[j])) { + blink::WebSecurityPolicy::addOriginAccessWhitelistEntry( + blink::WebURL(GURL(base_url)), + blink::WebString::fromUTF8(schemes[j]), + blink::WebString::fromUTF8(allowedUrl.host()), + allowedUrl.match_subdomains()); + } + } + } +} + } // namespace xwalk