Browse Source

#IQRV #comment [BugFix][Chromium] 兼容新版浏览器的调用

gifur 3 years ago
parent
commit
ea35f7fd01
4 changed files with 206 additions and 23 deletions
  1. 4 0
      Module/include/EventCode.h
  2. 173 19
      Module/mod_chromium/CModTools.cpp
  3. 16 3
      Module/mod_chromium/CModTools.h
  4. 13 1
      addin/cfg/Chromium.ini

+ 4 - 0
Module/include/EventCode.h

@@ -906,6 +906,10 @@ ERR_ACCESSAUTH_SHA1_HASH}
 #define	LOG_EVT_CHROMIUM_OPEN_MAIN_WITH_UOS 0x40200015
 #define	LOG_EVT_CHROMIUM_OPEN_AD_WITH_UOS 0x40200016
 #define	LOG_EVT_CHROMIUM_BROWSER_CACHE_CLEAER 0x40200017
+#define	LOG_EVT_CHROMIUM_OPEN_MAIN_WITH_UOSV2 0x40200018
+#define	LOG_EVT_CHROMIUM_OPEN_AD_WITH_UOSV2 0x40200019
+#define	LOG_EVT_CHROMIUM_BROWSER_USING_TYPE_CHANGE 0x4020001A
+
 
 #define EVENT_RESTART_SHELL      0x50300001  // 重启Shell
 #define EVENT_RESTART_MACHINE     0x50300002  // 重启终端

+ 173 - 19
Module/mod_chromium/CModTools.cpp

@@ -9,6 +9,7 @@ using namespace FreeRDPWrap;
 #include <mutex>
 #include <thread>
 #include "path.h"
+#include "fileutil.h"
 #include <boost/process.hpp>
 #include <boost/thread.hpp>
 #endif
@@ -25,6 +26,10 @@ using namespace FreeRDPWrap;
 #include "EventCode.h"
 #include "url_encoder.h"
 
+#include "CommEntityUtil.hpp"
+
+void SystemRunTest(const std::string& systemCmd);
+
 
 extern std::pair<bool, std::string> DetectActiveHttp(std::vector<std::string> urlArr);
 
@@ -126,6 +131,11 @@ namespace Chromium {
             child_process.wait();
 		} while (false);
 
+        do {
+            boost::process::child child_process("sudo killall -9 browser");
+            child_process.wait();
+        } while (false);
+
 		DbgEx("run killAllChromium success ex");
 		return true;
 #endif
@@ -414,7 +424,43 @@ namespace Chromium {
 
 	std::string CModTools::generateAdCmd(std::string AdUrl) {
 
-        if (m_bUseUOSBrowser) {
+		if (m_UseUOSBrowser == 2) {
+		
+			CSimpleStringA strUOSBrowserPath("browser");
+            CSimpleStringA strParams(true);
+            CSimpleStringA tempPath;
+            this->m_pEntity->GetFunction()->GetPath("Temp", tempPath);
+            CSimpleStringA cachePath(tempPath);
+
+            cachePath.Append(CSimpleStringA(SPLIT_SLASH_STR)).Append("UOSBrowser2_").Append((+ERR_PAGE_REASON::Ad)._to_string());
+            strParams.Append(" --disk-cache-dir=").Append(cachePath);
+            strParams.Append(" --disk-cache-size=").Append("2147483647"); //2G
+            CSimpleStringA usrDataPath(tempPath);
+            usrDataPath.Append(CSimpleStringA(SPLIT_SLASH_STR)).Append("UOSBrowserConfig2_").Append((+ERR_PAGE_REASON::Ad)._to_string());
+            strParams.Append(" --user-data-dir=").Append(usrDataPath);
+
+            std::string additionalParam = getAdditionalUOSBrowserSettings(2, 0);
+            if (!additionalParam.empty()) {
+                strParams.Append(" ");
+                strParams.Append(additionalParam.c_str());
+            }
+
+            additionalParam = getAdditionalUOSBrowserSettings(2, 2);
+            if (!additionalParam.empty()) {
+                strParams.Append(" ");
+                strParams.Append(additionalParam.c_str());
+            }
+
+			strParams.Append(" ");
+			strParams.Append(AdUrl.c_str());
+
+			strUOSBrowserPath.Append(strParams);
+
+            LogWarn(Severity_High, Error_Unexpect, LOG_EVT_CHROMIUM_OPEN_AD_WITH_UOSV2, strUOSBrowserPath);
+            return strUOSBrowserPath.GetData();
+		}
+
+        if (m_UseUOSBrowser == 1) {
 
             CSimpleStringA strUOSBrowserPath("uos-browser ");
             //CSimpleStringA strParams("--new-window  --window-position=1280,1024 --window-size=1920,1080");
@@ -426,16 +472,15 @@ namespace Chromium {
 
             cachePath.Append(CSimpleStringA(SPLIT_SLASH_STR)).Append("UOSBrowser_").Append((+ERR_PAGE_REASON::Ad)._to_string());
             strParams.Append(" --disk-cache-dir=").Append(cachePath);
-			strParams.Append(" --disk-cache-size=").Append("2147483648"); //2G
+			strParams.Append(" --disk-cache-size=").Append("2147483647"); //2G
 
 			CSimpleStringA usrDataPath(tempPath);
 			usrDataPath.Append(CSimpleStringA(SPLIT_SLASH_STR)).Append("UOSBrowserConfig_").Append((+ERR_PAGE_REASON::Ad)._to_string());
 			strParams.Append(" --user-data-dir=").Append(usrDataPath);
 
-            //strParams.Append(" --app=\"");
 			strParams.Append(" ");
 
-            std::string additionalParam = getAdditionalUOSBrowserSettings();
+            std::string additionalParam = getAdditionalUOSBrowserSettings(1, 0);
             if (!additionalParam.empty()) {
                 strParams.Append(additionalParam.c_str());
                 strParams.Append(" ");
@@ -473,15 +518,31 @@ namespace Chromium {
 	}
 
 
-    std::string CModTools::getAdditionalUOSBrowserSettings(int nType /*= 0*/)
+    std::string CModTools::getAdditionalUOSBrowserSettings(int nBrowswerType, int nMonitorType)
     {
 		std::string result("");
-		CSimpleStringA section("UOSBrowserCmd");
-		if (nType == 1) {
-			section = "UOSBrowserCmdMain";
-		} else if(nType == 2) {
-			section = "UOSBrowserCmdVice";
-		} else if (nType != 0) {
+		CSimpleStringA section(true);
+		if (nBrowswerType == 1) {
+			section = "UOSBrowserCmd";
+            if (nMonitorType == 1) {
+                section = "UOSBrowserCmdMain";
+            } else if (nMonitorType == 2) {
+                section = "UOSBrowserCmdVice";
+            } else if (nMonitorType != 0) {
+                return result;
+            }
+        } else if (nBrowswerType == 2) {
+            section = "UOSBrowserCmd2";
+            if (nMonitorType == 1) {
+                section = "UOSBrowserCmdMain2";
+            } else if (nMonitorType == 2) {
+                section = "UOSBrowserCmdVice2";
+            } else if (nMonitorType != 0) {
+                return result;
+            }
+        }
+
+		if (section.IsNullOrEmpty()) {
 			return result;
 		}
 
@@ -504,7 +565,47 @@ namespace Chromium {
 
     std::string CModTools::generateCefclientCmd(bool isExtend, std::string mainUrl)
 	{
-		if (m_bUseUOSBrowser && !isExtend) {
+
+		if (m_UseUOSBrowser == 2 && !isExtend) {
+		
+			CSimpleStringA strUOSBrowserPath("browser");
+            CSimpleStringA strParams(true);
+
+            CSimpleStringA tempPath;
+            this->m_pEntity->GetFunction()->GetPath("Temp", tempPath);
+            CSimpleStringA cachePath(tempPath);
+
+            cachePath.Append(CSimpleStringA(SPLIT_SLASH_STR)).Append("UOSBrowser2_")
+                .Append(isExtend ? (+ERR_PAGE_REASON::extend)._to_string() : (+ERR_PAGE_REASON::main)._to_string());
+            strParams.Append(" --disk-cache-dir=").Append(cachePath);
+            strParams.Append(" --disk-cache-size=").Append("2147483647"); //2G
+
+            CSimpleStringA usrDataPath(tempPath);
+            usrDataPath.Append(SPLIT_SLASH_STR).Append("UOSBrowserConfig2_")
+                .Append(isExtend ? (+ERR_PAGE_REASON::extend)._to_string() : (+ERR_PAGE_REASON::main)._to_string());
+            strParams.Append(" --user-data-dir=").Append(usrDataPath);
+
+            std::string additionalParam = getAdditionalUOSBrowserSettings(2, 0);
+            if (!additionalParam.empty()) {
+                strParams.Append(" ");
+                strParams.Append(additionalParam.c_str());
+            }
+
+            additionalParam = getAdditionalUOSBrowserSettings(2, 1);
+            if (!additionalParam.empty()) {
+                strParams.Append(" ");
+                strParams.Append(additionalParam.c_str());
+            }
+
+			strParams.Append(" ");
+            strParams.Append(mainUrl.c_str());
+            strUOSBrowserPath.Append(strParams);
+            LogWarn(Severity_High, Error_Unexpect, LOG_EVT_CHROMIUM_OPEN_MAIN_WITH_UOSV2, strUOSBrowserPath);
+
+            return strUOSBrowserPath.GetData();
+		}
+
+		if (m_UseUOSBrowser == 1 && !isExtend) {
 
 			CSimpleStringA strUOSBrowserPath("uos-browser ");
             CSimpleStringA strParams("--new-window --kiosk");
@@ -516,7 +617,7 @@ namespace Chromium {
             cachePath.Append(CSimpleStringA(SPLIT_SLASH_STR)).Append("UOSBrowser_")
 				.Append(isExtend ? (+ERR_PAGE_REASON::extend)._to_string() : (+ERR_PAGE_REASON::main)._to_string());
             strParams.Append(" --disk-cache-dir=").Append(cachePath);
-            strParams.Append(" --disk-cache-size=").Append("2147483648"); //2G
+            strParams.Append(" --disk-cache-size=").Append("2147483647"); //2G
 
             CSimpleStringA usrDataPath(tempPath);
             usrDataPath.Append(SPLIT_SLASH_STR).Append("UOSBrowserConfig_")
@@ -525,7 +626,7 @@ namespace Chromium {
 
 			strParams.Append(" ");
 
-			std::string additionalParam = getAdditionalUOSBrowserSettings();
+			std::string additionalParam = getAdditionalUOSBrowserSettings(1, 0);
 			if (!additionalParam.empty()) {
 				strParams.Append(additionalParam.c_str());
                 strParams.Append(" ");
@@ -636,7 +737,7 @@ namespace Chromium {
 
 			auto strCmdLine = generateMainCmd(mainUrlRet.second);
 
-			auto openCefRet = openCef(strCmdLine, !m_bUseUOSBrowser);//with guard
+			auto openCefRet = openCef(strCmdLine, m_UseUOSBrowser == 0);//with guard
 			if (Error_Succeed == openCefRet.first) {
                 LogWarn(Severity_Middle, Error_Debug, LOG_EVT_CHROMIUM_OPEN_MAIN_URL,
                         CSimpleStringA::Format("StartChromiumBrowser %s", mainUrlRet.second.c_str()));
@@ -1006,9 +1107,62 @@ namespace Chromium {
 			m_pEntity->GetFunction()->OpenConfig(Config_Cache, spConfig);
 			CSimpleStringA value(true);
 			spConfig->ReadConfigValue("BusinessBrowserType", "FultureEx", value);
-            m_bUseUOSBrowser = (value.IsNullOrEmpty() || (value.Compare("1") != 0));
+			if (!(value.IsNullOrEmpty() || (value.Compare("1") != 0))) {
+				m_UseUOSBrowser = 0;
+			} else {
+                m_UseUOSBrowser = ToGetUOSBrowserType();
+			}
 		} else {
-			m_bUseUOSBrowser = true;
+			m_UseUOSBrowser = ToGetUOSBrowserType();
+		}
+    }
+
+    int CModTools::ToGetUOSBrowserType()
+    {
+		const std::string execute_newbrowser_path = "/usr/share/browser/browser";
+        const std::string execute_oldbrowser_path = "/usr/share/uosbrowser/uosbrowser";
+
+		int result(0);
+		std::string additional("");
+
+        std::string succStr, errStr;
+        std::string runStr("dpkg -l | grep org.deepin.browser | awk '{print $3}'");
+        if (SP::Module::Util::ShellExecute(runStr, succStr, errStr)) {
+			if (succStr.empty()) {
+				if (ExistsFileA(execute_oldbrowser_path.c_str())) {
+					result = 1;
+				} else {
+					Dbg("%s not exists!", execute_oldbrowser_path.c_str());
+				}
+			} else {
+				Dbg("new browser version: %s", succStr.c_str());
+				additional = succStr;
+				if (!ExistsFileA(execute_newbrowser_path.c_str())) { Dbg("%s not exists!", execute_newbrowser_path.c_str()); }
+				result = 2;
+			}
+		} else {
+			Dbg("execute '%s' failed!", runStr.c_str());
+		}
+
+		UploadBrowserInfo(result, additional.c_str());
+
+		return result;
+    }
+
+    void CModTools::UploadBrowserInfo(int usingType, LPCTSTR info)
+    {
+        CSmartPointer<IConfigInfo> spConfig;
+        this->m_pEntity->GetFunction()->OpenConfig(Config_Run, spConfig);
+		int oldType(0);
+		CSimpleStringA strVersion;
+		spConfig->ReadConfigValueInt("BrowserUse", "Type", oldType);
+		spConfig->ReadConfigValue("BrowserUse", "Version", strVersion);
+		if (oldType != usingType || strVersion.Compare(info) != 0) {
+            LogWarn(Severity_High, Error_Unexpect, LOG_EVT_CHROMIUM_BROWSER_USING_TYPE_CHANGE,
+					CSimpleStringA::Format("{ \"type\":%d, \"version\":\"%s\"}", usingType, info));
+
+            spConfig->WriteConfigValueInt("BrowserUse", "Type", usingType);
+            spConfig->WriteConfigValue("BrowserUse", "Version", info);
 		}
     }
 
@@ -1089,7 +1243,6 @@ namespace Chromium {
 #endif
 	}
 
-
 	std::pair<ErrorCodeEnum, int> CModTools::openCef(std::string cmdline, bool isGuard)
 	{
 		if (isGuard) {
@@ -1106,7 +1259,8 @@ namespace Chromium {
 			return std::make_pair(std::get<0>(startRet) ? Error_Succeed : Error_Unexpect, std::get<1>(startRet));
 #else
 			auto systemStartChromium = [](std::string str) {
-				system(str.c_str());
+				//system(str.c_str());
+				SystemRunTest(str);
 			};
 			boost::thread(systemStartChromium, cmdline).detach();
 #endif

+ 16 - 3
Module/mod_chromium/CModTools.h

@@ -68,8 +68,17 @@ namespace Chromium {
 		std::string generateExtendCmd(std::string extendUrl);
 		std::string generateAdCmd(std::string AdUrl);
 
-		/** 0:通用,1主屏,2:副屏 [Gifur@2022125]*/
-		std::string getAdditionalUOSBrowserSettings(int nType = 0);
+		/**  [Gifur@2022125]*/
+		/**n  [Gifur@2022228]*/
+		/*!
+		 * @brief 
+		 * @param[in]  
+		 * nBrowswerType:0:cefclientt,1:UOS;2:UOS2
+		 * nMonitorType:0:通用,1主屏,2:副屏
+		 * @param[out] 
+		 * @return : 
+		 */
+		std::string getAdditionalUOSBrowserSettings(int nBrowswerType, int nMonitorType = 0);
 		std::pair<bool, std::string> GenerateErrPage(ERR_PAGE_REASON errType,
 			std::tuple < std::string, std::string> norParam, std::tuple<std::string, std::string, std::string, DWORD, DWORD> exParam);
 		std::pair<ErrorCodeEnum, int> openCef(std::string cmdline, bool isGuard = false);
@@ -83,6 +92,9 @@ namespace Chromium {
 		int StandardToStamp(const char* str_time, bool dateOnly);
 		bool CheckTradeRecord();
 		void InitBrowserUseMode();
+		//0: 检测失败;1:使用旧版UOS浏览器uos-browser-stable ;2:使用新版UOS浏览器org.deepin.browser
+		int ToGetUOSBrowserType();
+		void UploadBrowserInfo(int usingType, LPCTSTR info); 
 
 		bool findRestartCode(DWORD userCode);//if true, restart the terminal
 		DWORD spiltErrMsg(std::string errMsg);//split the errmsg to usercode
@@ -92,7 +104,8 @@ namespace Chromium {
 		CSimpleString m_UserMgrUrlStr, m_UserMgrUrlNoSidebarStr, m_UserMgrUrlNoSidebarMutiStr, m_UserMgrUrlFultureStr, m_UserMgrAdStr;
 		bool m_withMin, m_withClose;
 		std::string m_magicStr;
-		bool m_bUseUOSBrowser;
+		/** 0:使用CefClient,1:使用旧版UOS浏览器uos-browser-stable ;2:使用新版UOS浏览器org.deepin.browser  [Gifur@2022228]*/
+		int m_UseUOSBrowser;
 	};
 
 	template<class T>

+ 13 - 1
addin/cfg/Chromium.ini

@@ -13,4 +13,16 @@ Additional6=--disable-suggestions-service
 Additional7=--disable-save-password-bubble
 Additional8=--disable-component-update
 ;让浏览器直接以隐身模式启动
-Additional9999=--incognito
+Additional9999=--incognito
+
+[UOSBrowserCmd2]
+Count=4
+Additional0=--kiosk
+Additional1=--incognito
+Additional2=--no-sandbox
+Additional3=--new-window
+Additional4=--allow-running-insecure-content
+
+[UOSBrowserCmdVice2]
+Count=0
+Additional0=--window-position=1280,1024