Chrome浏览器代码修改记录

0x1、概述

对于Chrome的编译工作,大家可以参考上一篇《编译基于Chrome代码修改的Brave浏览器》,这里就不再重复了,这一篇主要是通过代码如何去修改User-Agent、代理、开启隐私模式等配置。在尝试修改前,自己也通过搜索引擎去搜索,但也没有发现可以直接使用的方式,以下加入功能的地方不一定是最好的,但至少可以实现功能,如果有更好的实现方式,欢迎大家指正。

 

0x2、修改功能

a、第一次启动跳过接受协议界面

在org.chromium.chrome.browser.firstrun.FirstRunActivity类中,
onNativeDependenciesFullyInitialized方法中添加acceptTermsOfService(false);

 

b、默认开启设置指纹保护功能

在org.chromium.chrome.browser.firstrun.FirstRunActivity类中,加引用

import org.chromium.chrome.browser.ChromeApplication;
import org.chromium.base.ContextUtils;

//在onNativeDependenciesFullyInitialized方法中添加
    ChromeApplication app = (ChromeApplication)ContextUtils.getApplicationContext();
    if (null != app) {
        app.initShieldsConfig();
        app.getShieldsConfig().setBlockFingerprints();
    }

c、修改user-agent

在browser-android-tabs-master\net\base\network_delegate.cc中
    extern std::string g_custom_ua;
并在NotifyBeforeSendHeaders方法中加入以下代码替换ua
 headers->SetHeader("User-Agent", g_custom_ua);

其中g_custom_ua是一个全局变量,定义的地方可以在你喜欢的位置中定义,并实现jni设置代理的方法,在java层调用,以下是一种方式,在browser-android-tabs-master\chrome\browser\offline_pages\android\offline_page_bridge.cc中加入

#include <string>
std::string g_custom_ua_gp;

static jboolean JNI_OfflinePageBridge_SetUserAgent(JNIEnv* env,
    const JavaParamRef<jclass>& clazz,const JavaParamRef<jstring>& j_ua){
        
    g_custom_ua_gp = ConvertJavaStringToUTF8(env, j_ua);
    return true;
}

并在org.chromium.chrome.browser.offlinepages.OfflinePageBridge.java中加入该方法,以供需要修改的地方调用

public static native boolean nativeSetUserAgent(String ua);

d、修改代理

在browser-android-tabs-master\net\socket\client_socket_pool_manager.h

声明新的函数

ProxyInfo GetProxyInfo(const ProxyInfo& proxy_info1);

在browser-android-tabs-master\net\socket\client_socket_pool_manager.cc

引用全局变量
extern std::string g_custom_host_gp;
extern int g_custom_port_gp;

并实现函数
 

ProxyInfo GetProxyInfo(const ProxyInfo& proxy_info1) {
    ProxyInfo proxy_info;
                  
        const net::HostPortPair proxy_host(g_custom_host_gp, g_custom_port_gp);
       //注意,这里需要代理的方式修改成你想支持的方式,也可以作为参数传进来,代理的类型请参考ProxyServer
        const net::ProxyServer proxy_server(net::ProxyServer::SCHEME_SOCKS5,proxy_host);
    
    proxy_info.UseProxyServer(proxy_server);
    proxy_info.set_traffic_annotation(proxy_info1.traffic_annotation());
     return proxy_info;
}

最后在InitSocketPoolHelper函数中调用,记得把函数中的原来proxy_info形式参数改为proxy_info1
  net::ProxyInfo proxy_info = GetProxyInfo(proxy_info1);

最后在你自己喜欢的地方加上jni方法,给java层调用,我临时加在browser-android-tabs-master\chrome\browser\offline_pages\android\offline_page_bridge.cc中

先定义全局变量
std::string g_custom_host_gp;
int g_custom_port_gp;

再添加给java层调用的静态jni函数

 static jboolean JNI_OfflinePageBridge_SetProxy(JNIEnv* env,
    const JavaParamRef<jclass>& clazz,const JavaParamRef<jstring>& j_host,const jint j_port){
    g_custom_host_gp = ConvertJavaStringToUTF8(env, j_host);
    g_custom_port_gp = j_port;
                       
    return true;
}

最后在org.chromium.chrome.browser.offlinepages.OfflinePageBridge.java的加入以下方法

public static native boolean nativeSetProxy(String host,int port);

e、开启隐私模式

如果想在启动时自动进入隐私模式,可以加在org.chromium.chrome.browser.ChromeActivity.java中的initializeCompositorContent方法最后面,以下是加入的代码

 ContextUtils.getAppSharedPreferences().edit().putBoolean(TemplateUrlService.PREF_DDG_OFFER_SHOWN, true).apply();
TemplateUrlService.getInstance().setSearchEngine(TemplateUrlService.DDG_SE_NAME, TemplateUrlService.DDG_SE_KEYWORD, true);

getTabModelSelector().getModel(false).commitAllTabClosures();
// This action must be recorded before opening the incognito tab since UMA actions
// are dropped when an incognito tab is open.
RecordUserAction.record("MobileMenuNewIncognitoTab");
RecordUserAction.record("MobileNewTabOpened");
//reportNewTabShortcutUsed(true);
getTabCreator(true).launchNTP();

f、自动打开网站

可以在ChromeTabbedActivity.java或者ChromeActivity.java合适的地方加入以下代码就可以了

getActivityTab().loadUrl(new LoadUrlParams(GOOGLE_URL, PageTransition.LINK));

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章