Handle Navigation policy from crosswalk-tizen 07/184107/2
authorsurya.kumar7 <surya.kumar7@samsung.com>
Fri, 13 Jul 2018 16:25:29 +0000 (21:55 +0530)
committerjaekuk lee <juku1999@samsung.com>
Mon, 16 Jul 2018 06:32:16 +0000 (06:32 +0000)
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 <surya.kumar7@samsung.com>
atom/browser/api/atom_api_web_contents.cc
atom/browser/atom_browser_client.cc
atom/browser/atom_browser_client.h
tizen/browser/tizen_browser_parts.cc
tizen/browser/tizen_browser_parts.h

index 43b1940b647c5dbe7d1e8679ff23e14e9c911948..4365e2eaff5a99893f9bcfd373214a3799ca3cb9 100644 (file)
@@ -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;
index 9408fcfbf9ab6066bdc49efa404bbfcdf22c3f2b..6fefad7d07c2b6d6bb978b3161e22ef717e00df3 100644 (file)
@@ -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<std::string>* additional_schemes) {
   auto schemes_list = api::GetStandardSchemes();
index a794fba4d5c2c40e17733c94ae52673fcf9d5a2b..4d6d3dfccaec06af13c0b82894212ce2df6e35bd 100644 (file)
@@ -100,6 +100,7 @@ class AtomBrowserClient : public brightray::BrowserClient,
       bool* no_javascript_access) override;
   void GetAdditionalAllowedSchemesForFileSystem(
       std::vector<std::string>* schemes) override;
+  bool ShouldAllowOpenURL(content::SiteInstance* site_instance, const GURL& url) override;
 
   // brightray::BrowserClient:
   brightray::BrowserMainParts* OverrideCreateBrowserMainParts(
index 10dd2f64d55400c9ef6ab3c4ee8c32851e26d38c..326e5cdd49ea03cfe9c9876a5b69d83454c9d844 100644 (file)
@@ -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<common::AppControl> 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<common::AppControl> request(
+      common::AppControl::MakeAppcontrolFromURL(url));
+    if (request.get() == NULL || !request->LaunchRequest()) {
+      LOG(ERROR) << "Fail to send appcontrol request: " << url;
+    }
+    return false;
+  }
 }
+
+} // namespace tizen
index a280f2fecfd170d7eb6d17fe31a416882b3a4ab0..09d6934e0b4f1ed3c6a530b429ebf9cbac5b51bf 100644 (file)
@@ -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: