Fix for race condition issue when widget is pausing
authorLukasz Marek <l.marek@samsung.com>
Thu, 7 Mar 2013 14:30:02 +0000 (15:30 +0100)
committerJihoon Chung <jihoon.chung@samsung.com>
Thu, 14 Mar 2013 07:33:05 +0000 (16:33 +0900)
[Issue#] N/A
[Problem] It was possible widget opened new frame and loaded content,
but bundle callbacks were partially disabled. It leaded to leak of
plugins in new frame.
[Cause] N/A
[Solution] Do not disable bundle callbacks
[Verification] Run webapi-tizen-power-tests.wgt suite (/test/webapi project)
No fails because of missing tizen object.

This reverts commit 763e8791af378fbe37af22d21635d3da04853692.

Change-Id: I842d41804a426f7d240d1761057be528ba28960b

src/view/webkit/bundles/messages_names.h
src/view/webkit/bundles/plugin_module_support.cpp
src/view/webkit/bundles/plugin_module_support.h
src/view/webkit/bundles/wrt-wk2-bundle.cpp
src/view/webkit/bundles/wrt-wk2-bundle.h
src/view/webkit/view_logic.cpp
src/wrt-client/wrt-client.cpp

index 2847e84..ab2a755 100644 (file)
@@ -25,10 +25,6 @@ const char * const INIT = "PluginModule::init";
 
 const char * const START = "PluginModule::start";
 const char * const SHUTDOWN = "PluginModule::shutdown";
-
-const char * const SUSPEND = "PluginModule::suspend";
-const char * const RESUME = "PluginModule::resume";
-
 const char * const SET_CUSTOM_PROPERTIES =
     "PluginModule::setCustomProperties";
 const char * const DISPATCH_JAVASCRIPT_EVENT =
index f59e01f..138baea 100644 (file)
@@ -139,15 +139,4 @@ void dispatchJavaScriptEvent(
     ewk_context_message_post_to_injected_bundle(ewkContext, name, msg);
 }
 
-void suspend(Ewk_Context* ewkContext)
-{
-    const char* name = BundleMessages::SUSPEND;
-    ewk_context_message_post_to_injected_bundle(ewkContext, name, name);
-}
-
-void resume(Ewk_Context* ewkContext)
-{
-    const char* name = BundleMessages::RESUME;
-    ewk_context_message_post_to_injected_bundle(ewkContext, name, name);
-}
 } //namespace PluginModuleSupport
index 95de035..2ff3a26 100644 (file)
@@ -36,10 +36,6 @@ void start(Ewk_Context* ewkContext,
            const char *theme,
            bool encrypted);
 void shutdown(Ewk_Context* ewkContext);
-
-void suspend(Ewk_Context* ewkContext);
-void resume(Ewk_Context* ewkContext);
-
 void setCustomProperties(
     Ewk_Context* ewkContext,
     double* scale = NULL,
index aa3aa8f..c374f9e 100644 (file)
@@ -177,7 +177,42 @@ void Bundle::didCreatePage(WKBundlePageRef page)
     };
     WKBundlePageSetResourceLoadClient(page, &resourceLoadClient);
 
-    connectLoaderClientCallbacksToPage(page);
+    WKBundlePageLoaderClient loaderClient = {
+        kWKBundlePageLoaderClientCurrentVersion,
+        this, /* clientinfo */
+        didStartProvisionalLoadForFrameCallback, /* didStartProvisionalLoadForFrame */
+        0, /* didReceiveServerRedirectForProvisionalLoadForFrame */
+        0, /* didFailProvisionalLoadWithErrorForFrame */
+        didCommitLoadForFrameCallback, /* didCommitLoadForFrame */
+        0, /* didFinishDocumentLoadForFrame */
+        0, /* didFinishLoadForFrame */
+        0, /* didFailLoadWithErrorForFrame */
+        0, /* didSameDocumentNavigationForFrame */
+        0, /* didReceiveTitleForFrame */
+        0, /* didFirstLayoutForFrame */
+        0, /* didFirstVisuallyNonEmptyLayoutForFrame */
+        didRemoveFrameFromHierarchyCallback, /* didRemoveFrameFromHierarchy */
+        0, /* didDisplayInsecureContentForFrame */
+        0, /* didRunInsecureContentForFrame */
+        0, /* didClearWindowObjectForFrame */
+        0, /* didCancelClientRedirectForFrame */
+        0, /* willPerformClientRedirectForFrame */
+        0, /* didHandleOnloadEventsForFrame */
+        0, /* didLayoutForFrame */
+        0, /* didNewFirstVisuallyNonEmptyLayout */
+        0, /* didDetectXSSForFrame */
+        0, /* shouldGoToBackForwardListItem */
+        0, /* globalObjectIsAvailableForFrame */
+        0, /* willDisconnectDOMWindowExtensionFromGlobalObject */
+        0, /* didReconnectDOMWindowExtensionToGlobalObject */
+        0, /* willDestroyGlobalObjectForDOMWindowExtension */
+        0, /* didFinishProgress */
+        0, /* shouldForceUniversalAccessFromLocalURL */
+        0, /* didReceiveIntentForFrame */
+        0, /* registerIntentServiceForFrame */
+    };
+    WKBundlePageSetPageLoaderClient(page, &loaderClient);
+
 
     WKBundlePagePolicyClient policyClient = {
         kWKBundlePagePolicyClientCurrentVersion,        /* version */
@@ -271,19 +306,9 @@ void Bundle::didReceiveMessage(WKStringRef messageName, WKTypeRef messageBody)
             LogInfo(
                 "PluginModule shutdown ignored, there are still alive pages!");
         }
-    } else if (WKStringIsEqualToUTF8CString(messageName,
-                                            BundleMessages::SUSPEND))
-    {
-        LogDebug("suspend plugins");
-        requestSuspend();
-    } else if (WKStringIsEqualToUTF8CString(messageName,
-                                            BundleMessages::RESUME))
-    {
-        LogDebug("resume plugins");
-        requestResume();
-    } else if (WKStringIsEqualToUTF8CString(messageName,
-                                            BundleMessages::
-                                                SET_CUSTOM_PROPERTIES))
+    }
+    else if (WKStringIsEqualToUTF8CString(messageName,
+                                          BundleMessages::SET_CUSTOM_PROPERTIES))
     {
         LogDebug("reset custom properties of window objects");
         // set information from ui process
@@ -943,65 +968,6 @@ void *Bundle::DecryptChunkByTrustZone(const unsigned char *inBuffer,
     return reinterpret_cast<void*>(getBuffer);
 }
 
-void Bundle::requestSuspend()
-{
-    LogDebug("Unregister callbacks");
-    FOREACH(page, m_pagesList)
-    {
-        WKBundlePageSetPageLoaderClient(*page, NULL);
-    }
-}
-
-void Bundle::requestResume()
-{
-    LogDebug("Register callbacks");
-    FOREACH(page, m_pagesList)
-    {
-        connectLoaderClientCallbacksToPage(*page);
-    }
-}
-
-void Bundle::connectLoaderClientCallbacksToPage(WKBundlePageRef page)
-{
-    LogDebug("");
-
-    WKBundlePageLoaderClient loaderClient = {
-        kWKBundlePageLoaderClientCurrentVersion,
-        this, /* clientinfo */
-        didStartProvisionalLoadForFrameCallback, /* StartProvisionalLdForFrm */
-        0, /* didReceiveServerRedirectForProvisionalLoadForFrame */
-        0, /* didFailProvisionalLoadWithErrorForFrame */
-        didCommitLoadForFrameCallback, /* didCommitLoadForFrame */
-        0, /* didFinishDocumentLoadForFrame */
-        0, /* didFinishLoadForFrame */
-        0, /* didFailLoadWithErrorForFrame */
-        0, /* didSameDocumentNavigationForFrame */
-        0, /* didReceiveTitleForFrame */
-        0, /* didFirstLayoutForFrame */
-        0, /* didFirstVisuallyNonEmptyLayoutForFrame */
-        didRemoveFrameFromHierarchyCallback, /* didRemoveFrameFromHierarchy */
-        0, /* didDisplayInsecureContentForFrame */
-        0, /* didRunInsecureContentForFrame */
-        0, /* didClearWindowObjectForFrame */
-        0, /* didCancelClientRedirectForFrame */
-        0, /* willPerformClientRedirectForFrame */
-        0, /* didHandleOnloadEventsForFrame */
-        0, /* didLayoutForFrame */
-        0, /* didNewFirstVisuallyNonEmptyLayout */
-        0, /* didDetectXSSForFrame */
-        0, /* shouldGoToBackForwardListItem */
-        0, /* globalObjectIsAvailableForFrame */
-        0, /* willDisconnectDOMWindowExtensionFromGlobalObject */
-        0, /* didReconnectDOMWindowExtensionToGlobalObject */
-        0, /* willDestroyGlobalObjectForDOMWindowExtension */
-        0, /* didFinishProgress */
-        0, /* shouldForceUniversalAccessFromLocalURL */
-        0, /* didReceiveIntentForFrame */
-        0, /* registerIntentServiceForFrame */
-    };
-    WKBundlePageSetPageLoaderClient(page, &loaderClient);
-}
-
 extern "C"
 {
 WK_EXPORT
index bc9a45d..9d93fca 100644 (file)
@@ -160,11 +160,6 @@ class Bundle
     void fixWKMessageArgs(std::string & argScale,
                           std::string & argEncodedBundle,
                           std::string & argTheme);
-
-    void requestSuspend();
-    void requestResume();
-
-    void connectLoaderClientCallbacksToPage(WKBundlePageRef page);
     void *DecryptChunkByTrustZone(const unsigned char *inBuffer,
                                  int inBufSize);
 };
index ee5a551..0cc576b 100644 (file)
@@ -746,7 +746,6 @@ void ViewLogic::suspendEwkView(Evas_Object *wkView)
 
     // unregister webview callbacks
     ewkClientDeinit(wkView);
-
     return;
 }
 
index 1e88b79..3ea7ea7 100644 (file)
@@ -93,8 +93,6 @@ void WrtClient::OnResume()
 
 void WrtClient::OnPause()
 {
-    LogDebug("On pause");
-
     if (m_widgetState != WidgetState_Running) {
         LogWarning("Widget is not running to be suspended");
         return;