[NextBrowser] Initiating preloading support for browser 78/320778/2
authorNehal Kumar <nehal.kumar@samsung.com>
Fri, 22 Nov 2024 06:40:25 +0000 (12:10 +0530)
committerBot Blink <blinkbot@samsung.com>
Fri, 22 Nov 2024 07:11:50 +0000 (07:11 +0000)
When browser is launched with Preloading true argument,
browser will load in background, the browser window will be
shown when another launch request is received
Launch command format -
launch_app org.tizen.next-browser Preloading true

Change-Id: I970d5deb62c741cf1175b101ac2cbb2bc2c480e3
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/views/frame/browser_view.cc
components/samsung/opened_tabs/samsung_bpopened_tab_model.h
components/samsung/opened_tabs/samsung_bptab_image_model.cc
components/samsung/opened_tabs/samsung_bptab_image_model.h
tizen_src/downloadable/browser_app_interface.cc
tizen_src/ewk/chromium-ewk.filter

index 621aac7673407827fba3755ba3f5de35c406e1d5..3a83f15d20d214782456777b3437e79f93f59144 100644 (file)
 #include "content/public/common/content_switches.h"
 #include "headless/public/headless_shell.h"
 #include "headless/public/switches.h"
-
 #if BUILDFLAG(IS_MAC)
 #include "chrome/app/chrome_main_mac.h"
 #include "chrome/app/notification_metrics.h"
 #endif
 
+#if defined(SAMSUNG_NEXT_BROWSER)
+#include "chrome/browser/ui/samsung/samsung_browser_core.h"
+#endif
+
 #if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_LINUX)
 #include "base/base_switches.h"
 #endif
@@ -65,6 +68,14 @@ extern "C" {
 // return, see the --change-stack-guard-on-fork command line flag.
 __attribute__((visibility("default"))) int NO_STACK_PROTECTOR
 ChromeMain(int argc, const char** argv);
+#if defined(SAMSUNG_NEXT_BROWSER)
+__attribute__((visibility("default"))) void ChromeAppCreate();
+__attribute__((visibility("default"))) void ChromeAppControl(
+    const std::map<std::string, std::string>& keyValuePairs);
+__attribute__((visibility("default"))) void ChromeAppResume();
+__attribute__((visibility("default"))) void ChromeAppPause();
+__attribute__((visibility("default"))) void ChromeAppTerminate();
+#endif
 }
 #else
 #error Unknown platform.
@@ -193,3 +204,44 @@ int ChromeMain(int argc, const char** argv) {
     return content::RESULT_CODE_NORMAL_EXIT;
   return rv;
 }
+
+#if defined(SAMSUNG_NEXT_BROWSER)
+void ChromeAppCreate() {
+  LOG(INFO) << "ChromeAppCreate";
+}
+
+void ChromeAppControl(const std::map<std::string, std::string>& keyValuePairs) {
+  LOG(INFO) << "ChromeAppControl";
+  auto iter = keyValuePairs.find("show_preloaded_browser");
+  if (iter != keyValuePairs.end()) {
+    if (iter->second == "true") {
+      LOG(INFO) << "Show Preloaded browser";
+      samsung_browser_main::SamsungBrowserCore::instance()->SetCanShowWindow(
+          true);
+      samsung_browser_main::SamsungBrowserCore::instance()
+          ->GetBrowserInstance()
+          ->window()
+          ->Show();
+    }
+    if (iter->second == "false") {
+      LOG(INFO) << "Hide Preloaded browser";
+      samsung_browser_main::SamsungBrowserCore::instance()->SetCanShowWindow(
+          false);
+    }
+  }
+
+  LOG(INFO) << "ChromeAppControl end";
+}
+
+void ChromeAppResume() {
+  LOG(INFO) << "ChromeAppResume";
+}
+
+void ChromeAppPause() {
+  LOG(INFO) << "ChromeAppPause";
+}
+
+void ChromeAppTerminate() {
+  LOG(INFO) << "ChromeAppTerminate";
+}
+#endif
index 6f689a1d20ed3ac45f60e91b19ee88077749b2e7..17b67dc9762ec0898045763ef574c72f3b1a4333 100644 (file)
@@ -29,7 +29,8 @@ SamsungBrowserCore::SamsungBrowserCore()
       m_samsung_pass(nullptr),
       m_data_sync_controller(nullptr),
       m_samsung_account_manager(nullptr),
-      m_initialized(false) {}
+      m_initialized(false),
+      can_show_window(true) {}
 
 SamsungBrowserCore* SamsungBrowserCore::instance() {
   if (!m_instance) {
index bbf6a5923dea4645991098cf89bd3f0cf572410b..2c6bb77979e42ea4742aa4c3dc58046a0e1b1b13 100644 (file)
@@ -68,6 +68,10 @@ class SamsungBrowserCore {
 
   aura::WindowTreeHost* GetWindowInstance();
 
+  bool CanShowWindow() { return can_show_window; }
+
+  void SetCanShowWindow(bool can_show) { can_show_window = can_show; }
+
  private:
   explicit SamsungBrowserCore();
   ~SamsungBrowserCore();
@@ -99,6 +103,7 @@ class SamsungBrowserCore {
   raw_ptr<Browser> browser_;
   aura::WindowTreeHost* window_host;
   bool m_initialized;
+  bool can_show_window;
 };
 }  // namespace samsung_browser_main
 
index 5ad7ca507f70c1402afac9d9b9bf530b6bb23131..99e8ce1f586fbb98b0c8b4f8a2a747f4ec9994a1 100644 (file)
 #include "chrome/browser/ui/views/frame/webui_tab_strip_container_view.h"
 #endif  // BUILDFLAG(ENABLE_WEBUI_TAB_STRIP)
 
+#if defined(SAMSUNG_NEXT_BROWSER)
+#include "chrome/browser/ui/samsung/samsung_browser_core.h"
+#endif
+
 using base::UserMetricsAction;
 using content::NativeWebKeyboardEvent;
 using content::WebContents;
@@ -1349,6 +1353,12 @@ views::Widget* BrowserView::GetWidgetForAnchoring() {
 // BrowserView, BrowserWindow implementation:
 
 void BrowserView::Show() {
+#if defined(SAMSUNG_NEXT_BROWSER)
+  // For preloaded browser the window show have to be prevented till browser
+  // is put to foreground
+  if (!samsung_browser_main::SamsungBrowserCore::instance()->CanShowWindow())
+    return;
+#endif
 #if !BUILDFLAG(IS_WIN) && !BUILDFLAG(IS_CHROMEOS_ASH)
   // The Browser associated with this browser window must become the active
   // browser at the time |Show()| is called. This is the natural behavior under
@@ -1371,7 +1381,7 @@ void BrowserView::Show() {
     restore_focus_on_activation_ = true;
 
   frame_->Show();
-
+  LOG(INFO) << "";
   browser()->OnWindowDidShow();
 
   // The fullscreen transition clears out focus, but there are some cases (for
index f2e9107b7aefea1f53c04fcebd8fb775bed50a26..4c1d3dc0d826e1520152ce040d74062cc840c28c 100644 (file)
@@ -2,7 +2,6 @@
 #define COMPONENTS_SAMSUNG_OPENED_TABS_SAMSUNG_OPENED_TAB_MODEL_H_
 
 #include <vector>
-#include "cloud_tab.h"
 
 #include "components/samsung/opened_tabs/samsung_tab_id_store.h"
 #include "components/samsung/public/samsung_account_model.h"
index 59c3cc91c46d9606e4a40c4ccab549fe5b336522..a48807c53a5a956cd47b10e2cc9ed10c1906ab32 100644 (file)
@@ -1,6 +1,7 @@
 #include "samsung_bptab_image_model.h"
 
 #include "base/logging.h"
+#include "cloud_tab.h"
 #include "components/samsung/public/samsung_image_tools.h"
 
 namespace samsung_browser_storage {
index 8e6ee5ac685447724cc3a9af1f8ba77ec3f35ae9..8b4956822841542c7d8fdda1b799418c1c885291 100644 (file)
@@ -3,7 +3,6 @@
 
 #include <vector>
 // #include <web/web_tab.h>
-#include "cloud_tab.h"
 
 #include "components/samsung/public/samsung_browser_enums.h"
 #include "components/samsung/public/samsung_iimage_model.h"
index 4194d0c55d0d0d244219d99eff9fde36276278a0..5d507ea92c5922709ee9a34f45c76e329db3ab26 100644 (file)
@@ -2,6 +2,7 @@
 
 #include <appfw/app.h>
 #include <cstring>
+#include <map>
 #include <string>
 #include <vector>
 
@@ -14,9 +15,10 @@ namespace samsung_next_browser {
 struct serviceChecker {
   std::string requestURI;
   std::string chromiumArguments;
+  bool preLoading;
 
   explicit serviceChecker(app_control_h service)
-      : requestURI(""), chromiumArguments("") {
+      : requestURI(""), chromiumArguments(""), preLoading(false) {
     AppControl app_control(service);
     std::string data;
 
@@ -31,6 +33,11 @@ struct serviceChecker {
       chromiumArguments = std::move(data);
       LOG(INFO) << chromiumArguments;
     }
+
+    data = app_control.getExtraData("Preloading");
+    if (!data.empty() && strcmp(data.c_str(), "true") == 0) {
+      preLoading = true;
+    }
   }
 };
 
@@ -62,20 +69,58 @@ void parseChromiumArguments(const std::string& args,
 
 static bool browser_create(void* user_data) {
   LOG(INFO) << "browser_create";
+  /*
+  typedef void (*func_app_create)();
+      func_app_create chromeAppCreatePtr =
+      reinterpret_cast<func_app_create>(ewk_dlsym("ChromeAppCreate"));
+  if (chromeAppCreatePtr) {
+    chromeAppCreatePtr();
+  }
+  */
   return 1;
 }
 static void browser_control(app_control_h app_control, void* user_data) {
   LOG(INFO) << "browser_control call";
+
   static bool browser_received_control = false;
+  static bool browser_window_shown = false;
+
+  typedef void (*func_app_control)(
+      const std::map<std::string, std::string>& keyValuePairs);
+
+  static func_app_control chromeAppControlPtr = nullptr;
+  if (chromeAppControlPtr == nullptr) {
+    chromeAppControlPtr =
+        reinterpret_cast<func_app_control>(ewk_dlsym("ChromeAppControl"));
+    if (!chromeAppControlPtr) {
+      LOG(ERROR) << "Failed to load ChromeAppControl";
+    }
+  }
+
+  serviceChecker checker(app_control);
+
   if (browser_received_control) {
-    LOG(INFO) << "browser control already received";
+    LOG(INFO) << "Browser control already received";
+    if (!browser_window_shown) {
+      LOG(INFO) << "Showing Preloaded browser";
+      browser_window_shown = true;
+      std::map<std::string, std::string> keyValuePairs = {
+          {"show_preloaded_browser", "true"}};
+      chromeAppControlPtr(keyValuePairs);
+    }
     return;
   }
+
   browser_received_control = true;
+  if (checker.preLoading) {
+    std::map<std::string, std::string> keyValuePairs = {
+        {"show_preloaded_browser", "false"}};
+    chromeAppControlPtr(keyValuePairs);
+  } else
+    browser_window_shown = true;
   std::vector<std::string> argumentsList;
   getDefaultArguments(argumentsList);
 
-  serviceChecker checker(app_control);
   if (!checker.chromiumArguments.empty()) {
     parseChromiumArguments(checker.chromiumArguments, argumentsList);
   }
@@ -110,14 +155,38 @@ static void browser_control(app_control_h app_control, void* user_data) {
 
 static void browser_pause(void* user_data) {
   LOG(INFO) << "browser_pause call";
+  /*
+  typedef void (*func_app_pause)();
+    func_app_pause chromeAppPausePtr =
+      reinterpret_cast<func_app_pause>(ewk_dlsym("ChromeAppPause"));
+  if (chromeAppPausePtr) {
+    chromeAppPausePtr();
+  }
+  */
 }
 
 static void browser_resume(void* user_data) {
   LOG(INFO) << "browser_resume call";
+  /*
+  typedef void (*func_app_resume)();
+  func_app_resume chromeAppResumePtr =
+      reinterpret_cast<func_app_resume>(ewk_dlsym("ChromeAppResume"));
+  if (chromeAppResumePtr) {
+    chromeAppResumePtr();
+  }
+  */
 }
 
 static void browser_terminate(void* user_data) {
   LOG(INFO) << "browser_terminate call";
+  /*
+    typedef void (*func_app_terminate)();
+  func_app_terminate chromeAppTerminatePtr =
+      reinterpret_cast<func_app_terminate>(ewk_dlsym("ChromeAppTerminate"));
+  if (chromeAppTerminatePtr) {
+    chromeAppTerminatePtr();
+  }
+  */
 }
 int BrowserMain(int argc, const char** argv) {
   LOG(INFO) << "BROWSER-APP-INTERFACE : BrowserMain called..";
@@ -151,4 +220,4 @@ int BrowserMain(int argc, const char** argv) {
   }
 }
 
-}  // namespace samsung_next_browser
\ No newline at end of file
+}  // namespace samsung_next_browser
index 52f4727521ba2f84f051578c01d790bdd9f3c7d5..c2abe398e40b1c5a2be0a7c28e598597ec8a27f7 100644 (file)
     node_module_register;
     # CHROMIUM BROWSER
     ChromeMain;
+    ChromeAppCreate;
+    ChromeAppControl;
+    ChromeAppResume;
+    ChromeAppPause;
+    ChromeAppTerminate;
 
   local: *;
 };