PluginModuleSupport::init fix for multiple webkit context (part.2)
authorTaejeong Lee <taejeong.lee@samsung.com>
Fri, 22 Feb 2013 01:57:07 +0000 (10:57 +0900)
committerGerrit Code Review <gerrit2@kim11>
Thu, 7 Mar 2013 01:31:25 +0000 (10:31 +0900)
[Issue#] N/A
[Problem] N/A
[Cause] PluginModuleSupport::init fix for multiple webkit context
[Solution] Re-arranged invoking position of PluginModuleSupport::init()

Change-Id: Ib546ab1456558bc3457aa5e8c6b7e49258332b43

src/api_new/ewk_context_manager.cpp
src/api_new/runnable_widget_object.cpp
src/view/webkit/bundles/wrt-wk2-bundle.cpp
src/view/webkit/bundles/wrt-wk2-bundle.h

index 0a3fca5..d1ae016 100644 (file)
@@ -32,7 +32,6 @@
 #include <dpl/wrt-dao-ro/vconf_config.h>
 #include <dpl/utils/wrt_global_settings.h>
 #include "ewk_context_manager.h"
-#include "webkit/bundles/plugin_module_support.h"
 
 namespace WRT {
 
@@ -75,8 +74,6 @@ bool EwkContextManager::initialize()
         }
 
         m_isInternalContext = true;
-
-        PluginModuleSupport::init(m_ewkContext, m_appId);
     }
 
     // cache model setting
index d4a07a0..e2f175f 100644 (file)
@@ -192,6 +192,9 @@ bool RunnableWidgetObject::PrepareView(const std::string &startUrl,
     ADD_PROFILING_POINT("view_logic_init", "start");
     Ewk_Context* context = m_ewkContextManager->getEwkContext();
 
+    // plugin init
+    PluginModuleSupport::init(context, DPL::ToUTF8String(m_widgetModel->TizenId));
+
     // view init
     if(!m_view->createWebView(context, window)) {
         return false;
index 763a4d9..6d881de 100644 (file)
@@ -98,7 +98,8 @@ Bundle::Bundle(WKBundleRef bundle) :
     m_willRemoveContext(NULL),
     m_encrypted(false),
     m_resDec(NULL),
-    m_widgetType(WrtDB::APP_TYPE_UNKNOWN)
+    m_widgetType(WrtDB::APP_TYPE_UNKNOWN),
+    m_initialized(false)
 {
     LOG_PROFILE_START("Bundle attachToThread");
     WrtDB::WrtDatabase::attachToThreadRO();
@@ -341,38 +342,48 @@ void Bundle::didReceiveMessage(WKStringRef messageName, WKTypeRef messageBody)
                    BundleMessages::INIT))
     {
         LogDebug("initializing plugins");
-        auto msgString = toString(static_cast<WKStringRef>(messageBody));
 
-        m_widgetTizenId = DPL::FromASCIIString(msgString);
-
-        WrtDB::WidgetDAOReadOnly dao(m_widgetTizenId);
-        /* This type of message is received when widget is restarting
-         * (proably in other situation too). Widget restart can be
-         * called after system language change so language tags have to
-         * be recreated here.
-         * Do NOT MOVE LanguageTags reset before m_widgetHandle initialization
-         */
-        // reset language tags (create new tags based on system locales)
-        LanguageTagsProviderSingleton::Instance().resetLanguageTags();
-        DPL::OptionalString defaultLocale = dao.getDefaultlocale();
-        if (!defaultLocale.IsNull()) {
-            LanguageTagsProviderSingleton::Instance().addWidgetDefaultLocales(
-                *defaultLocale);
-        }
-        LanguageTags tags =
-            LanguageTagsProviderSingleton::Instance().getLanguageTags();
-        LogDebug("Current widget locales (language tags):");
-        FOREACH(it, tags) {
-            LogDebug("Locale: " << *it);
-        }
+        if (!m_initialized)
+        {
+            auto msgString = toString(static_cast<WKStringRef>(messageBody));
+
+            m_widgetTizenId = DPL::FromASCIIString(msgString);
+
+            WrtDB::WidgetDAOReadOnly dao(m_widgetTizenId);
+            /* This type of message is received when widget is restarting
+             * (proably in other situation too). Widget restart can be
+             * called after system language change so language tags have to
+             * be recreated here.
+             * Do NOT MOVE LanguageTags reset before m_widgetHandle initialization
+             */
+            // reset language tags (create new tags based on system locales)
+            LanguageTagsProviderSingleton::Instance().resetLanguageTags();
+            DPL::OptionalString defaultLocale = dao.getDefaultlocale();
+            if (!defaultLocale.IsNull()) {
+                LanguageTagsProviderSingleton::Instance().addWidgetDefaultLocales(
+                    *defaultLocale);
+            }
+            LanguageTags tags =
+                LanguageTagsProviderSingleton::Instance().getLanguageTags();
+            LogDebug("Current widget locales (language tags):");
+            FOREACH(it, tags) {
+                LogDebug("Locale: " << *it);
+            }
+
+            m_widgetType = dao.getWidgetType();
+            LogDebug("m_widgetType : " << m_widgetType.getApptypeToString() <<
+                     "(m_widgetTizenId:" << m_widgetTizenId << ")");
 
-        m_widgetType = dao.getWidgetType();
-        LogDebug("m_widgetType : " << m_widgetType.getApptypeToString() <<
-                 "(m_widgetTizenId:" << m_widgetTizenId << ")");
+            LogDebug("Preload PluginLogicSingleton");
+            PluginModule::init(WrtDB::WidgetDAOReadOnly::getHandle(m_widgetTizenId));
+            LogDebug("Preload PluginLogicSingleton_end");
 
-        LogDebug("Preload PluginLogicSingleton");
-        PluginModule::init(WrtDB::WidgetDAOReadOnly::getHandle(m_widgetTizenId));
-        LogDebug("Preload PluginLogicSingleton_end");
+            m_initialized = true;
+        }
+        else
+        {
+            LogDebug("already initalized");
+        }
     }
 }
 
index b799c18..9ff545c 100644 (file)
@@ -78,6 +78,7 @@ class Bundle
     WRTDecryptor::ResourceDecryptor *m_resDec;
     WrtDB::EncryptedFileList m_encryptedFiles;
     WrtDB::WidgetType m_widgetType;
+       bool m_initialized;
 
     // WKBundlePageResourceLoadClient callback
     static WKURLRequestRef willSendRequestForFrameCallback(