Register service worker on PWA launch 86/135286/3 accepted/tizen/4.0/unified/20170816.013338 accepted/tizen/4.0/unified/20170816.015848 accepted/tizen/unified/20170703.064218 submit/tizen/20170630.022418 submit/tizen_4.0/20170811.094300 submit/tizen_4.0/20170814.115522 submit/tizen_4.0_unified/20170814.115522
authorPawel Niemirski <p.niemirski@samsung.com>
Wed, 28 Jun 2017 10:11:50 +0000 (12:11 +0200)
committerSeungseop Park <sns.park@samsung.com>
Fri, 30 Jun 2017 02:13:12 +0000 (02:13 +0000)
Start the registration if config.xml has following metadata:
<tizen:metadata key="service-worker-url" value="...">

Bug: http://suprem.sec.samsung.net/jira/browse/RWASP-1583

Change-Id: I9ada897e7b654b4a72596935b3d6dc4a53ce13c8
Signed-off-by: Pawel Niemirski <p.niemirski@samsung.com>
runtime/browser/web_application.cc

index b8a95bc3d8cc74515f7cd92a67fa77b7637594cd..4caa49504d1ee76ea340d904317f0e145aea7d2a 100755 (executable)
@@ -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<unsigned> ParseTizenVersion(const std::string& tizen_string) {
@@ -530,6 +542,15 @@ void WebApplication::Launch(std::unique_ptr<common::AppControl> 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");