From: surya.kumar7 Date: Fri, 13 Jul 2018 16:25:29 +0000 (+0530) Subject: Handle Navigation policy from crosswalk-tizen X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=2a3df2cf595d83d769d317c1296d5f8e00b6e57f;p=platform%2Fframework%2Fweb%2Fcrosswalk-tizen.git Handle Navigation policy from crosswalk-tizen Before making navigations and creating new windows, WRT should authorise based on its policy(WARP) and determine whether navigation should be allowed or not Change-Id: I9816958da6d9900a8436aba8e246e377ab327fc9 Signed-off-by: surya.kumar7 --- diff --git a/atom/browser/api/atom_api_web_contents.cc b/atom/browser/api/atom_api_web_contents.cc index 43b1940b6..4365e2eaf 100644 --- a/atom/browser/api/atom_api_web_contents.cc +++ b/atom/browser/api/atom_api_web_contents.cc @@ -1036,6 +1036,10 @@ void WebContents::LoadURL(const GURL& url, const mate::Dictionary& options) { return; } + if (!atom::Browser::Get()->ShouldAllowNavigation(url.spec())) { + return; + } + content::NavigationController::LoadURLParams params(url); GURL http_referrer; diff --git a/atom/browser/atom_browser_client.cc b/atom/browser/atom_browser_client.cc index 9408fcfbf..6fefad7d0 100644 --- a/atom/browser/atom_browser_client.cc +++ b/atom/browser/atom_browser_client.cc @@ -324,6 +324,9 @@ bool AtomBrowserClient::CanCreateWindow( bool* no_javascript_access) { DCHECK_CURRENTLY_ON(content::BrowserThread::IO); + if (!atom::Browser::Get()->ShouldAllowNavigation(target_url.spec())) + return false; + if (IsRendererSandboxed(render_process_id)) { *no_javascript_access = false; return true; @@ -345,6 +348,10 @@ bool AtomBrowserClient::CanCreateWindow( return false; } +bool AtomBrowserClient::ShouldAllowOpenURL(content::SiteInstance* site_instance, const GURL& url) { + return atom::Browser::Get()->ShouldAllowNavigation(url.spec()); +} + void AtomBrowserClient::GetAdditionalAllowedSchemesForFileSystem( std::vector* additional_schemes) { auto schemes_list = api::GetStandardSchemes(); diff --git a/atom/browser/atom_browser_client.h b/atom/browser/atom_browser_client.h index a794fba4d..4d6d3dfcc 100644 --- a/atom/browser/atom_browser_client.h +++ b/atom/browser/atom_browser_client.h @@ -100,6 +100,7 @@ class AtomBrowserClient : public brightray::BrowserClient, bool* no_javascript_access) override; void GetAdditionalAllowedSchemesForFileSystem( std::vector* schemes) override; + bool ShouldAllowOpenURL(content::SiteInstance* site_instance, const GURL& url) override; // brightray::BrowserClient: brightray::BrowserMainParts* OverrideCreateBrowserMainParts( diff --git a/tizen/browser/tizen_browser_parts.cc b/tizen/browser/tizen_browser_parts.cc index 10dd2f64d..326e5cdd4 100644 --- a/tizen/browser/tizen_browser_parts.cc +++ b/tizen/browser/tizen_browser_parts.cc @@ -16,6 +16,7 @@ #include "atom/common/api/api_messages.h" #include "base/logging.h" +#include "common/string_utils.h" #include "tizen/browser/tizen_browser_parts.h" namespace tizen { @@ -25,6 +26,28 @@ namespace { const char* kDefaultCSPRule = "default-src *; script-src 'self'; style-src 'self'; object-src 'none';"; +static bool ProcessWellKnownScheme(const std::string& url) { + if (common::utils::StartsWith(url, "file:") || + common::utils::StartsWith(url, "app:") || + common::utils::StartsWith(url, "data:") || + common::utils::StartsWith(url, "http:") || + common::utils::StartsWith(url, "https:") || + common::utils::StartsWith(url, "widget:") || + common::utils::StartsWith(url, "about:") || + common::utils::StartsWith(url, "blob:")) { + return false; + } + + std::unique_ptr request( + common::AppControl::MakeAppcontrolFromURL(url)); + if (request.get() == NULL || !request->LaunchRequest()) { + LOG(ERROR) << "Fail to send appcontrol request: " << url; + } + + // Should return true, to stop the WebEngine progress step about this URL + return true; +} + } // namespace TizenBrowserParts::TizenBrowserParts() @@ -87,4 +110,25 @@ void TizenBrowserParts::Resume(content::RenderViewHost* rvh) { rvh->Send(new WrtViewMsg_ResumeScheduledTasks(rvh->GetRoutingID())); } +bool TizenBrowserParts::ShouldAllowNavigation(const std::string &url) { + // scheme handling + // except(file , http, https, app) pass to appcontrol and return false + if (ProcessWellKnownScheme(url)) { + return false; + } + + // send launch request for blocked URL to guarrenty backward-compatibility. + if (resource_manager_->AllowNavigation(url)) { + return true; + } else { + LOG(ERROR) << "URL is blocked. send launch request for URL : " << url; + std::unique_ptr request( + common::AppControl::MakeAppcontrolFromURL(url)); + if (request.get() == NULL || !request->LaunchRequest()) { + LOG(ERROR) << "Fail to send appcontrol request: " << url; + } + return false; + } } + +} // namespace tizen diff --git a/tizen/browser/tizen_browser_parts.h b/tizen/browser/tizen_browser_parts.h index a280f2fec..09d6934e0 100644 --- a/tizen/browser/tizen_browser_parts.h +++ b/tizen/browser/tizen_browser_parts.h @@ -35,6 +35,7 @@ class TizenBrowserParts { void Suspend(content::RenderViewHost* rvh); void Resume(content::RenderViewHost* rvh); void GetCSP(std::string &csp_rule, std::string &csp_report_rule); + bool ShouldAllowNavigation(const std::string &url); void Initialize(); protected: