[NextBrowser] Discarding non-active tabs when low 06/322206/2
authorNehal Kumar <nehal.kumar@samsung.com>
Sat, 5 Apr 2025 13:15:20 +0000 (18:45 +0530)
committerBot Blink <blinkbot@samsung.com>
Mon, 7 Apr 2025 09:48:09 +0000 (09:48 +0000)
memory in system occurs.

Change-Id: Idc767c4ea831a6596be75f1610b0c44ab7c84ffc
Signed-off-by: Nehal Kumar <nehal.kumar@samsung.com>
chrome/app/chrome_main.cc
chrome/browser/ui/samsung/samsung_browser_core.cc
chrome/browser/ui/samsung/samsung_browser_core.h
chrome/browser/ui/samsung/samsung_web_contents_controller.cc
chrome/browser/ui/samsung/samsung_web_contents_controller.h
chrome/browser/web_applications/web_app_utils.cc
tizen_src/downloadable/browser_app_interface.cc
tizen_src/ewk/chromium-ewk.filter

index cbe58308fd2217a0d430b28e3b9526f4f32cce52..4ec525261b967b4c4aa766d172be01aaf30fd666 100644 (file)
@@ -75,6 +75,7 @@ __attribute__((visibility("default"))) void ChromeAppControl(
 __attribute__((visibility("default"))) void ChromeAppResume();
 __attribute__((visibility("default"))) void ChromeAppPause();
 __attribute__((visibility("default"))) void ChromeAppTerminate();
+__attribute__((visibility("default"))) void SystemLowMemoryHandler();
 #endif
 }
 #else
@@ -254,4 +255,9 @@ void ChromeAppTerminate() {
   samsung_browser_main::SamsungBrowserCore::instance()->MoveToState(
       samsung_browser_main::SamsungBrowserCore::BrowserState::Terminated);
 }
+
+void SystemLowMemoryHandler() {
+  LOG(INFO) << "SystemLowMemoryHandler";
+  samsung_browser_main::SamsungBrowserCore::instance()->SystemLowMemoryState();
+}
 #endif
index 6d1663b5fabec37e43453900c70d2d90ab7e0efd..61587435bb42b13bb308cb424bff1b5a9c0f8708 100644 (file)
@@ -304,7 +304,7 @@ bool SamsungBrowserCore::MoveToState(SamsungBrowserCore::BrowserState state) {
     SetColdStart();
   }
   m_browser_state = state;
-  for (auto& observer : m_observer_list)
+  for (auto& observer : m_browser_state_observer_list)
     observer.BrowserStateChanged(
         state);  // Notify all observers about state change.
   LOG(INFO) << "Moved to state: " << static_cast<int>(state);
@@ -313,10 +313,27 @@ bool SamsungBrowserCore::MoveToState(SamsungBrowserCore::BrowserState state) {
 
 void SamsungBrowserCore::AddBrowserStateObserver(
     BrowserStateObserver* observer) {
-  m_observer_list.AddObserver(observer);
+  m_browser_state_observer_list.AddObserver(observer);
 }
 void SamsungBrowserCore::RemoveBrowserStateObserver(
     BrowserStateObserver* observer) {
-  m_observer_list.RemoveObserver(observer);
+  m_browser_state_observer_list.RemoveObserver(observer);
 }
+
+void SamsungBrowserCore::SystemLowMemoryState() {
+  for (auto& observer : m_low_memory_observer_list) {
+    observer.SystemLowMemoryState();
+  }
+}
+
+void SamsungBrowserCore::AddLowMemoryStateObserver(
+    LowMemoryStateObserver* observer) {
+  m_low_memory_observer_list.AddObserver(observer);
+}
+
+void SamsungBrowserCore::RemoveLowMemoryStateObserver(
+    LowMemoryStateObserver* observer) {
+  m_low_memory_observer_list.RemoveObserver(observer);
+}
+
 }  // namespace samsung_browser_main
index eaff0133197274887001a01087f7bcc27366bbef..3de6f32958c29d6ec801a7e1bb1fdaca926db374 100644 (file)
@@ -64,6 +64,11 @@ class SamsungBrowserCore : public BrowserListObserver {
     virtual void BrowserStateChanged(BrowserState state){};
   };
 
+  class LowMemoryStateObserver {
+   public:
+    virtual ~LowMemoryStateObserver() = default;
+    virtual void SystemLowMemoryState(){};
+  };
   static SamsungBrowserCore* instance();
 
   bool Init();
@@ -147,12 +152,16 @@ class SamsungBrowserCore : public BrowserListObserver {
   void SetColdStart();
   bool IsColdStart() const { return m_isColdStart; }
   bool MoveToState(BrowserState);
+  void SystemLowMemoryState();
 
   BrowserState GetBrowserState() const { return m_browser_state; }
 
   void AddBrowserStateObserver(BrowserStateObserver* observer);
   void RemoveBrowserStateObserver(BrowserStateObserver* observer);
 
+  void AddLowMemoryStateObserver(LowMemoryStateObserver* observer);
+  void RemoveLowMemoryStateObserver(LowMemoryStateObserver* observer);
+
   // BrowserListObserver
   void OnBrowserAdded(Browser* browser) override;
   void OnBrowserRemoved(Browser* browser) override;
@@ -210,7 +219,10 @@ class SamsungBrowserCore : public BrowserListObserver {
   bool can_show_window;
   bool m_isColdStart;
   BrowserState m_browser_state;
-  base::ObserverList<BrowserStateObserver>::Unchecked m_observer_list;
+  base::ObserverList<BrowserStateObserver>::Unchecked
+      m_browser_state_observer_list;
+  base::ObserverList<LowMemoryStateObserver>::Unchecked
+      m_low_memory_observer_list;
 };
 }  // namespace samsung_browser_main
 #endif  // CHROME_BROWSER_UI_SAMSUNG_SAMSUNG_BROWSER_CORE_H
index 5ced7856a60ded0d1f02b949313ac15f00a8455e..8de7deaf5f00daada01eba9d8558f6ee13fe9f93 100644 (file)
@@ -24,6 +24,8 @@ void SamsungWebContentsController::Init() {
   LOG(INFO) << "";
   samsung_browser_main::SamsungBrowserCore::instance()->AddBrowserStateObserver(
       this);
+  samsung_browser_main::SamsungBrowserCore::instance()
+      ->AddLowMemoryStateObserver(this);
   Browser* browser_ = samsung_browser_main::SamsungBrowserCore::instance()
                           ->GetBrowserInstance();
   if (browser_ == nullptr) {
@@ -59,6 +61,8 @@ void SamsungWebContentsController::DeInit() {
   LOG(INFO) << "";
   samsung_browser_main::SamsungBrowserCore::instance()
       ->RemoveBrowserStateObserver(this);
+  samsung_browser_main::SamsungBrowserCore::instance()
+      ->RemoveLowMemoryStateObserver(this);
   Browser* browser_ = samsung_browser_main::SamsungBrowserCore::instance()
                           ->GetBrowserInstance();
   if (browser_ == nullptr) {
@@ -119,6 +123,10 @@ void SamsungWebContentsController::BrowserStateChanged(
   }
 }
 
+void SamsungWebContentsController::SystemLowMemoryState() {
+  DiscardNonCurrentWebViews();
+}
+
 void SamsungWebContentsController::ResumeWebView(
     content::WebContents* web_contents) {
   LOG(INFO) << "";
index 3e2149c9c83ce12658cad64ee342f3e2f407302b..cc896cbd2d0b1f1794fb806ea7c3c694510c7954 100644 (file)
@@ -10,6 +10,7 @@ namespace samsung_browser_controller {
 
 class SamsungWebContentsController
     : public samsung_browser_main::SamsungBrowserCore::BrowserStateObserver,
+      public samsung_browser_main::SamsungBrowserCore::LowMemoryStateObserver,
       public TabStripModelObserver {
  public:
   explicit SamsungWebContentsController();
@@ -17,8 +18,13 @@ class SamsungWebContentsController
   void Init();
   void DeInit();
   void ReInit();
+
+  // SamsungBrowserCore::BrowserStateObserver implementation.
   void BrowserStateChanged(
       samsung_browser_main::SamsungBrowserCore::BrowserState state) override;
+  // SamsungBrowserCore::LowMemoryStateObserver implementation.
+  void SystemLowMemoryState() override;
+
   void ResumeWebView(content::WebContents* web_contents);
   void SuspendWebView(content::WebContents* web_contents);
   void ShowWebView(content::WebContents* web_contents);
index 13795b0600e98122ebeaf9bbc4f3b2aaa4015537..2c3c613306a65881248b41628f8e6e147f57eead 100644 (file)
@@ -350,7 +350,7 @@ bool AreWebAppsUserInstallable(Profile* profile) {
   if (ash::ProfileHelper::IsLockScreenAppProfile(profile))
     return false;
 #endif
-  int result = AreWebAppsEnabled(profile) && !profile->IsGuestSession() &&
+  bool result = AreWebAppsEnabled(profile) && !profile->IsGuestSession() &&
                !profile->IsOffTheRecord();
 
 #if defined(SAMSUNG_NEXT_BROWSER)
index a8826060d89b530a460b9936140cdb6cf49f9199..0e28fa6407c094305e5f9600e511cbcf1fa460f1 100644 (file)
@@ -82,6 +82,8 @@ static bool browser_create(void* user_data) {
       reinterpret_cast<func_app_create>(ewk_dlsym("ChromeAppCreate"));
   if (chromeAppCreatePtr) {
     chromeAppCreatePtr();
+  } else {
+    LOG(ERROR) << "ChromeAppCreate function not found";
   }
   return 1;
 }
@@ -157,6 +159,10 @@ static void browser_control(app_control_h app_control, void* user_data) {
     LOG(INFO) << chromeMain;
     ui_app_exit();
     LOG(INFO) << "Exiting browser application...ui_app_exit() called";
+  } else {
+    LOG(ERROR) << "ChromeMain function not found";
+    ui_app_exit();
+    LOG(INFO) << "Exiting browser application...ui_app_exit() called";
   }
   free(argv);
 }
@@ -168,6 +174,8 @@ static void browser_pause(void* user_data) {
       reinterpret_cast<func_app_pause>(ewk_dlsym("ChromeAppPause"));
   if (chromeAppPausePtr) {
     chromeAppPausePtr();
+  } else {
+    LOG(ERROR) << "ChromeAppPause function not found";
   }
 }
 
@@ -178,6 +186,8 @@ static void browser_resume(void* user_data) {
       reinterpret_cast<func_app_resume>(ewk_dlsym("ChromeAppResume"));
   if (chromeAppResumePtr) {
     chromeAppResumePtr();
+  } else {
+    LOG(ERROR) << "ChromeAppResume function not found";
   }
 }
 
@@ -188,6 +198,21 @@ static void browser_terminate(void* user_data) {
       reinterpret_cast<func_app_terminate>(ewk_dlsym("ChromeAppTerminate"));
   if (chromeAppTerminatePtr) {
     chromeAppTerminatePtr();
+  } else {
+    LOG(ERROR) << "ChromeAppTerminate function not found";
+  }
+}
+
+static void system_low_memory(app_event_info_h, void* user_data) {
+  LOG(INFO) << "system_low_memory call";
+  typedef void (*func_system_low_memory)();
+  func_system_low_memory systemLowMemoryHandlerPtr =
+      reinterpret_cast<func_system_low_memory>(
+          ewk_dlsym("SystemLowMemoryHandler"));
+  if (systemLowMemoryHandlerPtr) {
+    systemLowMemoryHandlerPtr();
+  } else {
+    LOG(ERROR) << "SystemLowMemoryHandler function not found";
   }
 }
 
@@ -213,11 +238,14 @@ int BrowserMain(int argc, const char** argv) {
     LOG(INFO) << "Main process";
     ui_app_lifecycle_callback_s event_callback;
     memset(&event_callback, 0x00, sizeof(ui_app_lifecycle_callback_s));
+    app_event_handler_h low_memory_handler = NULL;
     event_callback.create = browser_create;
     event_callback.terminate = browser_terminate;
     event_callback.pause = browser_pause;
     event_callback.resume = browser_resume;
     event_callback.app_control = browser_control;
+    ui_app_add_event_handler(&low_memory_handler, APP_EVENT_LOW_MEMORY,
+                             system_low_memory, NULL);
     int browser_init = ui_app_main(argc, (char**)argv, &event_callback, NULL);
     return browser_init;
   }
index c2abe398e40b1c5a2be0a7c28e598597ec8a27f7..f2e72c33ba3dacbf947417387750c2ff302abd02 100644 (file)
@@ -49,6 +49,7 @@
     ChromeAppResume;
     ChromeAppPause;
     ChromeAppTerminate;
+    SystemLowMemoryHandler;
 
   local: *;
 };