[NextBrowser] Initial Implementation of BrowserLite 76/323076/11
authorjmroman <jm.roman@samsung.com>
Tue, 22 Apr 2025 13:01:38 +0000 (21:01 +0800)
committerBot Blink <blinkbot@samsung.com>
Tue, 6 May 2025 09:17:50 +0000 (09:17 +0000)
- Added command line switch --browser-lite
- Added a check on launch to check for DDRMemory

- If DDRMemmory is 1gb, it will do the ff:
  - launch with command line switch --browser-lite
  - launch with window-size 1280x720
  - launch with handoff feature disabled
  - launch with mobile user agent
  - adjusted zoom to match window-size

Signed-off-by: jmroman <jm.roman@samsung.com>
Change-Id: I8ff5d788172618f3f18b19e1b451b470675907d2

chrome/browser/ui/samsung/samsung_browser_core.cc
chrome/common/chrome_switches.cc
chrome/common/chrome_switches.h
components/zoom/BUILD.gn
components/zoom/zoom_controller.cc
components/zoom/zoom_switches.cc [new file with mode: 0644]
components/zoom/zoom_switches.h [new file with mode: 0644]
packaging/org.tizen.next-browser.xml.in
tizen_src/downloadable/browser_app_interface.cc

index c1615d267981157121b50ad2bb043016d0c952b4..6e5b877a4189d6815a18fc3a4313da4716e91694 100644 (file)
 #include "chrome/browser/ui/views/frame/toolbar_button_provider.h"
 #include "chrome/browser/ui/views/profiles/avatar_toolbar_button.h"
 #include "chrome/browser/ui/views/profiles/avatar_toolbar_button_delegate.h"
+#include "chrome/common/chrome_switches.h"
 
 #include <sys/stat.h>
 #include <fstream>
+#include "base/command_line.h"
 #include "base/logging.h"
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/ui/browser_window.h"
@@ -141,12 +143,14 @@ bool SamsungBrowserCore::Init() {
       samsung_browser_controller::SamsungWebContentsController>();
   m_web_contents_controller->Init();
 
+  const base::CommandLine* command_line =
+      base::CommandLine::ForCurrentProcess();
   bool handoffEnabled = g_browser_process->local_state()->GetBoolean(
       browser_config::prefs::kMcfEnabled);
   m_mcf_manager_ = std::make_unique<samsung_browser_fw_core::MCFManager>();
   m_mcf_controller_ =
       std::make_unique<samsung_browser_controller::MCFController>(browser_);
-  if (handoffEnabled) {
+  if (handoffEnabled && !command_line->HasSwitch(switches::kBrowserLite)) {
     m_mcf_controller_->Init();
     m_mcf_manager_->Init();
   }
index 21b5315fbc65da308a4ea900c3843c43f5da0661..105d8229a30f4fd9ffdbcf49e6a9f861951f3694 100644 (file)
@@ -897,6 +897,10 @@ const char kUseSystemDefaultPrinter[] = "use-system-default-printer";
 const char kUserDataMigrated[] = "user-data-migrated";
 #endif
 
+#if defined(SAMSUNG_NEXT_BROWSER)
+const char kBrowserLite[] = "browser-lite";
+#endif
+
 // -----------------------------------------------------------------------------
 // DO NOT ADD YOUR VERY NICE FLAGS TO THE BOTTOM OF THIS FILE.
 //
index 40bf9a83edeffbe3be32e3bf62a74aaaf347075e..35b8aaea2d51940b9e48d332d6415a3a07f5fc56 100644 (file)
@@ -295,6 +295,10 @@ extern const char kUseSystemDefaultPrinter[];
 extern const char kUserDataMigrated[];
 #endif
 
+#if defined(SAMSUNG_NEXT_BROWSER)
+extern const char kBrowserLite[];
+#endif
+
 // DON'T ADD RANDOM STUFF HERE. Put it in the main section above in
 // alphabetical order, or in one of the ifdefs (also in order in each section).
 
index 1f7eaa12666fd2c0db7219d5e96937920022fb3f..ff572fa230dfe7f64aa7030cfd6df18481baba0a 100644 (file)
@@ -3,6 +3,7 @@
 # found in the LICENSE file.
 
 import("//build/config/features.gni")
+import("//tizen_src/build/config/tizen_features.gni")
 
 assert(use_blink, "Desktop zoom is not used on non blink platforms.")
 
@@ -20,6 +21,13 @@ static_library("zoom") {
     "zoom_observer.h",
   ]
 
+  if(is_samsung_next_browser) {
+    sources += [
+      "zoom_switches.h",
+      "zoom_switches.cc",
+      ]
+  }
+
   deps = [
     "//base",
     "//components/prefs",
index 3e35fd996c3f8ab10c479bd3256552c21b15a996..dfae9e31ad2fadf74f0de93f2bd09c329ed406ef 100644 (file)
 #include "net/base/url_util.h"
 #include "third_party/blink/public/common/page/page_zoom.h"
 
+#if defined(SAMSUNG_NEXT_BROWSER)
+#include "base/command_line.h"
+#include "components/zoom/zoom_switches.h"
+#endif  // SAMSUNG_NEXT_BROWSER
+
 using content::BrowserThread;
 
 namespace zoom {
@@ -42,6 +47,16 @@ ZoomController::ZoomController(content::WebContents* web_contents)
       browser_context_(web_contents->GetBrowserContext()) {
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
   host_zoom_map_ = content::HostZoomMap::GetForWebContents(web_contents);
+
+#if defined(SAMSUNG_NEXT_BROWSER)
+  bool is_browser_lite =
+      base::CommandLine::ForCurrentProcess()->HasSwitch(switches::kBrowserLite);
+
+  if (is_browser_lite)
+    host_zoom_map_->SetDefaultZoomLevel(
+        blink::PageZoomFactorToZoomLevel(2 / 3.0));
+#endif  // SAMSUNG_NEXT_BROWSER
+
   zoom_level_ = host_zoom_map_->GetDefaultZoomLevel();
 
   zoom_subscription_ =
@@ -94,6 +109,13 @@ double ZoomController::GetZoomLevel() const {
 int ZoomController::GetZoomPercent() const {
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
   double zoom_factor = blink::PageZoomLevelToZoomFactor(GetZoomLevel());
+#if defined(SAMSUNG_NEXT_BROWSER)
+  bool is_browser_lite =
+      base::CommandLine::ForCurrentProcess()->HasSwitch(switches::kBrowserLite);
+  if (is_browser_lite) {
+    return static_cast<int>(zoom_factor * 150 + 0.5);
+  }
+#endif  // SAMSUNG_NEXT_BROWSER
   // Round double for return.
   return static_cast<int>(zoom_factor * 100 + 0.5);
 }
diff --git a/components/zoom/zoom_switches.cc b/components/zoom/zoom_switches.cc
new file mode 100644 (file)
index 0000000..26db9ea
--- /dev/null
@@ -0,0 +1,16 @@
+// Copyright 2013 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "components/zoom/zoom_switches.h"
+
+#include "build/build_config.h"
+
+namespace zoom {
+namespace switches {
+
+// Switch used for enabling browserlite features
+const char kBrowserLite[] = "browser-lite";
+
+}  // namespace switches
+}  // namespace zoom
diff --git a/components/zoom/zoom_switches.h b/components/zoom/zoom_switches.h
new file mode 100644 (file)
index 0000000..e43536a
--- /dev/null
@@ -0,0 +1,21 @@
+// Copyright 2013 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef COMPONENTS_ZOOM_ZOOM_SWITCHES_H_
+#define COMPONENTS_ZOOM_ZOOM_SWITCHES_H_
+
+#include "build/build_config.h"
+
+namespace zoom {
+namespace switches {
+
+// All switches in alphabetical order. The switches should be documented
+// alongside the definition of their values in the .cc file.
+
+extern const char kBrowserLite[];
+
+}  // namespace switches
+}  // namespace zoom
+
+#endif  // COMPONENTS_ZOOM_ZOOM_SWITCHES_H_
index 547a46782546365a959cd0b30c387bd1671eb7c7..19f07a88c4c685829af882ec94e986891c201012 100644 (file)
@@ -4,6 +4,7 @@
     <ui-application appid="@PACKAGE_ID@" exec="next_browser" nodisplay="false" process-pool="true" multiple="false" type="capp" taskmanage="true">
         <label>NextBrowser</label>
         <description>WebBrowser for Samsung Smart TV</description>
+        <metadata key="http://tizen.org/metadata/app_ui_type/base_screen_resolution" value="max,hd"/>
     </ui-application>
     <privileges>
         <privilege>http://tizen.org/privilege/filesystem.read</privilege>
index 99d8b3dd5e797790438a94103224c3366834fa53..9bad6184b6ac2bf37934e870d5d2bcd87278fc58 100644 (file)
@@ -1,6 +1,7 @@
 #include "browser_app_interface.h"
 
 #include <appfw/app.h>
+#include <capi-system-info/system_info.h>
 #include <cstring>
 #include <map>
 #include <string>
@@ -41,13 +42,43 @@ struct serviceChecker {
   }
 };
 
-void getDefaultArguments(std::vector<std::string>& defaultArgumentsList) {
+enum class DDR_MEMORY_SIZE {
+  DDR_1_25G,
+  DDR_1_5G,
+  DDR_2G,
+  DDR_2_5G,
+  DDR_3G,
+  DDR_1G,
+  DDR_5G,
+  DDR_4_5G,
+  DDR_3_5G,
+  DDR_4G,
+  DDR_6G
+};
+
+int GetDDRInfo(bool* returnCode) {
+  int value = 0;
+  if (system_info_get_custom_int("com.samsung/featureconf/ddr_memory_size",
+                                 &value) != SYSTEM_INFO_ERROR_NONE) {
+    LOG(INFO) << ("Failed to get ddr value");
+    if (returnCode) {
+      (*returnCode) = false;
+    }
+    return -1;
+  }
+  LOG(INFO) << "DDR value = " << value;
+  if (returnCode) {
+    (*returnCode) = true;
+  }
+  return value;
+}
+
+void passDefaultArguments(std::vector<std::string>& defaultArgumentsList) {
   defaultArgumentsList.push_back(
       "/opt/usr/apps/org.tizen.next-browser/bin/next_browser");
   defaultArgumentsList.push_back("--ignore-gpu-blocklist");
   defaultArgumentsList.push_back("--ozone-platform=efl");
   defaultArgumentsList.push_back("--in-process-gpu");
-  defaultArgumentsList.push_back("--window-size=1920,1080");
   defaultArgumentsList.push_back("--enable-logging=stderr");
   defaultArgumentsList.push_back("--no-sandbox");
   defaultArgumentsList.push_back("--use-internal-popup-menu=true");
@@ -62,6 +93,19 @@ void getDefaultArguments(std::vector<std::string>& defaultArgumentsList) {
   defaultArgumentsList.push_back("--disable-site-isolation-trials");
   defaultArgumentsList.push_back("--single-renderer-process");
   defaultArgumentsList.push_back("--widget-id=org.tizen.next-browser");
+}
+
+void passBrowserLiteArguments(std::vector<std::string>& defaultArgumentsList) {
+  defaultArgumentsList.push_back("--window-size=1280,720");
+  defaultArgumentsList.push_back(
+      "--user-agent=Mozilla/5.0 (SMART-TV; Linux; Tizen 8.0) "
+      "AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/7.0 "
+      "Chrome/120.0.0.0  Mobile Safari/537.36");
+  defaultArgumentsList.push_back("--browser-lite");
+}
+
+void passNextBrowserArguments(std::vector<std::string>& defaultArgumentsList) {
+  defaultArgumentsList.push_back("--window-size=1920,1080");
   defaultArgumentsList.push_back(
       "--user-agent=Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, "
       "like Gecko) SamsungBrowser/1.0 Chrome/120.0.0.0 Safari/537.36");
@@ -128,7 +172,20 @@ static void browser_control(app_control_h app_control, void* user_data) {
   } else
     browser_window_shown = true;
   std::vector<std::string> argumentsList;
-  getDefaultArguments(argumentsList);
+  passDefaultArguments(argumentsList);
+
+  bool is_browser_lite = false;
+  bool error = false;
+  DDR_MEMORY_SIZE DDRMemory = static_cast<DDR_MEMORY_SIZE>(GetDDRInfo(&error));
+
+  if (DDRMemory == DDR_MEMORY_SIZE::DDR_1G)
+    is_browser_lite = true;
+
+  if (is_browser_lite) {
+    passBrowserLiteArguments(argumentsList);
+  } else {
+    passNextBrowserArguments(argumentsList);
+  }
 
   if (!checker.chromiumArguments.empty()) {
     parseChromiumArguments(checker.chromiumArguments, argumentsList);