[WRTjs][Service][VD] Fix wrt-service crash 19/305819/5
authorDongHyun Song <dh81.song@samsung.com>
Thu, 8 Feb 2024 09:02:19 +0000 (18:02 +0900)
committerDongHyun Song <dh81.song@samsung.com>
Tue, 13 Feb 2024 01:43:46 +0000 (01:43 +0000)
When finalize ApplicationData instance on wrt-service, unexpected
acrash is happened probably with wrong instance size.

Change-Id: I5e859f467e3de27def4f7f208087aac3b7fcfdbc
Signed-off-by: DongHyun Song <dh81.song@samsung.com>
wrt/src/common/application_data.cc
wrt/src/common/application_data.h
wrt/src/common/tv/application_data_tv.cc
wrt/src/common/tv/application_data_tv.h

index 696b825..34d3c85 100755 (executable)
@@ -274,8 +274,7 @@ void ApplicationData::ParseAndSetManifestData() {
   widget_info_.SetImpl(std::static_pointer_cast<const wgt::parse::WidgetInfo>(
       widget_config_parser->GetManifestData(wgt::parse::WidgetInfo::Key())));
 
-  if (delegate_)
-    delegate_->ParseAndSetManifestData(widget_config_parser.get());
+  PostParseManifestData(widget_config_parser.get());
 }
 
 bool ApplicationData::Initialize() {
index 291a375..5fa5511 100755 (executable)
@@ -28,14 +28,6 @@ namespace wrt {
 
 class NativeAppControl;
 
-class ApplicationDataDelegate {
- public:
-  ApplicationDataDelegate() = default;
-  ~ApplicationDataDelegate() = default;
-
-  virtual void ParseAndSetManifestData(wgt::parse::WidgetConfigParser* parser) {}
-};
-
 class ApplicationData {
  public:
   enum AppType { UI = 0, IME, WATCH, SERVICE };
@@ -49,10 +41,6 @@ class ApplicationData {
   static ApplicationData* Create(const std::string& service_id,
                                  const std::string& pkg_path);
   bool Initialize();
-  void ParseAndSetManifestData();
-  void SetDelegate(ApplicationDataDelegate* delegate) {
-    delegate_ = delegate;
-  }
 
   const AllowedNavigationInfo& allowed_navigation_info() const {
     return allowed_navigation_info_;
@@ -162,6 +150,9 @@ class ApplicationData {
   std::unique_ptr<LoadInfo> GetMatchedLoadInfo(
       const wgt::parse::AppControlInfo&);
 
+  void ParseAndSetManifestData();
+  virtual void PostParseManifestData(wgt::parse::WidgetConfigParser* parser) {}
+
   AllowedNavigationInfo allowed_navigation_info_;
   AppControlInfoList app_control_info_list_;
   CategoryInfoList category_info_list_;
@@ -192,7 +183,6 @@ class ApplicationData {
   ApplicationData::AppType app_type_;
   std::unordered_map<std::string, std::string> metadata_;
   base::FilePath backup_config_xml_;
-  ApplicationDataDelegate* delegate_ = nullptr;
 };
 
 }  // namespace wrt
index b97cc37..9599900 100755 (executable)
@@ -43,9 +43,7 @@ ApplicationDataTV::ApplicationDataTV() {
 
   LOG(INFO) << "user_data_path_ : " << user_data_path_;
   LOG(INFO) << "backup_config_xml_ : " << backup_config_xml_;
-  SetDelegate(this);
   Initialize();
-  SetDelegate(nullptr);
 }
 
 ApplicationDataTV::ApplicationDataTV(const std::string& app_id,
@@ -58,7 +56,7 @@ ApplicationDataTV::ApplicationDataTV(const std::string& app_id,
   backup_config_xml_ = GetBackupConfigXml(application_path_);
 }
 
-void ApplicationDataTV::ParseAndSetManifestData(
+void ApplicationDataTV::PostParseManifestData(
     wgt::parse::WidgetConfigParser* parser) {
   video_splash_screen_info_.SetImpl(
       std::static_pointer_cast<const wgt::parse::VideoSplashScreenInfo>(
index 16b8ea0..4687860 100755 (executable)
@@ -11,8 +11,7 @@
 
 namespace wrt {
 
-class ApplicationDataTV : public ApplicationData,
-                          public ApplicationDataDelegate {
+class ApplicationDataTV : public ApplicationData {
  public:
   static ApplicationDataTV& GetInstance();
   static const std::string GetUpgradableWrtjsPath();
@@ -30,8 +29,7 @@ class ApplicationDataTV : public ApplicationData,
   }
 
  private:
-  // ApplicationDataDelegate
-  void ParseAndSetManifestData(wgt::parse::WidgetConfigParser* parser) override;
+  void PostParseManifestData(wgt::parse::WidgetConfigParser* parser) override;
 
   absl::optional<bool> widget_license_exist_;
   VideoSplashScreenInfo video_splash_screen_info_;