[Chrome] Appfw integration for chrome 86/317086/17 submit/tizen/20250116.160019
authorSatyaveer Singh <satyaveer.s@samsung.com>
Tue, 24 Dec 2024 05:20:39 +0000 (10:50 +0530)
committerBot Blink <blinkbot@samsung.com>
Thu, 16 Jan 2025 02:37:09 +0000 (02:37 +0000)
This patch adds appfw and direct launch support to
chrome browser.

Change-Id: Ic59fe61373e6fc675761ae985fc690a06b1c38b8
Signed-off-by: Satyaveer Singh <satyaveer.s@samsung.com>
14 files changed:
base/base_paths.cc
base/base_paths_posix.cc
chrome/BUILD.gn
packaging/chromium-efl-browser.spec.in [new file with mode: 0644]
packaging/chromium-efl.spec
packaging/org.tizen.chromium-efl-browser.xml.in [new file with mode: 0644]
tizen_src/chromium_impl/chrome/BUILD.gn [new file with mode: 0644]
tizen_src/chromium_impl/chrome/app/chrome_exe_main_tizen.cc [new file with mode: 0644]
tizen_src/chromium_impl/chrome/app/chrome_main_tizen.cc [new file with mode: 0644]
tizen_src/chromium_impl/chrome/chrome_efl.gni
tizen_src/downloadable/ewk_interface_main.cc
tizen_src/ewk/BUILD.gn
tizen_src/ewk/chromium-ewk.filter
tizen_src/ewk/efl_integration/BUILD.gn

index ed9cf0fffc9ec6a483ac2ab31205ef03a133bd30..391495469b75364a6f5e3606b9ef947de9887bb1 100644 (file)
@@ -9,6 +9,11 @@
 #include "base/path_service.h"
 #include "build/build_config.h"
 
+#if defined(BUILD_CHROME)
+#include <appfw/app_common.h>
+#include "base/memory/free_deleter.h"
+#endif
+
 namespace base {
 
 bool PathProvider(int key, FilePath* result) {
@@ -40,6 +45,14 @@ bool PathProvider(int key, FilePath* result) {
       *result = home_dir;
 #else
       *result = GetHomeDir();
+#if defined(BUILD_CHROME)
+      char* app_id = NULL;
+      if (APP_ERROR_NONE == app_get_id(&app_id)) {
+        std::unique_ptr<char, FreeDeleter> data_path(app_get_data_path());
+        *result = base::FilePath(data_path.get());
+        free(app_id);
+      }
+#endif
 #endif
       return true;
     }
index d0efb31ad5cfc63bacafbb7cfecd836f771a8053..3180f4e75d5dbafefc101eb78488c070f8003ce3 100644 (file)
 #include <stdlib.h>
 #endif
 
+#if defined(BUILD_CHROME)
+#include <appfw/app_common.h>
+#include "base/command_line.h"
+#include "base/memory/free_deleter.h"
+#endif
+
 namespace base {
 
 bool PathProviderPosix(int key, FilePath* result) {
@@ -41,10 +47,14 @@ bool PathProviderPosix(int key, FilePath* result) {
     case FILE_MODULE: {  // TODO(evanm): is this correct?
 #if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS)
       FilePath bin_dir;
+#if defined(SAMSUNG_NEXT_BROWSER) || defined(BUILD_CHROME)
 #if defined(SAMSUNG_NEXT_BROWSER)
       base::FilePath::CharType binfilePath[] = FILE_PATH_LITERAL(
           "/opt/usr/apps/org.tizen.next-browser/bin/next_browser");
       bin_dir = base::FilePath(binfilePath);
+#else
+      bin_dir = base::CommandLine::ForCurrentProcess()->GetProgram();
+#endif
       LOG(INFO) << bin_dir.value();
 #else
       if (!ReadSymbolicLink(FilePath(kProcSelfExe), &bin_dir)) {
@@ -120,6 +130,14 @@ bool PathProviderPosix(int key, FilePath* result) {
       std::unique_ptr<Environment> env(Environment::Create());
       FilePath cache_dir(
           nix::GetXDGDirectory(env.get(), "XDG_CACHE_HOME", ".cache"));
+#if defined(BUILD_CHROME)
+      char* app_id = NULL;
+      if (APP_ERROR_NONE == app_get_id(&app_id)) {
+        std::unique_ptr<char, FreeDeleter> cache_path(app_get_cache_path());
+        cache_dir = base::FilePath(cache_path.get());
+        free(app_id);
+      }
+#endif
 #endif
       *result = cache_dir;
       return true;
index 1ff2b63e34ddad6175d0d8f694bff4619ff8b264..4b5262e863f250210caf0ec9d96c4e6ecb854a74 100644 (file)
@@ -54,6 +54,10 @@ if (is_android) {
   import("//third_party/icu/config.gni")
 }
 
+if (use_efl) {
+  import("//tizen_src/chromium_impl/chrome/chrome_efl.gni")
+}
+
 declare_args() {
   # Indicates whether keystone registration framework should be enabled (see
   # action("keystone_registration_framework") below).  There are some tests
@@ -1458,31 +1462,6 @@ if (is_win) {
     }
   }
 } else if (use_efl) {
-  browser_binary_name = "chrome_tizen"
-  if (is_samsung_next_browser) {
-    browser_binary_name = "next_browser"
-  }
-  executable(browser_binary_name) {
-    testonly = true
-    deps = [ "//tizen_src/ewk/efl_integration:libchromium-ewk" ]
-    sources = [
-      "app/chrome_exe_main_aura.cc",
-      "app/chrome_exe_resource.h",
-    ]
-    ldflags = [
-      "-pie",
-      "-Wl,--export-dynamic",
-    ]
-    if (is_samsung_next_browser) {
-      ldflags += [ "-Wl,-rpath=\$ORIGIN/../lib" ]
-      defines = [ "SAMSUNG_NEXT_BROWSER" ]
-    }
-    cflags = [ "-fPIC" ]
-    if (is_tizen) {
-      configs += [ "//tizen_src/build/config/tizen:executable_config" ]
-    }
-  }
-
   static_library("chrome_lib") {
     sources = [ "app/chrome_exe_resource.h" ]
     defines = []
@@ -1502,6 +1481,7 @@ if (is_win) {
       "app/chrome_main_linux.cc",
       "app/chrome_main_linux.h",
     ]
+    sources += external_chrome_app_efl_sources
 
     deps += [
       # On Linux, link the dependencies (libraries) that make up actual
diff --git a/packaging/chromium-efl-browser.spec.in b/packaging/chromium-efl-browser.spec.in
new file mode 100644 (file)
index 0000000..c32b024
--- /dev/null
@@ -0,0 +1,41 @@
+%package browser
+Summary: Tizen Chromium Browser Application
+Requires: %{name} = %{version}-%{release}
+%description browser
+Tizen Chromium Browser Application on Chromium EFL
+# org.tizen.chromium-efl-browser
+
+%define _browser_pkgid %{_pkgid}-browser
+%define _browser_rootdir  %{TZ_SYS_RO_APP}/%{_browser_pkgid}
+%define _browser_buildpath "%{buildroot}"%{_browser_rootdir}
+
+# This variable is being accessed in the parent spec file, so we define it globally here.
+%global __browser_install_spec \
+  install -m 0644 "%{OUTPUT_FOLDER}"/tizen-manifest-browser.xml "%{buildroot}"%{_xmldir}/%{_browser_pkgid}.xml \
+  install -d "%{_browser_buildpath}" \
+  install -d "%{_browser_buildpath}"/bin \
+  install -d "%{_browser_buildpath}"/bin/locales \
+  install -m 0644 "%{OUTPUT_FOLDER}"/product_logo_48.png      "%{_browser_buildpath}"/%{_browser_pkgid}.png \
+  install -m 0755 "%{OUTPUT_FOLDER}"/chrome_tizen             "%{_browser_buildpath}"/bin \
+  install -m 0644 "%{OUTPUT_FOLDER}"/chrome_100_percent.pak   "%{_browser_buildpath}"/bin \
+  install -m 0644 "%{OUTPUT_FOLDER}"/resources.pak            "%{_browser_buildpath}"/bin \
+  install -m 0644 "%{OUTPUT_FOLDER}"/locales/en-US.pak        "%{_browser_buildpath}"/bin/locales \
+  install -m 0644 "%{OUTPUT_FOLDER}"/snapshot_blob.bin        "%{_browser_buildpath}"/bin \
+  %{nil}
+
+%files browser
+%manifest packaging/chromium-efl.manifest
+%{_xmldir}/%{_browser_pkgid}.xml
+%{_browser_rootdir}/%{_browser_pkgid}.png
+%{_browser_rootdir}/bin/chrome_tizen
+%{_browser_rootdir}/bin/chrome_100_percent.pak
+%{_browser_rootdir}/bin/resources.pak
+%{_browser_rootdir}/bin/locales/en-US.pak
+%{_browser_rootdir}/bin/snapshot_blob.bin
+
+%preun browser
+%pre browser
+
+%post browser
+echo Installation:
+echo   tpk-backend -y %{_browser_pkgid} --preload
index 1c84b4d80fe2c24b84cfd6cb2b07ec5ccbcc5b65..028ff426844c533c7a093370ac8458e37b971f70 100644 (file)
@@ -15,6 +15,7 @@ License: LGPL-2.1 or BSD-2-Clause
 
 Source0: %{name}-%{version}.tar.gz
 Source1: content_shell.in
+Source2: chromium-efl-browser.spec.in
 
 %ifarch aarch64
 %define _nodebug 1
@@ -647,10 +648,46 @@ Chromium Tizen V8 unittests
 %define __browser_tpk_id org.tizen.next-browser
 %endif
 
+%if 0%{?__build_chrome} && %{__create_next_browser_tpk} == 0
+%define include_sub_spec() %{expand:%(cat '%{1}')}
+%{include_sub_spec %{SOURCE2}}
+%endif
+
 %prep
 %setup -q
 
 %build
+# The "_repository" flag was changed to "_vd_cfg_target_repository" in tizen 4.0 product tv.
+%if "%{?tizen_profile_name}" == "tv"
+#TO DO, onemain branch haven't defined _vd_cfg_target_repository, so add this hijack code
+# to set repo_name to "MuseM" if not define _vd_cfg_target_repository, need to delete this
+# code when defined _vd_cfg_target_repository in onemain.
+%if "%{?_vd_cfg_target_repository}"
+%define repo_name %{_vd_cfg_target_repository}
+%else
+%define repo_name MuseM
+%endif
+%else
+%define repo_name %{_repository}
+%endif
+
+%if %{__build_chrome} == 1
+%define OUTPUT_BASE_FOLDER out.chrome.tz_v%{tizen_version_major}.%{tizen_version_minor}.%{repo_name}.%{ARCHITECTURE}
+%else
+%if %{__is_tizen_x} == 1
+%define OUTPUT_BASE_FOLDER out.tz_X.%{repo_name}.%{ARCHITECTURE}
+%else
+%define OUTPUT_BASE_FOLDER out.tz_v%{tizen_version_major}.%{tizen_version_minor}.%{repo_name}.%{ARCHITECTURE}
+%endif
+%endif
+
+export GN_GENERATOR_OUTPUT=$PWD/%{OUTPUT_BASE_FOLDER}
+
+export BUILD_ARCH=%{ARCHITECTURE}
+
+#set build mode
+%global OUTPUT_FOLDER %{OUTPUT_BASE_FOLDER}
+
 # architecture related configuration + neon temporary workaround
 %if %{?_skip_ninja:0}%{!?_skip_ninja:1}
 
@@ -684,37 +721,6 @@ Chromium Tizen V8 unittests
   export PYTHONIOENCODING=utf-8
 %endif
 
-# The "_repository" flag was changed to "_vd_cfg_target_repository" in tizen 4.0 product tv.
-%if "%{?tizen_profile_name}" == "tv"
-#TO DO, onemain branch haven't defined _vd_cfg_target_repository, so add this hijack code
-# to set repo_name to "MuseM" if not define _vd_cfg_target_repository, need to delete this
-# code when defined _vd_cfg_target_repository in onemain.
-%if "%{?_vd_cfg_target_repository}"
-%define repo_name %{_vd_cfg_target_repository}
-%else
-%define repo_name MuseM
-%endif
-%else
-%define repo_name %{_repository}
-%endif
-
-%if %{__build_chrome} == 1
-%define OUTPUT_BASE_FOLDER out.chrome.tz_v%{tizen_version_major}.%{tizen_version_minor}.%{repo_name}.%{ARCHITECTURE}
-%else
-%if %{__is_tizen_x} == 1
-%define OUTPUT_BASE_FOLDER out.tz_X.%{repo_name}.%{ARCHITECTURE}
-%else
-%define OUTPUT_BASE_FOLDER out.tz_v%{tizen_version_major}.%{tizen_version_minor}.%{repo_name}.%{ARCHITECTURE}
-%endif
-%endif
-
-export GN_GENERATOR_OUTPUT=$PWD/%{OUTPUT_BASE_FOLDER}
-
-export BUILD_ARCH=%{ARCHITECTURE}
-
-#set build mode
-%global OUTPUT_FOLDER %{OUTPUT_BASE_FOLDER}
-
 if type ccache &> /dev/null; then
   source tizen_src/build/ccache_env.sh tizen
 fi
@@ -900,7 +906,7 @@ ninja %{_smp_mflags} -C "%{OUTPUT_FOLDER}" \
   v8_tests \
 %endif
 %if 0%{?__build_chrome}
-  %{__browser_binary_name} \
+  chrome_exe_tizen \
 %endif
 %if 0%{?build_rtc_unittests}
   webrtc_test_component \
@@ -991,13 +997,20 @@ sed -e 's#@TIZEN_VERSION@#%{tizen_version_major}.%{tizen_version_minor}#g' \
     packaging/%{_manifestname}.xml.in \
     > "%{OUTPUT_FOLDER}"/tizen-manifest-tpk.xml
 %endif
-%if 0%{?__create_next_browser_tpk}
 
+%if 0%{?__build_chrome}
+%if 0%{?__create_next_browser_tpk}
 sed -e 's#@TIZEN_VERSION@#%{tizen_version_major}.%{tizen_version_minor}#g' \
     -e 's#@CHROMIUM_VERSION@#%{__next_browser_version}#g' \
     -e 's#@PACKAGE_ID@#%{__browser_tpk_id}#g' \
     packaging/%{_next_browser_manifestname}.xml.in \
     > "%{OUTPUT_FOLDER}"/tizen-manifest-next-browser-tpk.xml
+%else
+sed -e 's#@TIZEN_VERSION@#%{tizen_version_major}.%{tizen_version_minor}#g' \
+    -e 's#@CHROMIUM_VERSION@#%{version}#g' \
+    packaging/%{_pkgid}-browser.xml.in \
+    > "%{OUTPUT_FOLDER}"/tizen-manifest-browser.xml
+%endif
 %endif
 
 %if 0%{?__generate_tpk} && "%{?profile}" == "tv"
@@ -1068,15 +1081,7 @@ mkdir -p %{buildroot}%{_datadir}/gcov/obj
 install -m 0644 gcov-obj/* %{buildroot}%{_datadir}/gcov/obj
 %endif
 
-%if %{__build_chrome} == 1 && "%{__generate_tpk}" == "0"
-  install -m 0755 "%{OUTPUT_FOLDER}"/%{__browser_binary_name} "%{buildroot}"%{CHROMIUM_LIB_DIR}/bin/%{__browser_binary_name}
-  sed 's#@binary@#%{CHROMIUM_LIB_DIR}/bin/%{__browser_binary_name}#' %{SOURCE1} > "%{buildroot}"%{_bindir}/%{__browser_binary_name}
-  install -m 0644 "%{OUTPUT_FOLDER}"/locales/*.pak "%{buildroot}"%{CHROMIUM_LIB_DIR}/bin/locales
-  install -m 0644 "%{OUTPUT_FOLDER}"/chrome_100_percent.pak "%{buildroot}"%{CHROMIUM_LIB_DIR}/bin/
-  install -m 0644 "%{OUTPUT_FOLDER}"/resources.pak "%{buildroot}"%{CHROMIUM_LIB_DIR}/bin/
-%else
   install -m 0644 "%{OUTPUT_FOLDER}"/locales/efl/*.pak  "%{buildroot}"%{CHROMIUM_LIB_DIR}/bin/locales/
-%endif
 
   install -m 0755 "%{OUTPUT_FOLDER}"/efl_webprocess    "%{buildroot}"%{_bindir}/
   %if "%{?profile}" == "tv"
@@ -1122,10 +1127,8 @@ install -m 0755 "%{OUTPUT_FOLDER}"/ubrowser          "%{buildroot}"%{CHROMIUM_AP
 
 install -m 0644 "%{OUTPUT_FOLDER}"/resources/*.edj "%{buildroot}"%{CHROMIUM_LIB_DIR}/res/themes/
 
-%if %{__build_chrome} != 1
 cp -r "%{OUTPUT_FOLDER}"/locale/* "%{buildroot}"%{CHROMIUM_LIB_DIR}/res/locale/
 chmod -R a=r,u+w,a+X              "%{buildroot}"%{CHROMIUM_LIB_DIR}/res/locale/*
-%endif
 
 %if "%{?__use_system_icu}" != "1"
   install -m 0644 "%{OUTPUT_FOLDER}"/icudtl.dat           "%{buildroot}"%{CHROMIUM_LIB_DIR}/bin/
@@ -1449,6 +1452,11 @@ tar -cj -f "%{buildroot}"%{TIZEN_V8_UT_DIR}/v8-test-data.tar.bz2 v8/tools/ v8/te
   find %{buildroot} -type f -name *.so | xargs strip --strip-all
 %endif
 
+%if 0%{?__build_chrome} && %{__create_next_browser_tpk} == 0
+  %{__browser_install_spec}
+  # tizen_src/build/build_chromium_browser_tpk.sh %{_buildroot_next_browser} %{OUTPUT_FOLDER} %{_browser_tpk_file_name} %{__browser_tpk_id} %{?profile}
+%endif
+
 %pre
 if (( $(rpm -qa | grep 'wrtjs-[[:digit:]]' | wc -l) > 1 )); then
   echo -e "\033[31m*****************************************************"
@@ -1611,12 +1619,6 @@ rm -rf %{TIZEN_V8_UT_DIR}/v8
 %{CHROMIUM_LIB_DIR}/res/locale/*
 %{CHROMIUM_LIB_DIR}/res/images/*.png
 
-%if %{__build_chrome} == 1 && "%{__generate_tpk}" == "0"
-  %{CHROMIUM_LIB_DIR}/bin/chrome_100_percent.pak
-  %{CHROMIUM_LIB_DIR}/bin/resources.pak
-  %{CHROMIUM_LIB_DIR}/bin/%{__browser_binary_name}
-  %{_bindir}/%{__browser_binary_name}
-%endif
   %{_libdir}/libchromium-ewk.so
   %{_libdir}/libewebkit2.so*
   %if 0%{?__enable_squashfs_image}
diff --git a/packaging/org.tizen.chromium-efl-browser.xml.in b/packaging/org.tizen.chromium-efl-browser.xml.in
new file mode 100644 (file)
index 0000000..bee2c79
--- /dev/null
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns="http://tizen.org/ns/packages" api-version="@TIZEN_VERSION@" package="org.tizen.chromium-efl-browser" version="@CHROMIUM_VERSION@">
+    <ui-application appid="org.tizen.chromium-efl-browser" exec="chrome_tizen" nodisplay="false" multiple="false" type="capp" taskmanage="true">
+        <label>Chromium</label>
+        <icon>org.tizen.chromium-efl-browser.png</icon>
+        <description>Chromium Browser for Tizen</description>
+    </ui-application>
+    <privileges>
+        <privilege>http://tizen.org/privilege/alarm.get</privilege>
+        <privilege>http://tizen.org/privilege/alarm.set</privilege>
+        <privilege>http://tizen.org/privilege/apphistory.read</privilege>
+        <privilege>http://tizen.org/privilege/appmanager.kill.bgapp</privilege>
+        <privilege>http://tizen.org/privilege/appmanager.launch</privilege>
+        <privilege>http://tizen.org/privilege/content.read</privilege>
+        <privilege>http://tizen.org/privilege/datacontrol.consumer</privilege>
+        <privilege>http://tizen.org/privilege/datasharing</privilege>
+        <privilege>http://tizen.org/privilege/externalstorage</privilege>
+        <privilege>http://tizen.org/privilege/internet</privilege>
+        <privilege>http://tizen.org/privilege/mediastorage</privilege>
+        <privilege>http://tizen.org/privilege/network.get</privilege>
+        <privilege>http://tizen.org/privilege/notification</privilege>
+        <privilege>http://tizen.org/privilege/package.info</privilege>
+        <privilege>http://tizen.org/privilege/packagemanager.admin</privilege>
+        <privilege>http://tizen.org/privilege/packagemanager.clearcache</privilege>
+        <privilege>http://tizen.org/privilege/packagemanager.info</privilege>
+        <privilege>http://tizen.org/privilege/telephony</privilege>
+        <privilege>http://tizen.org/privilege/telephony.admin</privilege>
+    </privileges>
+    <feature name="http://tizen.org/feature/screen.size.normal.1080.1920">true</feature>
+</manifest>
diff --git a/tizen_src/chromium_impl/chrome/BUILD.gn b/tizen_src/chromium_impl/chrome/BUILD.gn
new file mode 100644 (file)
index 0000000..69fccd6
--- /dev/null
@@ -0,0 +1,26 @@
+# Copyright (c) 2024 samsung electronics. all rights reserved.
+# use of this source code is governed by a bsd-style license that can be
+# found in the license file.
+import("//tizen_src/build/config/tizen_features.gni")
+executable("chrome_exe_tizen") {
+  # TODO: testonly should be defined only for testing.
+  testonly = true
+  output_name = "chrome_tizen"
+  if (is_samsung_next_browser) {
+    output_name = "next_browser"
+  }
+  deps = [ "//tizen_src/ewk/efl_integration:libchromium-ewk" ]
+  sources = [ "app/chrome_exe_main_tizen.cc" ]
+  ldflags = [
+    "-pie",
+    "-Wl,--export-dynamic",
+  ]
+  if (is_samsung_next_browser) {
+    ldflags += [ "-Wl,-rpath=\$ORIGIN/../lib" ]
+    defines = [ "SAMSUNG_NEXT_BROWSER" ]
+  }
+  cflags = [ "-fPIC" ]
+  if (is_tizen) {
+    configs += [ "//tizen_src/build/config/tizen:executable_config" ]
+  }
+}
diff --git a/tizen_src/chromium_impl/chrome/app/chrome_exe_main_tizen.cc b/tizen_src/chromium_impl/chrome/app/chrome_exe_main_tizen.cc
new file mode 100644 (file)
index 0000000..3f3159f
--- /dev/null
@@ -0,0 +1,26 @@
+// Copyright 2011 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "build/build_config.h"
+
+// The entry point for all invocations of Chromium, browser and renderer. On
+// windows, this does nothing but load chrome.dll and invoke its entry point in
+// order to make it easy to update the app from GoogleUpdate. We don't need
+// that extra layer with on linux.
+extern "C" {
+int ChromeMain(int argc, const char** argv);
+int ChromeMainTizen(int argc, const char** argv);
+}
+
+#if defined(SAMSUNG_NEXT_BROWSER) || defined(BUILD_CHROME)
+__attribute__((visibility("default"))) int main(int argc, const char** argv) {
+#else
+int main(int argc, const char** argv) {
+#endif
+#if defined(SAMSUNG_NEXT_BROWSER)
+  return ChromeMain(argc, argv);
+#else
+  return ChromeMainTizen(argc, argv);
+#endif
+}
diff --git a/tizen_src/chromium_impl/chrome/app/chrome_main_tizen.cc b/tizen_src/chromium_impl/chrome/app/chrome_main_tizen.cc
new file mode 100644 (file)
index 0000000..443b65a
--- /dev/null
@@ -0,0 +1,150 @@
+// Copyright 2024 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include <appfw/app.h>
+#include <string>
+#include <vector>
+
+#include "base/logging.h"
+#include "chrome/browser/ui/browser.h"
+#include "chrome/browser/ui/browser_list.h"
+#include "chrome/browser/ui/tabs/tab_strip_model.h"
+#include "content/browser/renderer_host/render_view_host_impl.h"
+#include "content/browser/renderer_host/render_widget_host_view_aura.h"
+
+extern "C" {
+int ChromeMain(int argc, const char** argv);
+
+__attribute__((visibility("default"))) int NO_STACK_PROTECTOR
+ChromeMainTizen(int argc, const char** argv);
+}
+
+namespace {
+
+content::WebContents* GetBrowserWebContent() {
+  Browser* browser = BrowserList::GetInstance()->GetLastActive();
+  if (browser == nullptr) {
+    LOG(INFO) << "Browser is null";
+    return nullptr;
+  }
+  TabStripModel* tab_strip_model = browser->tab_strip_model();
+  if (!tab_strip_model) {
+    LOG(INFO) << " Tab strip model is null";
+    return nullptr;
+  }
+  return tab_strip_model->GetActiveWebContents();
+}
+
+bool BrowserCreate(void* user_data) {
+  LOG(INFO) << "BrowserCreate";
+  const char** argv = static_cast<const char**>(user_data);
+  const char* chrome_arguments[] = {
+      argv[0],
+      "--no-sandbox",
+      "--ignore-gpu-blocklist",
+      "--ozone-platform=efl",
+      "--in-process-gpu",
+      "--window-size=1920,1080",
+      "--window-position=0,0",
+      "--enable-logging=stderr",
+  };
+  const int chromium_argc = sizeof(chrome_arguments) / sizeof(const char*);
+  return ChromeMain(chromium_argc, chrome_arguments);
+}
+
+void BrowserPause(void* user_data) {
+  LOG(INFO) << "BrowserPause call";
+  content::WebContents* web_contents = GetBrowserWebContent();
+  if (!web_contents) {
+    LOG(INFO) << " Active Web contents is null";
+    return;
+  }
+  content::RenderViewHost* rvh = web_contents->GetRenderViewHost();
+  content::RenderFrameHost* rfh = web_contents->GetPrimaryMainFrame();
+  if (!rvh) {
+    LOG(INFO) << " Render view host is null";
+    return;
+  }
+  if (!rfh) {
+    LOG(INFO) << " Render frame host is null";
+    return;
+  }
+  if (rvh->IsRenderViewLive()) {
+    LOG(INFO) << " pause webview";
+    content::RenderWidgetHostImpl* rwhi =
+        static_cast<content::RenderWidgetHostImpl*>(rvh->GetWidget());
+    rwhi->PauseScheduledTasks();
+  }
+  LOG(INFO) << " hide webview";
+  web_contents->WasHidden();
+}
+
+void BrowserResume(void* user_data) {
+  LOG(INFO) << "BrowserResume call";
+  content::WebContents* web_contents = GetBrowserWebContent();
+  if (!web_contents) {
+    LOG(INFO) << " Active Web contents is null";
+    return;
+  }
+  content::RenderViewHost* rvh = web_contents->GetRenderViewHost();
+  content::RenderFrameHost* rfh = web_contents->GetPrimaryMainFrame();
+  if (!rvh) {
+    LOG(INFO) << " Render view host is null";
+    return;
+  }
+  if (!rfh) {
+    LOG(INFO) << " Render frame host is null";
+    return;
+  }
+  content::RenderWidgetHostViewAura* rwhva =
+      static_cast<content::RenderWidgetHostViewAura*>(
+          web_contents->GetRenderWidgetHostView());
+
+  if (rvh->IsRenderViewLive() && rwhva) {
+    LOG(INFO) << " resume webview";
+    rwhva->host()->UnPauseScheduledTasks();
+  }
+  LOG(INFO) << " show webview";
+  web_contents->WasShown();
+}
+
+void BrowserTerminate(void* user_data) {
+  LOG(INFO) << "BrowserTerminate call";
+}
+
+void BrowserControl(app_control_h app_control, void* user_data) {
+  LOG(INFO) << "BrowserControl call";
+}
+
+bool IsSubprocess(const int argc, const char** argv) {
+  bool is_subprocess = false;
+  for (int i = 0; i < argc; i++) {
+    std::string arg(argv[i]);
+    is_subprocess = arg.find("--type") != std::string::npos;
+    if (is_subprocess) {
+      return is_subprocess;
+    }
+  }
+  return is_subprocess;
+}
+
+int ChromeBrowserMainTizen(const int argc, const char** argv) {
+  ui_app_lifecycle_callback_s event_callback;
+  memset(&event_callback, 0x00, sizeof(ui_app_lifecycle_callback_s));
+  event_callback.create = BrowserCreate;
+  event_callback.terminate = BrowserTerminate;
+  event_callback.pause = BrowserPause;
+  event_callback.resume = BrowserResume;
+  event_callback.app_control = BrowserControl;
+  return ui_app_main(argc, (char**)argv, &event_callback, argv);
+}
+}  // namespace
+
+int ChromeMainTizen(int argc, const char** argv) {
+  LOG(INFO) << "InitChromeTizenApp";
+  if (IsSubprocess(argc, argv)) {
+    return ChromeMain(argc, argv);
+  }
+  return ChromeBrowserMainTizen(argc, argv);
+}
index f0f46e6f3818026ceba53c13f1eaf796215f061b..c8e9d75f4f87588626722594a3c5b46559b4ccf7 100644 (file)
@@ -2,6 +2,15 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
+import("//tizen_src/build/config/tizen_features.gni")
+
+external_chrome_app_efl_sources = []
+
+if (is_tizen) {
+  external_chrome_app_efl_sources +=
+      [ "//tizen_src/chromium_impl/chrome/app/chrome_main_tizen.cc" ]
+}
+
 chrome_browser_net_efl_sources = [
   "//tizen_src/chromium_impl/chrome/browser/net/proxy_config_monitor.cc",
   "//tizen_src/chromium_impl/chrome/browser/net/proxy_config_monitor.h",
index 10572267a9dbd66271e8d49f13f2b668c4a8d6bf..e401250c0d5a1a9811aa2a8ca59e2f82f4b40360 100644 (file)
@@ -629,6 +629,16 @@ __attribute__((visibility("default"))) int ChromeMain(int argc,
     return fp(argc, argv);
   return 0;
 }
+__attribute__((visibility("default"))) int ChromeMainTizen(int argc,
+                                                           const char** argv) {
+  LOG(INFO) << "EWK-INTERFACE : ChromeMainTizen called..";
+  typedef int (*func_ptr_t)(int argc, const char** argv);
+  func_ptr_t fp = reinterpret_cast<func_ptr_t>(ewk_dlsym("ChromeMainTizen"));
+  if (fp) {
+    return fp(argc, argv);
+  }
+  return 0;
+}
 #endif
 #endif  // defined(BUILD_CHROME)
 
index 638929e6453bf067dd5735b7808a3e132be0c07e..3004c35ba82959689175e5024010a338d3b6a943 100644 (file)
@@ -13,4 +13,7 @@ group("chromium_efl_all") {
   if (is_tizen) {
     deps += [ "//tizen_src/downloadable:chromium-efl-install" ]
   }
+  if (build_chrome) {
+    deps += [ "//tizen_src/chromium_impl/chrome:chrome_exe_tizen" ]
+  }
 }
index c2abe398e40b1c5a2be0a7c28e598597ec8a27f7..3efc18887b8d21f36e6357ce969bace869f1eef6 100644 (file)
@@ -44,6 +44,7 @@
     node_module_register;
     # CHROMIUM BROWSER
     ChromeMain;
+    ChromeMainTizen;
     ChromeAppCreate;
     ChromeAppControl;
     ChromeAppResume;
index 3850b05cfd0c66299636bd44f726753eca5b3433..0942f53a0adf60fc34c963ab0d6b93d09121e7a5 100644 (file)
@@ -137,11 +137,12 @@ shared_library("chromium-ewk") {
                                "trim string",
                                [])
   defines = [ "CHROMIUM_VERSION=\"" + chrome_version + "\"" ]
+  version_script = "//tizen_src/ewk/chromium-ewk.filter"
+  inputs = [ version_script ]
   ldflags = [
     "-Wl,--as-needed",
     "-Wl,--no-undefined",
-    "-Wl,--version-script=" +
-        rebase_path("//tizen_src/ewk/chromium-ewk.filter"),
+    "-Wl,--version-script=" + rebase_path(version_script),
   ]
   cflags = [
     # Symbol visibility controled by chromium-ewk.filter