在chromium源码中增加默认的搜索引擎

ttt 2月前 61

接下的文章会涉及对chromium源代码的修改,会从一些简单的方向修改chromium的功能。本篇文章介绍如何在chromium中增加一个默认的搜索引擎。

以增加我们国家的搜索引擎--中国搜索 http://www.chinaso.com/ 为例



1、首先需要定义一下搜索引擎

在src/chrome/browser/search_engines/prepopulated_engines.json文件中,定义了许多默认的搜索引擎,我们在该文件中,搜索www.sogou.com,参考sogou的定义,在该文件中增加一条chinaso的配置。

name:“中国搜索”的utf8编码。

keyword:上图配置中第二列关键字。

favicon_url:网站图标,通常都会有,就在网站后边加个favicon.ico

search_url:这个是关键,需要根据搜索站点的url格式,拼出一个搜索的url,当用户在地址栏输入query后,会用query替换{searchTerms}

type:搜索引擎的type,按照例子造了一个。

id:prepopulated_engines.json文件上边有说明,“The following unique IDs are available:11, 12, 14, 18, 19, 20..... “,随便选一个。

    "yandex_ua": {
      "name": "\u042f\u043d\u0434\u0435\u043a\u0441",
      "keyword": "yandex.ua",
      "favicon_url": "http://yandex.ua/favicon.ico",
      "search_url": "http://yandex.ua/yandsearch?text={searchTerms}",
      "suggest_url": "http://suggest.yandex.net/suggest-ff.cgi?part={searchTerms}",
      "type": "SEARCH_ENGINE_YANDEX",
      "id": 15
    },
 
    "chinaso": {
      "name": "\u4e2d\u56fd\u641c\u7d22",
      "keyword": "chinaso.com",
      "favicon_url": "http://www.chinaso.com/favicon.ico",
      "search_url": "http://www.chinaso.com/search/pagesearch.htm?q={searchTerms}",
      "type": "SEARCH_ENGINE_CHINASO",
      "id": 11
    },
    // UMA-only engines ////////////////////////////////////////////////////////
 
    // The following engines are not included in any of the country lists. They
    // are listed in |kAllEngines|, however, so that GetEngineType can find them
    // for UMA reporting purposes.
2、配置中文默认搜索引擎。

在src\chrome\browser\search_engines\template_url_prepopulate_data.cc中修改

在engines_CN中加入“chinaso“,就是prepopulated_engines.json定义的搜索引擎

// China
const PrepopulatedEngine* engines_CN[] =
       { &chinaso, &baidu, &sogou, &soso, &google };
在kAllEngines中也加入“chinaso“,这个在GetEngineType函数中会用到。

// A list of all the engines that we know about.
 
const PrepopulatedEngine* kAllEngines[] = {
  ......
  &yahoo_vn,     &yahoo_za,     &yandex_ru,    &yandex_tr,    &yandex_ua,
  &chinaso,
  // UMA-only engines:
  ......
}
3、增加一个搜索引擎类型

src/chrome/browser/search_engines/search_engine_type.h

在SearchEngineType的SEARCH_ENGINE_MAX之前,增加一项SEARCH_ENGINE_CHINASO

 

重新编译后就能在设置->搜索中看到我们添加的默认搜索引擎。


https://blog.csdn.net/ljm198745/article/details/42098985
最新回复 (3)
  • ttt 2月前
    引用 2
    chromium定制启动首页
    chromium中想要定制首页有很多种方法,接下来我将一一介绍,也欢迎大家补充。

    1. 最简单的方式-启动带参数
    启动带参数,是最简单的让chromium,一启动就打开某个url的方式。在启动chrome.exe的时候,使用命令行的方式启动

    chrome.exe http://www.baidu.com

    这样打开的chromium,直接就默认打开百度首页了。

    2.修改源码实现默认打开某个url
    首先先找到chrome_browser_main.cc这个文件。这个文件的所在地是src/chrome/browser/chrome_browser_main.cc目录中。chromium的启动,一开始必然会先进入PreMainMessageLoopRunImpl函数中,所以我们的代码在这里面进行添加。 
    chromium里面很灵活的使用了配置文件profile来定制chromium的一些功能,具体可以通过配置profile实现那些功能可以打开pref_names.cc来查看。具体目录是src/chrome/common/pref_names.cc,我们这里利用的就是kRestoreOnStartup和kURLsToRestoreOnStartup这两个key来达到设置启动页的目的。我们来看看,代码里面对于这两个key的描述

    // An integer pref. Holds one of several values:
    // 0: (deprecated) open the homepage on startup.
    // 1: restore the last session.
    // 2: this was used to indicate a specific session should be restored. It is
    //    no longer used, but saved to avoid conflict with old preferences.
    // 3: unused, previously indicated the user wants to restore a saved session.
    // 4: restore the URLs defined in kURLsToRestoreOnStartup.
    // 5: open the New Tab Page on startup.
    const char kRestoreOnStartup[] = "session.restore_on_startup";

    // The URLs to restore on startup or when the home button is pressed. The URLs
    // are only restored on startup if kRestoreOnStartup is 4.
    const char kURLsToRestoreOnStartup[] = "session.startup_urls";
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    通过注释,我们很清楚的知道。当kRestoreOnStartup的值是4的时候,会打开kURLsToRestoreOnStartup中设置的url,所以代码我们可以利用这点来写。

    (1)代码写死的方法
    代码插入的地方在chrome_browser_main.cc 1239行之后。因为,我们在设置profile的时候,一定要在profile初始化完成之后即

    profile_ = CreatePrimaryProfile(parameters(),
                                      user_data_dir_,
                                      parsed_command_line());
    1
    2
    3
    这段代码后面

    插入以下代码,即可实现打开chromium默认显示指定网站

    std::string gameUrl = "http://blog.csdn.net/jianglong0156"
    PrefService* prefs = profile_->GetPrefs();
    prefs->SetInteger(prefs::kRestoreOnStartup, 4);
    base::ListValue* url_pref_list = new base::ListValue;
    base::StringValue *urlStr = new base::StringValue(gameUrl);
    url_pref_list->Set(0, urlStr);
    prefs->SetDefaultPrefValue(prefs::kURLsToRestoreOnStartup, url_pref_list);
    1
    2
    3
    4
    5
    6
    7
    (2)命令行传入参数的方式
    上面那种代码中写死的方式太不智能了。我们选着另外一种使用方式,那就是从命令行传入参数,将我们的gameUrl从命令行传入即可,代码如下

    const CommandLine& command_line = parsed_command_line();
    if (command_line.HasSwitch("game-url"))
    {
      std::string gameUrl =
       command_line.GetSwitchValueASCII("game-url");
      PrefService* prefs = profile_->GetPrefs();
      prefs->SetInteger(prefs::kRestoreOnStartup, 4);
      base::ListValue* url_pref_list = new base::ListValue;
      base::StringValue *urlStr = new base::StringValue(gameUrl);
      url_pref_list->Set(0, urlStr);
      prefs->SetDefaultPrefValue(prefs::kURLsToRestoreOnStartup, url_pref_list);
      LOG(INFO) << "chrome_browser_main.cc(1254):" << "open url " << gameUrl;
    }
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    具体代码解析请看下面定制命令行参数的方式。

    定制命令行参数
    我们在很多场景下需要输入一些数据让chromium做不同的事情,这个时候使用命令行参数是一个很方便的事情。

    通过命令行传入参数
    上文在定制首页中提到。我们需要传入定制url。这个时候我们可以在启动chromium的时候传入gameurl

    chrome.exe –game-url=”http://blog.csdn.net/jianglong0156” 
    注意:等号两边没有空格。 
    这样启动的chromium中,就携带了game-url的数据。

    程序中读取数据
    获取CommandLine对象
    在chrome_browser_main.cc中可以直接使用parsed_command_line()来获取CommandLine对象。而在其他类中可以使用CommandLine::ForCurrentProcess()来获取Command Line对象

    判定命令行是否传入game-url数据
    command_line.HasSwitch("game-url")

    获取gmae-url数据
    std::string userFilePathStr =           command_line.GetSwitchValueASCII("game-url");
  • ttt 2月前
    引用 3
    https://blog.csdn.net/jianglong0156/article/details/45646271
  • dmt 8天前
    引用 4
    C:\ch\src\components\search_engines
返回