From: Pawel Niemirski
Date: Wed, 28 Jun 2017 10:11:50 +0000 (+0200)
Subject: Register service worker on PWA launch
X-Git-Tag: submit/tizen/20170630.022418^0
X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=10cdfc656c2adc296461a5ab703286b8bb2b0a14;p=platform%2Fframework%2Fweb%2Fcrosswalk-tizen.git
Register service worker on PWA launch
Start the registration if config.xml has following metadata:
Bug: http://suprem.sec.samsung.net/jira/browse/RWASP-1583
Change-Id: I9ada897e7b654b4a72596935b3d6dc4a53ce13c8
Signed-off-by: Pawel Niemirski
---
diff --git a/runtime/browser/web_application.cc b/runtime/browser/web_application.cc
index b8a95bc3d..4caa49504 100755
--- a/runtime/browser/web_application.cc
+++ b/runtime/browser/web_application.cc
@@ -151,6 +151,8 @@ const char *kEdjeHideProgressSignal = "hide,progress,signal";
const std::string kViewmodeTypeFullscreen = "fullscreen";
const std::string kViewmodeTypeWindowed = "windowed";
+const char* const kServiceWorkerConfigKey = "service-worker-url";
+
// Looking for added privilege by Application developer in config.xml.
bool FindPrivilegeFromConfig(common::ApplicationData* app_data,
const std::string& privilege) {
@@ -282,6 +284,16 @@ static bool ProcessWellKnownScheme(const std::string& url) {
return true;
}
+void OnDidRegisterServiceWorkerCb(Ewk_Context*, const char*, const char*,
+ Eina_Bool result, void*) {
+ if (result) {
+ LOGGER(DEBUG) << "Service-worker has been registered successfully";
+ } else {
+ LOGGER(DEBUG) <<
+ "An unexpected error has occurred during service-worker registeration";
+ }
+}
+
} // namespace
std::vector ParseTizenVersion(const std::string& tizen_string) {
@@ -530,6 +542,15 @@ void WebApplication::Launch(std::unique_ptr appcontrol) {
resource_manager_->GetStartResource(appcontrol.get());
view->SetDefaultEncoding(res->encoding());
+ if (app_data_->meta_data_info().get() &&
+ app_data_->meta_data_info()->HasKey(kServiceWorkerConfigKey)) {
+ std::string service_worker_url =
+ app_data_->meta_data_info()->GetValue(kServiceWorkerConfigKey);
+ ewk_context_service_worker_register(ewk_context_, res->uri().c_str(),
+ service_worker_url.c_str(),
+ OnDidRegisterServiceWorkerCb, this);
+ }
+
STEP_PROFILE_END("OnCreate -> URL Set");
STEP_PROFILE_START("URL Set -> Rendered");