memory in system occurs.
Change-Id: Idc767c4ea831a6596be75f1610b0c44ab7c84ffc
Signed-off-by: Nehal Kumar <nehal.kumar@samsung.com>
__attribute__((visibility("default"))) void ChromeAppResume();
__attribute__((visibility("default"))) void ChromeAppPause();
__attribute__((visibility("default"))) void ChromeAppTerminate();
+__attribute__((visibility("default"))) void SystemLowMemoryHandler();
#endif
}
#else
samsung_browser_main::SamsungBrowserCore::instance()->MoveToState(
samsung_browser_main::SamsungBrowserCore::BrowserState::Terminated);
}
+
+void SystemLowMemoryHandler() {
+ LOG(INFO) << "SystemLowMemoryHandler";
+ samsung_browser_main::SamsungBrowserCore::instance()->SystemLowMemoryState();
+}
#endif
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);
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
virtual void BrowserStateChanged(BrowserState state){};
};
+ class LowMemoryStateObserver {
+ public:
+ virtual ~LowMemoryStateObserver() = default;
+ virtual void SystemLowMemoryState(){};
+ };
static SamsungBrowserCore* instance();
bool Init();
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;
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
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) {
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) {
}
}
+void SamsungWebContentsController::SystemLowMemoryState() {
+ DiscardNonCurrentWebViews();
+}
+
void SamsungWebContentsController::ResumeWebView(
content::WebContents* web_contents) {
LOG(INFO) << "";
class SamsungWebContentsController
: public samsung_browser_main::SamsungBrowserCore::BrowserStateObserver,
+ public samsung_browser_main::SamsungBrowserCore::LowMemoryStateObserver,
public TabStripModelObserver {
public:
explicit 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);
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)
reinterpret_cast<func_app_create>(ewk_dlsym("ChromeAppCreate"));
if (chromeAppCreatePtr) {
chromeAppCreatePtr();
+ } else {
+ LOG(ERROR) << "ChromeAppCreate function not found";
}
return 1;
}
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);
}
reinterpret_cast<func_app_pause>(ewk_dlsym("ChromeAppPause"));
if (chromeAppPausePtr) {
chromeAppPausePtr();
+ } else {
+ LOG(ERROR) << "ChromeAppPause function not found";
}
}
reinterpret_cast<func_app_resume>(ewk_dlsym("ChromeAppResume"));
if (chromeAppResumePtr) {
chromeAppResumePtr();
+ } else {
+ LOG(ERROR) << "ChromeAppResume function not found";
}
}
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";
}
}
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;
}
ChromeAppResume;
ChromeAppPause;
ChromeAppTerminate;
+ SystemLowMemoryHandler;
local: *;
};